ClearLight
Sistema integrado para la Administración

Descripcion Funcional
Preguntas y Respuestas
Recursos
Descargas
Vinculos
Precios
Distribuidores
Articulos Técnicos
Inicio
Claves de Activacion

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:

  • Creacion y cierre de sesiones de usuario
  • Facturas de punto de ventas
  • Creacion y actualizacion de articulos de inventario y productos y servicios
  • Ajustes de inventario
  • Transferencias de inventario entre almacenes
  • Ordenes de compra
  • Recepciones de mercancía

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:

  • Transloader.exe: el programa ejecutable
  • ProcesadorLinea.DLL: biblioteca de enlace dinámico que expone la interfaz IProcesadorLinea, que se requiere para definir nuevos objetos de extensión (y que es utilizada por los objetos intrinsecos de la aplicacion, de manera que no es opcional)

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:

  • PATH=: indica al programa con qué conjunto de datos va a trabajar. es el número que identifica al conjunto de datos deseado en el archivo Empresas.Catalogo. Si se especifica este parametro, se abrirá directamente la empresa, sin pasar por la ventana de selección.
  • FILE=: le indica al programa que cargue los registros de exportación contenidos en el archivo cuyo nombre se especifica en . Si el nombre del archivo (incluyendo la ruta de acceso completa) incluye espacios, debe encerrarse todo el argumento entre comillas (e.g.:
    "FILE=C:\MIs Documentos\DatosClear\1.00117.6.txt").
  • FTP: le indica al programa que se ejecute en modo residente monitoreando los cambios en un servidor FTP. Para el uso en modo cliente FTP es necesario definir en el registro los siguientes valores (todos ellos bajo la clave HKCU\Software\VB And VBA Program Settings\ClearLight\TransLoader):
    Intervalo: el intervalo, en segundos, a transcurrir entre cada transferencia y carga de datos.
    ftpServer: el nombre del servidor FTP
    ftpUser: el nombre del usuario en el servidor FTP
    ftpPassword: la clave del usuario del servidor FTP
  • Si no se especifica ninguno de estos argumentos, el programa le pedirá que seleccione en su disco el archivo que desea cargar.

La manera de pasar argumentos de linea de comandos mediante un acceso directo es la siguiente:

  • Pulse el botón derecho del mouse sobre el acceso directo.
  • Seleccione la opción "Propiedades" en el menú desplegable.
  • En el campo "Destino", despues del nombre del programa, agregue los argumentos deseados. Delimite con comillas doble (") aquellos argumentos que contengan espacios.
  • Pulse el botón Aceptar.

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:

  • Con VisualBasic 6, cree un nuevo proyecto de tipo ActiveX.DLL. El nombre de este proyecto debe ser "ProcesadoresLinea".
  • Agregue en este proyecto una referencia al componente llamado "Interfaz para procesadorLinea de TransLoader" (ProcesadorLinea.DLL)
  • Cree una clase cuyo nombre sea igual al código de operación del renglon primario de la transacción a importar (los codigos de operacion en el ejemplo anterior son SSN, FPOS, CIEX, etc).
  • Haga que la nueva clase implemente la interfaz IProcesadorLinea (definida en ProcesadorLinea.DLL)
  • Si necesita acceder a los objetos de la aplicación, use la Factoria que se pasa como argumento a la propiedad Factoria.
  • Implemente la lógica de importación necesaria en el metodo ProcesarLinea(v As Variant), tomando en cuenta que:
    1.- En v(0) viene el código de operación. Si v(0) no es uno de los códigos esperados, debe devolver False.
    2.- Si la operación tiene detalles, le serán pasados en llamadas sucesivas.
    3.- La función será llamada al menos una vez con un valor "ajeno" en v(0)

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.