|
|
|||||||||||||||||
|
TransLoader: programa para la transferencia y carga de transacciones 1.- Descripcion general: Transloader.exe es un programa que le permite transmitir (via un servidor FTP) y cargar archivos de transacciones y datos descriptivos originados en un equipo o red local hacia otro equipo o red local. Aunque es útil en un nivel básico, presenta ciertas limitaciones que serán subsanadas en versiones posteriores de ClearLight. La limitación más severa se deriva del hecho es que el sistema fue diseñado para operar en una red interconectada, no en el ambiente distribuido de redes o equipo independientes que asume TransLoader. En el diseño actual, las referencias a los documentos se establecen mediante números secuenciales, únicos en cada entorno, pero que pueden repetirse (de hecho, deben repetirse) en entornos independientes. A consecuencia de esto, las relaciones entre documentos no siempre estarán disponibles de la manera conveniente, y algunas operaciones transferidas a redes remotas no produciran todos los efectos deseados. Por ejemplo, si en una localidad L1 se genera una orden de compra, y en otra localidad L2 se recibe una factura contra esa orden de compra, los datos transmitidos procesarán correctamente la mercancía recibida, pero no se actualizará el estado de la orden de compra, porque es imposible -en el estado actual del sistema- determinar de manera inequívoca cuál es la orden de compra usada en L2. Tenemos planes para solucionar esa situación, pero para ello se requiere una actualizacion mayor, y eso toma tiempo. 2.- Capacidades: En su estado actual (5/12/2006) TransLoader puede cargar los siguientes documentos y operaciones:
Adicionalmente, es posible extenderlo, mediante el uso de una DLL, para que reconozca registros de exportacion definidos por el usuario e implementados mediante mecanismos de extensibilidad basados en VBScript segun se describe en el manual del usuario de ClearLight. Los detalles para la implementación de este mecanismo de extensibilidad se describen mas adelante. En cualquier caso, TransLoader es nuestro proyecto principal en este momento, y estaremos actualizandolo casi diariamente. 3.- Instalación: Para la instalación de TransLoader es necesario que cada terminal en la red virtual (es decir, el conjunto de todos los equipos que usan ClearLight en todas las ubicaciones) tenga una identificacion diferente (esto no es necesario para el uso de ClearLight en instalaciones independientes). Es recomendable también que cada localidad use un codigo diferente para su almacén. Todos los usuarios de todas las localidades deben estar registrados en todas las localidades. El paquete anexo incluye dos archivos:
Copie el programa ejecutable en la carpeta de programas (normalmente \Archivos de Programa\ClearLIght). La DLL puede copiarse indistintamente en la carpeta de programas o en la carpeta de extensiones de ClearLight (\Archivos de Programa\Archivos Comunes\VSL). Registre la DLL mediante regsvr32.exe. TransLoader.exe recibe argumentos en la linea de comandos. Estos son:
La manera de pasar argumentos de linea de comandos mediante un acceso directo es la siguiente:
4.- Exportacion de los datos: 4.1.- Configurar los destinatarios: La exportación de datos puede dirigirse a una o más computadoras o redes de computadoras remotas. Si el archivo con los datos exportados va a transferirse manualmente, basta con especificar un solo destinatario. Pero si el proceso va automatizarse vía FTP, habrá que especificar un destinatario por cada punto de trabajo remoto. Los archivos para los clientes FTP deben comenzar por la identificacion del terminal de destino (el MachineID de la maquina que ejecutará el cliente FTP en el destino) seguido de un punto. El resto del nombre del archivo es arbitrario, pero se recomienda que la extension sea .TXT. Ejemplos de nombres de archivo validos son 1.TXT, 1.DATA.TXT o 1.EXPORTACION.TXT. Los archivos no deben incluir espacios en blanco, ya que el cliente FTP los interpretará como un separador de la lista de argumentos de los comandos y, por supuesto, no funcionará correctamente. Es importante que si se va a trabajar con el cliente FTP, la ruta de acceso a los datos de ClearLight tampoco contenga espacios (es decir, la carpeta de datos no puede estar en "Mis Documentos", a menos que se especifique la via de acceso como MISDOC~1, utilizando el nombre corto). La lista de archivos de destino de las exportaciones se coloca bajo la clave HKCU\Software\VB And VBA Program Settings\ClearLight\Suscriptores, y está formada por una lista de valores cuyos nombres son irrelevantes, pero su contenido debe ser la via de acceso completa a cada uno de los archivos a generar. En nuestro entrono de prueba tenemos: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ClearLight\Suscriptores] "T1"="C:\\Misdoc~1\\DatosCL\\Mansion\\1.txt" "T2"="C:\\MisDoc~1\\DatosCL\\Mansion\\2.txt" De manera que los archivos de exportacion serán 1.txt y 2.txt, ambos ubicados en C:\Mis Documentos\DatosCL\Mansion. 4.2.- Activar los mecanismos de exportacion: Los datos descriptivos de los productos y servicios y archivos de programa se exportan automáticamente si existen suscriptores. Los miembros de las clases clsAjuste (Ajustes de inventario), clsTransferencia (Transferencias de mercancía entre almacenes), clsFacturasPOS (Facturas de punto de ventas), clsReciboMercancia (facturas de compra) y clsOrdenesCompra (órdenes de compra) exponen el metodo Exportar, pero no se activa de manera automatica (dado que no todos los usuarios querrán exportar todas las operaciones). Una manera de activar la exportacion de un tipo dado de documento puede ser mediante un script. Por ejemplo, para exportar un ajuste de inventario, puede escribirse lo siguiente en postAjuste.vbs: Public Sub Main() OwnerObject.Exportar End Sub para los otros documentos, basta con incluir el mismo codigo en los archivos postCompra.vbs (clsReciboMercancia, Facturas de Compra), postTransferencia.vbs (clsTransferencia, transferencias entre almacenes), postOrdenCompra.vbs (clsOrdenesCompra, ordenes de compra). Las facturas de punto de ventas son especiales, en el sentido de que no usan un script de post proceso. Cuando el proceso de una factura de punto de ventas ha sido completado, se ejecuta la funcion PostFactura en el script posExt.vbs, que recibe como argumento una referencia a la factura recien procesada. Un ejemplo de implementacion podria ser este: ' Archivo: posExt.vbs Public Sub PostFactura(laFactura) laFactura.Exportar End Sub Para exportar las aperturas de las sesiones (imprescindible si se quiere trabajar consistentemente con las facturas de punto de ventas), se debe insertar este codigo en posExt.vbs: Private Function GetSetting(key, subKey, value, defval) Dim s s = "HKCU\Software\VB And VBA Program Settings\" & key & "\" & subKey & "\" & Value On Error Resume Next s = CreateObject("WScript.Shell").RegRead(s) If Err.Number Then msgBox Err.Description, vbCritical, "Error en script de usuario" s = "" Err.Clear End If If IsEmpty(s) Then s = "" If s = "" Then s = defval GetSetting = s End Function Public Sub SesionCreada(nMaquina, sUsuario, nSesion) Dim s, sOut For each s In Suscriptores With OutDevice .DeviceName = CStr(s) sOut = "SSN" & chr(9) & Format(Now, "yyyy-mm-dd hh:nn:ss") & chr(9) & _ nMaquina & chr(9) & sUsuario & chr(9) & nSesion & chr(9) & _ GetSetting("ClearLight", "General", "AlmacenPOS", "") .Send s & vbCrLf .Cerrar End With Next End Sub Finalmente (por ahora), la exportación de los cierres de sesion se realiza mediante el archivo postCierreX.vbs, insertando el siguiente codigo: Public Sub Main() Dim s, sOut For Each s In Suscriptores With OutDevice .DeviceName = "C:\Mis Documentos\DatosCL\trnfile.log" sOut = "CIERREX" & chr(9) & Factoria.Format(Now, "yyyy-mm-dd hh:nn:ss") & chr(9) & _ OwnerObject.usrID & chr(9) & OwnerObject.SessionID .Send s & vbCrLf .Cerrar End With Next End Sub TransLoader está en pleno proceso de desarrollo. La publicación de este articulo es solo una parte de ese proceso (hay que poner en funcionamiento lo que tenemos hasta ahora, y escribirlo nos ayuda a formalizar el procedimiento). En la medida en que vayamos desarrollando nueva funcionalidad, actualizaremos este documento. 5.- Recursos de extensibilidad: No siempre los datos que se quieren exportar son los mismo. O bien se desea realizar con ellos un proceso diferente de la simple duplicación. Por ejemplo, la casa matriz puede querer emitir una nota de entrega que sea recibida como un ajuste de entrada, o incluso como una compra en la sucursal, o bien facturar a otros clientes que tienen el sistema, y que desean recibir la factura de compra en formato electrónico. En estos casos, los mecanismos de importación contenidos en Transloader no son suficientes. Para ello hará falta desarrollar un módulo de extensión. Los archivos de exportación contienen líneas compuestas por elementos de datos en formato de texto ASCII separados por tabuladores (VT, ASCII=9). Las fechas se almacenan en formato aaaa-mm-dd hh:nn:ss. Los numeros emplean el punto como separador decimal y no usan separador de miles. Los valores logicos (verdadero o falso) se exportan como numeros, donde el cero equivale a Falso y cualquier valor diferente de cero equivale a verdadero. El primer campo de cada fila indica el tipo de registro. Lo siguiente es la rutina de lectura y proceso de los archivos de entrada (CProcesadorArchivo.cls): Public Sub LoadDataFile(sFileName As String) Dim f As Integer, sLinea As String, v As Variant Dim ProcesadorLinea As IProcesadorLinea f = FreeFile Set ProcesadorLinea = New CVoidProcessor Open sFileName For Input As #f Do While Not EOF(f) Line Input #f, sLinea v = Split(sLinea, vbTab) v(0) = UCase(v(0)) If Not ProcesadorLinea.ProcesarLinea(v) Then Select Case v(0) Case "SSN" ' apertura de sesion Set ProcesadorLinea = New CProcesadorNuevaSesion Case "FPOS" ' facturas de punto de ventas Set ProcesadorLinea = New CProcesadorVentaPOS Case "CIEX" ' Cierre de sesion Set ProcesadorLinea = New CProcesadorCierreX Case "ITV" ' productos Set ProcesadorLinea = New CProcesadorITV Case "ITI" ' articulos de inventario Set ProcesadorLinea = New CProcesadorITI Case "AJU" ' ajustes de inventario Set ProcesadorLinea = New CProcesadorAJUSTE Case "TRANSF" ' transferencias Set ProcesadorLinea = New CProcesadorTRANSFERENCIA Case "OC" ' ordenes de compra Set ProcesadorLinea = New CProcesadorOrdenC Case "RCM" ' facturas de compra Set ProcesadorLinea = New cProcesadorRCM Case Else ' El siguiente mecanismo permite "agregar" procesadores de linea "ad hoc" para ' extensiones a medida del cliente. ' Es necesario que el proyecto que contiene las DLL de extension se llame ' "ProcesadoresLinea", y que referencie la "Interfaz para procesadorLinea de ' TransLoader" (ProcesadorLinea.DLL). Ese proyecto debe exponer una clase con ' el mismo nombre del "Tipo de Comando" definido en la exportacion. ' Esa clase debe implementar IProcesadorLinea (definida en la DLL) On Error Resume Next Set ProcesadorLinea = CreateObject("ProcesadoresLinea." & v(0)) If Err.Number <> 0 Then Err.Clear Set ProcesadorLinea = Nothing Else Set ProcesadorLinea.Factoria = New CFactoria End If On Error GoTo 0 If ProcesadorLinea Is Nothing Then Set ProcesadorLinea = New CProcesadorLineaInvalida End Select On Error Resume Next ProcesadorLinea.ProcesarLinea v If Err.Number <> 0 Then Dim sErrDesc As String, nErrN As Long, sErrLocus As String sErrDesc = Err.Description: nErrN = Err.Number: sErrLocus = Err.Source & _ " en LoadDataFile::" & TypeName(ProcesadorLinea) Err.Clear Set ProcesadorLinea = New CProcesadorLineaInvalida ProcesadorLinea.ProcesarLinea _ Array("ERROR (" & nErrN & ")" & vbCrLf & _ sErrDesc & vbCrLf & _ sErrLocus) End If End If Loop ProcesadorLinea.ProcesarLinea Array("EOF") Close f End Sub Para crear un componente de extensión para Transloader, se debe proceder de la siguiente manera:
Transloader.exe, junto con su DLL, está disponible como un archivo de instalación (InstalarTL.exe). Pulse aquí para descargarlo.
ADVERTENCIA:
Transloader.exe es aun un producto en desarrollo. Lo hemos utilizado para satisfacer algunas necesidades puntuales, pero no podemos garantizar ni su corrección ni su adecuación para ningún fin particular. Su uso es a riesgo del operador. |
||||||||||||||||