Un tema de diseño

Post Reply
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Un tema de diseño

Post by lubin »

Estimados

Les comparto un caso para escuchar sus comentarios, que recomendarían ?

En la oficina central tenemos nuestro sistema contable y tiene módulos independientes como Facturación, Cobranzas , Compras y Pago a Proveedores que le generan los asientos contables al sistema contable en Linea automáticamente,, todo esto trabajando en una red Local con MYSql; todo muy bien

Ahora el caso:
Abrimos 3 oficinas nuevas en otra provincia. que usaran también Facturación, Cobranzas , Compras y Pago a Proveedores y desean que también alimente los asientos automáticamente al Sistema Contable del a Oficna Central. (El cliente no requiere necesariamente que las operaciones se registren en contabilidad en Linea,

1. Que podrían sugerir ? sistema web (nube) , procesos en batch ? , (al parecer podría haber problemas de conexión de internet, por ello no exigen que sea en Linea)

Tengo ideas,, pero me gustaría conocer opiniones,
Les agradezco de antemano

Lubin
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Un tema de diseño

Post by cmsoft »

Hola Lubin:
Es un buen tema para el debate.
El mayor problema es la falta de conectividad a internet, que actualmente hoy sigue habiendo en algunos lugares.
Una opción poner la base de datos en un hosting web (Si tienes falta de conectividad esta opcion no es recomendable), o simplemente, contratar una ip fija en la casa central.
Si optas por el hosting web, siempre debería haber internet para que todas las sucursales incluyendo la central puedan operar.
Si optas por contratar un ip fija, la central puede acceder a la base de datos en forma local (con la ip de la red local) y las sucursales dependerán de la conexión a internet.
En ésta segunda opción la puedes combinar, y tener tu solución. O sea:
Base de casa central en red de area local, y ademas con una IP fija.
Base de datos en sucursales en red de area local.
Proceso contable en modo batch que se ejecute siempre que haya conectividad a la IP fija.
Claramente tendrás que tocar un poco tus prgs, pero esto depende de la complejidad de los mismos. Tendrás que controlar en las sucursales que asientos contables ya fueron generados en la central para no volver a procesarlos. Y al momento de ejecutar los procesos bacth tendrás que abrir dos conexiones simultaneas apuntando una a cada base de datos, la de la sucursal para leer y marcar como procesado los asientos y la de la central para grabar los asientos contables.
Espero haberte dado al menos una pista..
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Un tema de diseño

Post by leandro »

Lubin buenos días,

Algo que se me ocurre de momento es crear un servicio web, el cual va estar publicado en la casa principal, este se encargara de recibir los asientos contables.

En las oficinas de provincia crear un prg nuevo que se encargue del consumo de ese servicio web.

De esta forma te evitas el inconveniente de modificar demasiado tus prg de paso y si hay problemas con la conectividad, puedes consumir los servicios en el momento que sea necesario, sin necesidad de estar en linea.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Un tema de diseño

Post by lubin »

Gracias por la Respuesta cmsoft

Efectivamente la falta de internet genera un tema de inestabilidad.

Yo también estaba pensando que la mejor solución es trabajar en un proceso en Batch por el elemento de la conectividad que es un servicio no muy estable por ser zonas muy alejadas de la ciudad,

Aun mas, no me arriesgaría hacer la transferencia del asiento por asiento directamente vía IP hacia la base de datos de la Oficina Principal, por que se puede ir el Internet

Estaria planteando lo siguiente :

1. En la Oficina remota, Todos los módulos de Facturación/Compras/Almacenes que hagan su trabajo cotidiano y generen los voucher en forma Local (en la oficina remota), pero sus registros quedaran "Marcados con Fecha-Hora x Enviar"

2. En la Oficina Remota... Al cierre del Dia tendre un modulo de "Envio-de-Voucher", que leera los Vouchers "NUEVOS" creados por Facturacion/Compas/" y se creara un Archivo Zip "PAQUETE-VOUCHER.zip" y lo mandare via FTP,, marcando los registros de los voucher como "enviados"

3. En la empresa Central, usara un nuevo modulo llamado "recepecion-de-voucher" usando via FTP se descargara el Archivo ZIP, y lo descomprimo, lo valido con un checsum y actualizo la contabilidad,

Que opinan, que contigencias habria que tenerpresente.


Gracias por la respuesta.
cmsoft wrote:Hola Lubin:
Es un buen tema para el debate.
El mayor problema es la falta de conectividad a internet, que actualmente hoy sigue habiendo en algunos lugares.
Una opción poner la base de datos en un hosting web (Si tienes falta de conectividad esta opcion no es recomendable), o simplemente, contratar una ip fija en la casa central.
Si optas por el hosting web, siempre debería haber internet para que todas las sucursales incluyendo la central puedan operar.
Si optas por contratar un ip fija, la central puede acceder a la base de datos en forma local (con la ip de la red local) y las sucursales dependerán de la conexión a internet.
En ésta segunda opción la puedes combinar, y tener tu solución. O sea:
Base de casa central en red de area local, y ademas con una IP fija.
Base de datos en sucursales en red de area local.
Proceso contable en modo batch que se ejecute siempre que haya conectividad a la IP fija.
Claramente tendrás que tocar un poco tus prgs, pero esto depende de la complejidad de los mismos. Tendrás que controlar en las sucursales que asientos contables ya fueron generados en la central para no volver a procesarlos. Y al momento de ejecutar los procesos bacth tendrás que abrir dos conexiones simultaneas apuntando una a cada base de datos, la de la sucursal para leer y marcar como procesado los asientos y la de la central para grabar los asientos contables.
Espero haberte dado al menos una pista..
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Un tema de diseño

Post by lubin »

Hola Leando

Para el caso que propones, de manejarlo con un Servicio Web, tendria que :

1. Habilitar un servidor Web en oficina principal, con una IP Fija, en este servidor web almacena los asientos contables ?
2. En provincia lanzar el Voucher contable al Servico WEB.

Lo que no entiendo es lo siguiente : ¿ como consumir los servicios sin estar en Linea?

Gracias
Lubin

leandro wrote:Lubin buenos días,

Algo que se me ocurre de momento es crear un servicio web, el cual va estar publicado en la casa principal, este se encargara de recibir los asientos contables.

En las oficinas de provincia crear un prg nuevo que se encargue del consumo de ese servicio web.

De esta forma te evitas el inconveniente de modificar demasiado tus prg de paso y si hay problemas con la conectividad, puedes consumir los servicios en el momento que sea necesario, sin necesidad de estar en linea.
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Un tema de diseño

Post by leandro »

Lo que no entiendo es lo siguiente : ¿ como consumir los servicios sin estar en Linea?
Amigo, a lo que me refería es que puedes trabajar de manera local y en el momento que tengas conexión a internet, envías los registros.

Para hacerme entender, no tienes que estar en línea todo el tiempo.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Un tema de diseño

Post by cmsoft »

Lubin:
Creo que está muy bien planteado, pero si tienes conectividad para subir el archivo por FTP, también la tendrías para ejecutar la actualización de la base de forma directa.
Si encierras todo el proceso de escritura en ambas bases (en la local para marcar como enviados y en la de casa central para generar los asientos) en un TRY CATCH con BeginTransactiony CommitTransaction, te aseguras que todo el proceso se ejecutó de forma correcta. Si en el medio del proceso el mismo falla por falta de conectividad, haces el RollBack y todo queda como estaba.
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Un tema de diseño

Post by lubin »

Perfecto Leandro

Ya me estaba alucinando un Wifi Satelital !! jajjaj

Graciass
leandro wrote:
Lo que no entiendo es lo siguiente : ¿ como consumir los servicios sin estar en Linea?
Amigo, a lo que me refería es que puedes trabajar de manera local y en el momento que tengas conexión a internet, envías los registros.

Para hacerme entender, no tienes que estar en línea todo el tiempo.
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Un tema de diseño

Post by lubin »

Ok, Tendria que ver que tal va con rl TRY CATCH ,no lo he usado ,, ubicare algun ejemplo de uso con ello mas el BeginTransactiony CommitTransaction

Yo pensaba eso de FTP ,, por que seria un solo archivo empaquetado.. que de un solo golpe llega a la Oficina principal ,, y bueno ya ahi con tranquilidad ejecuto la actualizacion de todos los registros.. ese era la idea..

Voy analizar lo que me comentas, Si por ahi te sobra algun ejemplo con el try catch comentado... seria super.

Les ire comentando como va la cosa, creo que esta interesante el desarrollo del caso.

Gracias..
cmsoft wrote:Lubin:
Creo que está muy bien planteado, pero si tienes conectividad para subir el archivo por FTP, también la tendrías para ejecutar la actualización de la base de forma directa.
Si encierras todo el proceso de escritura en ambas bases (en la local para marcar como enviados y en la de casa central para generar los asientos) en un TRY CATCH con BeginTransactiony CommitTransaction, te aseguras que todo el proceso se ejecutó de forma correcta. Si en el medio del proceso el mismo falla por falta de conectividad, haces el RollBack y todo queda como estaba.
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Un tema de diseño

Post by cmsoft »

Code: Select all

FUNCTION GenerarAsientos()
// Primero conectas al servidor local
TRY
      CONNECT oServerLocal HOST cServer ;
                      USER cUser ;
                      PASSWORD cPassword ;
                      PORT nPort ;
                      FLAGS nFlags;
                      DATABASE cDBName
                                
    CATCH oErr 
      RETURN NIL
    END
// Luego al servidor remoto
TRY
      CONNECT oServerRemoto HOST cServer1 ;
                      USER cUser1 ;
                      PASSWORD cPassword1 ;
                      PORT nPort1 ;
                      FLAGS nFlags1;
                      DATABASE cDBName1
                                
    CATCH oErr 
      RETURN NIL
    END
// Por ultimo ejecutas las consultas en cada servidor
TRY
    oServerRemoto:BeginTransaction()
    cDatos := ArmaConsulta() // Con esta funcion tendrias que armar un texto con la query a insertar
     oServerRemoto:Execute("INSERT INTO asientos (dato1,dato2,dato3) VALUES "+cDatos)
     // y Todos los insert que tengas que hacer
     oServerLocal:BeginTransaction()
     oServerLocal:Execute("UPDATE compras SET procesado=true,fecha_proceso = CURDATE()")
     // y Todos los updates que tengas que hacer
    oServerLocal:CommitTransaction() // Confirmas grabacion en cada base de datos
    oServerRemoto:CommitTransaction()
    CATCH oErr 
        // Si algo fallo reviertes _
        oServerLocal:RollBack() 
        oServerRemoto:RollBack()
        MsgStop("Algo anduvo mal","Error")
    END
MsgInfo("Asientos Actualizados en Casa Central")
RETURN nil
 
Basicamente esa sería la lógica
Yo uso TDolphin, no se que usas vos pero la lógica sería la misma
Espero te sea de utilidad
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Un tema de diseño

Post by lubin »

Gracias Me va a ser muy util tener un camino ..

Nuevamente Gracias
cmsoft wrote:

Code: Select all

FUNCTION GenerarAsientos()
// Primero conectas al servidor local
TRY
      CONNECT oServerLocal HOST cServer ;
                      USER cUser ;
                      PASSWORD cPassword ;
                      PORT nPort ;
                      FLAGS nFlags;
                      DATABASE cDBName
                                
    CATCH oErr 
      RETURN NIL
    END
// Luego al servidor remoto
TRY
      CONNECT oServerRemoto HOST cServer1 ;
                      USER cUser1 ;
                      PASSWORD cPassword1 ;
                      PORT nPort1 ;
                      FLAGS nFlags1;
                      DATABASE cDBName1
                                
    CATCH oErr 
      RETURN NIL
    END
// Por ultimo ejecutas las consultas en cada servidor
TRY
    oServerRemoto:BeginTransaction()
    cDatos := ArmaConsulta() // Con esta funcion tendrias que armar un texto con la query a insertar
     oServerRemoto:Execute("INSERT INTO asientos (dato1,dato2,dato3) VALUES "+cDatos)
     // y Todos los insert que tengas que hacer
     oServerLocal:BeginTransaction()
     oServerLocal:Execute("UPDATE compras SET procesado=true,fecha_proceso = CURDATE()")
     // y Todos los updates que tengas que hacer
    oServerLocal:CommitTransaction() // Confirmas grabacion en cada base de datos
    oServerRemoto:CommitTransaction()
    CATCH oErr 
        // Si algo fallo reviertes _
        oServerLocal:RollBack() 
        oServerRemoto:RollBack()
        MsgStop("Algo anduvo mal","Error")
    END
MsgInfo("Asientos Actualizados en Casa Central")
RETURN nil
 
Basicamente esa sería la lógica
Yo uso TDolphin, no se que usas vos pero la lógica sería la misma
Espero te sea de utilidad
Post Reply