Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   modificar un programa sin afecte a la aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=91303)

identsoft 27-12-2016 10:02:57

modificar un programa sin afecte a la aplicacion
 
Hola a todos.
tengo una misma aplicacion instalada en varios clientes. Lo que sucede es que a veces, algún cliente me pide modificaciones solo para él, p.e. un determinado listado con una características especiales que solo sirven a un cliente, pero me obliga a modificar el menu general para poder llamarlo.
Mi pregunta es ¿se puede modificar un programa para un cliente sin que afecte al resto de la aplicación?.
Por ejemplo, una idea (teórica, no se si real): ¿se podría crer una nueva carpeta donde estarian solo las modificaciones de ese cliente y que compilara conjuntamente con la carpeta original?. De tal forma que si un cliente no tiene modificaciones se compila desde la carpeta original y si ese cliente tiene modificaciones se compila utilizando las dos carpetas, la carpeta original y la carpeta que contiene las modificaciones.
Si se puede como habría que hacerlo?
Si no se puede ¿como podría resolver este problema?
Gracias y perdón por si no he sabido expresarme correctamente.

Neftali [Germán.Estévez] 27-12-2016 11:35:34

Cita:

Empezado por identsoft (Mensaje 512013)
pero me obliga a modificar el menu general para poder llamarlo.
Mi pregunta es ¿se puede modificar un programa para un cliente sin que afecte al resto de la aplicación?.

Mi recomendación es que nunca distribuyas diferentes versiones del programa según los clientes.
Es decir, que te las arregles para que el ejecutable sea el mismo para todos. Algo diferente de esto sólo te va a traer problemas y quebraderos de cabeza.

Cita:

Empezado por identsoft (Mensaje 512013)
¿se podría crer una nueva carpeta donde estarian solo las modificaciones de ese cliente y que compilara conjuntamente con la carpeta original?. De tal forma que si un cliente no tiene modificaciones se compila desde la carpeta original y si ese cliente tiene modificaciones se compila utilizando las dos carpetas, la carpeta original y la carpeta que contiene las modificaciones.
Si se puede como habría que hacerlo?
...

No hay una solución estándard para resolverlo, se trata de tener imaginación para cada caso.
En el caso de los listados, por ejemplo, puedes tener una carpeta donde cada cliente tenga sus listados de forma que à la hora de instalar o actualizar no modifiques los listados del cliente.
O tener una carpeta para los listados de la aplicación (esos puedes actualizarlos) y otra para los "personalizados" de cada cliente, de forma que estos últimos nunca se "machacan" cuando instalas o actualizas.

Por ejemplo, si necesitas crear elementos de menú para llamar a los listados de un cliente, puedes hacerlo en tiempo de ejecución utilizando un fichero de configuración (es la primera que se me ocurre).
Tener un elemento de menú que diga "listados" o "Listados personalizados" y luego un pequeño fichero de configuración que sea algo así:

Código Delphi [-]
[LISTADOS]
Listado1=Resumen semanal
path1=c:\Program Files\MyApp\ListadosCliente\ResumenSemanal.frf
Listado2=Facturación anual
path2=c:\Program Files\MyApp\ListadosCliente\FacturacionAnual.frf
...

En ejecución, segun ese fichero puedes crear los elementos de menú para lanzar los listados.

Es simplemente un ejemplo, se trata de pensar algo que se ajuste a lo que necesitas, pero hay infinitas opciones.
Si detallas más concretamente tu problemas te podemos dar alguna idea y algo de código.

WHILENOTEOF 27-12-2016 12:30:25

Comparto la opinión de cuanto menos tipos ejecutables mejor, aunque puedes generar alguna versión diferente con directivas de compilación. Personalmente prefiero poner todas la opciones de menús, informes y formularios dentro de la base de datos, y según el perfil de usuario se cargan en tiempo de ejecución los que le corresponden.

Ñuño Martínez 27-12-2016 12:46:02

Si necesitas que tu aplicación se comporte de forma diferente según el cliente, usa algún sistema de extensiones (scripts). Pascal Script de Rem Objects es posiblemente la mejor opción ya que es el mismo lenguaje (Object Pascal), es fácil de integrar usando RTTI y puede usarse vía componentes visuales.

Si se trata únicamente de listados (reportes) la mayoría de los sistemas admiten que el diseño de estos pueda guardarse en un archivo de datos para ser leído en el momento de imprimir.

Neftali [Germán.Estévez] 27-12-2016 12:48:22

También puedes generar BPL's o DLL's que modifiquen el comportamiento estandard (más compleja).
Como vez hay muchas opciones, unas más complejas que otras. Hay que ver cual se ajusta a tus necesidades.

identsoft 27-12-2016 12:48:55

Cita:

Empezado por Neftali (Mensaje 512014)
Mi recomendación es que nunca distribuyas diferentes versiones del programa según los clientes.
Es decir, que te las arregles para que el ejecutable sea el mismo para todos. Algo diferente de esto sólo te va a traer problemas y quebraderos de cabeza.

Tienes razón, lo ideal es que el ejecutable sea el mismo para todos, pero a veces eso no es posible y tenemos que ir añadiendo modificaciones propias para cada cliente.

Cita:

Empezado por Neftali (Mensaje 512014)
No hay una solución estándard para resolverlo, se trata de tener imaginación para cada caso.
En el caso de los listados, por ejemplo, puedes tener una carpeta donde cada cliente tenga sus listados de forma que à la hora de instalar o actualizar no modifiques los listados del cliente.
O tener una carpeta para los listados de la aplicación (esos puedes actualizarlos) y otra para los "personalizados" de cada cliente, de forma que estos últimos nunca se "machacan" cuando instalas o actualizas.

Por ejemplo, si necesitas crear elementos de menú para llamar a los listados de un cliente, puedes hacerlo en tiempo de ejecución utilizando un fichero de configuración (es la primera que se me ocurre).
Tener un elemento de menú que diga "listados" o "Listados personalizados" y luego un pequeño fichero de configuración que sea algo así:

Código Delphi [-]
[LISTADOS]
Listado1=Resumen semanal
path1=c:\Program Files\MyApp\ListadosCliente\ResumenSemanal.frf
Listado2=Facturación anual
path2=c:\Program Files\MyApp\ListadosCliente\FacturacionAnual.frf
...

En ejecución, segun ese fichero puedes crear los elementos de menú para lanzar los listados.

Es simplemente un ejemplo, se trata de pensar algo que se ajuste a lo que necesitas, pero hay infinitas opciones.
Si detallas más concretamente tu problemas te podemos dar alguna idea y algo de código.

He puesto el ejemplo de los listados porque es el más común. pero las modificaciones pueden ser múltiples y variadas. Por ejemplo: la aplicación es multiempresa y cada empresa puede tener Clientes propios y Agentes que a su vez pueden tener otros Clientes. La facturación se puede hacer tanto a los clientes propios como a nombre de los agentes como a nombre del cliente de los agentes. Lo mismo a la hora de contabilizar el apunte contable. Otro ejemplo: cada artículo tiene un precio determinado, pero dependiendo del cliente puede tener otro precio y lo mismo para el Agente o para el cliente del agente. etc,etc.. y así más.
Yo intento adaptar esas modificaciones al aplicativo general, pero a veces es imposible.

identsoft 27-12-2016 12:53:12

Cita:

Empezado por Ñuño Martínez (Mensaje 512020)
Si necesitas que tu aplicación se comporte de forma diferente según el cliente, usa algún sistema de extensiones (scripts). Pascal Script de Rem Objects es posiblemente la mejor opción ya que es el mismo lenguaje (Object Pascal), es fácil de integrar usando RTTI y puede usarse vía componentes visuales.

Si se trata únicamente de listados (reportes) la mayoría de los sistemas admiten que el diseño de estos pueda guardarse en un archivo de datos para ser leído en el momento de imprimir.

Gracias. Miraré a ver si es lo que necesito

identsoft 27-12-2016 12:58:48

Cita:

Empezado por Neftali (Mensaje 512021)
También puedes generar BPL's o DLL's que modifiquen el comportamiento estandard (más compleja).
Como vez hay muchas opciones, unas más complejas que otras. Hay que ver cual se ajusta a tus necesidades.

¿Como funcionan BPL's? Un ejemplo, un sitio donde buscar información?.
Lo mismo con DLL's. Nunca he trabajado con ellas.
Gracias

Neftali [Germán.Estévez] 27-12-2016 13:26:40

Cita:

Empezado por identsoft (Mensaje 512025)
¿Como funcionan BPL's? Un ejemplo, un sitio donde buscar información?.
Lo mismo con DLL's. Nunca he trabajado con ellas.
Gracias

http://neftali.clubdelphi.com/dlls-b...es-en-runtime/
http://neftali.clubdelphi.com/vcl-y-firemonkey/
http://neftali.clubdelphi.com/sistem...elphi-parte-1/
http://neftali.clubdelphi.com/sistem...elphi-parte-2/

Aquí en el foro, si buscas también encontrarás hilos al respecto.
Y en el FTP hay también algunos ejemplos sencillos.

identsoft 27-12-2016 13:49:26

Gracias Neftali.
Voy a revisarlos.


La franja horaria es GMT +2. Ahora son las 15:42:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi