*** Versión 1.01.00 del Manual ***
Las interfases desarrolladas son las siguientes:
In1 : Recepción de Mercadería por Remito
In2 : Devolución de control de recepción de los Remitos
In3 : Generación de Pedidos para facturación
In4 : Maestro de Artículos (Cristal-ERP)
in5 : Maestro de Proveedores (ERP-Cristal)
In6 : Maestro de Clientes (ERP-Cristal)
Las interfases utilizan un Servidor Mysql al que CRISTAL y el ERP deben acceder para intercambiar la información. A este servidor "intermedio" lo llamaremos "Servidor de Interfaz".
Requerimientos
Para implementar la interfaz se requieren los siguientes softwares instalados:
Cristal Desktop - versión 02.52.00 o superior. Módulo Almacén.
CristalApp - versión 01.06.00 o superior. Aplicación Android para realizar las lecturas de los artículos para la Recepción y Despacho de la mercadería.
InterfazKavigo - aplicación - versión 01.01.00: programa especial que correrá en segundo plano en un único equipo. Su función es la de conectar el ERP de la empresa con Cristal Desktop a través de una base de datos intermedia en Mysql. El ERP deberá entregar y leer la información según lo solicitado por las diferentes interfaces (IN1 a IN6) que se describen a continuación.
InterfazKavigo - aplicación
Para realizar el proceso de sincronización entre Servidor intermedio y CRISTAL se creó la aplicación InterfazKavigo que periódicamente (según programación) o manualmente sincroniza la información.
IMPORTANTE: debe tener instalado CRISTAL Desktop con la versión 02.52.00 como mínimo para que pueda funcionar la interfaz.
La misma puede ser descargada desde el siguiente Link:
Por defecto está configurada para que funcione en la carpeta “C:\InterfazKavigo”, en caso de querer modificar dicha ruta solo hay que modificar el archivo KAVIGO.ini, cambiando el parámetro “DataDicPath” por la ruta deseada. Cree el directorio sí no existe y descomprima el ZIP en dicha carpeta.
Se debe ejecutar el archivo “InterfazKavigo.exe”
Al ejecutarlo se solicitará siempre el login de un usuario y password de CRISTAL que sea de tipo Administrador.
Nota: Sí existe algún problema de conexión con CRISTAL se alertará del mismo y se abrirá el configurador para modificar los datos en caso de ser necesario. En caso de no estar configurados correctamente los datos de Servidor intermedio alertará que no se pudo conectar y deberá ingresar a la opción de “Configuración” (ver más abajo) para corregirlo.
Sí todo está correcto se agrega al TrayIcon del Windows (parte inferior derecha) el siguiente icono que en caso de hacer click derecho abre un menú de opciones.
Estadísticas: muestra las estadísticas de la última ejecución.
El botón “Ver Log” permitirá en caso de error ver lo que sucedió.
Configuración: permite ver y configurar los datos de conexión al Servidor de Interfaz y CRISTAL, así como también configurar los días e intervalos en que se ejecutará el proceso de sincronización.
Nota: tener en cuenta que debe estar tildado “Habilitar Proceso” para que se ejecute periódicamente según la programación establecida tanto en la sección de “Programación” con en la Conexión de Mysql. Por defecto está activada.
Forzar Ejecución: fuerza la ejecución de la sincronización en el momento.
Cerrar: cierra la aplicación.
Descripción del Proceso
1. Proceso de Recepción de Mercadería
Al hacer un pedido se ingresa la Orden de Compra en el ERP, esta viaja por Interfaz (In1) a CRISTAL, donde se genera automáticamente una Orden de Ingreso.
Al momento de recibir la mercadería en el depósito, un operario vía un dispositivo móvil ingresará el número de Orden de Ingreso y comienza a escanear los artículos que está recibiendo.
Al finalizar de escanear, o sea recibir todo, confirma la finalización del proceso de recepción y CRISTAL se encargará de informar si la lectura es correcta o no.
En este punto se reportarán las siguientes incidencias
Faltantes
Sobrantes
El usuario podrá confirmar la recepción "con diferencias" o reiniciar el proceso de recepción
Si se confirma "con diferencias" se generará la orden de ingreso parcial y comenzará el proceso, devolviendo además lo recibido al ERP para la generación de la factura (In2)
Una vez entrada la mercadería se asignará ubicaciones. Dentro del depósito se podrá ubicar mercadería, modificar las ubicaciones y ejecutar procesos a los artículos. Este proceso se realizará con las herramientas naturales de CRISTAL sin desarrollar cambios adicionales.
2. Proceso de Despacho de Pedidos
Los pedidos de los clientes pueden llegar por varios orígenes, audios, WhatsApp, mensajes, correos electrónicos, etc.
En esta etapa del proyecto se habilitará el acceso por la página WEB, por la API de integración o por la aplicación CRISTAL, todos los orígenes se centrarán por esos 3 accesos, o sea un cliente podrá solicitar él mismo su pedido por WEB o mandar un mail ó WhatsApp. En caso de usar mail o WhatsApp el personal que recibe el mensaje lo registra en CRISTAL (por WEB o por la aplicación, es igual) y comienza el proceso.
Es altamente recomendable que se conteste al cliente con el número de pedido, esto dará la posibilidad de que el cliente pueda monitorear el avance de su pedido.
Una vez creado el pedido y aprobado el mismo aparecerá como "Listo para Pickear" en el informe de pedidos pendientes en los dispositivos móviles. El usuario "acepta" iniciar el picking y comienza la lectura de Ubicación+Artículo, esto le permitirá ir confirmando el armado. Una vez finalizado se confirma que esté correcto.
En caso de alguna diferencia el Pedido no puede ser cerrado. Si existe algún cambio por ejemplo una cancelación/agregado por el cliente, simplemente se modifica el Pedido desde CRISTAL y le aparece automáticamente en el dispositivo móvil al operario para su corrección.
Una vez confirmado se emite el pedido final y se embala con el formulario de NP hacia afuera. Este pedido envía la novedad al ERP (In3) para su facturación
El resumen del proceso será:
Se listan las Notas de Pedido en proceso ordenadas por Prioridad + compromiso
Se elige número de Nota de Pedido
Se lee la ubicación o posición de donde se toma la mercadería.
Se lee bulto por bulto a enviar, se va comprometiendo articulo por articulo de esa ubicación.
Se pre-confirma la Nota de Pedido cuando se haya completado el pedido.
El cierre definitivo se hace al momento de despachar la mercadería. En ese momento no puede ser alterada.
3. Maestros
Las interfaces In4, In5 e In6 serán utilizadas para el intercambio de los archivos maestros principales, a saber: Artículos, Proveedores y Clientes.
Los Artículos son cargados en Cristal y enviados al ERP con su estructura básica.
Los Proveedores y Clientes son enviados por el ERP a Cristal.
Tablas necesarias en el Servidor intermedio
La interfaz de Cristal requiere de las tablas creadas en la Base de Datos del Servidor intermedio para poder interactuar con el ERP. Algunas deberán ser alimentadas por el ERP y otras por Cristal. A continuación describimos en detalle a cada una de ellas, En el ANEXO 1 se encuentran los scripts para generar las diferentes tablas.
En todas las tablas se incluye un campo llamado ‘procesado’, el mismo en caso de estar NULL significa que está pendiente de ser procesado (es decir pendiente de ser incorporado en la base de datos destino, que puede ser la del ERP o la de Cristal según corresponda). En caso de poseer una Fecha/hora significa que el mismo ya fue procesado/incorporado y no debería ser leído más por el proceso correspondiente.
A continuación el detalle y descripción de las tablas del Servidor intermedio.
Tabla “In1” - Detalle de Artículos por Órdenes de Compra
ERP -> Cristal
Tabla debe ser alimentada por el ERP, allí deberán cargarse el detalle de los artículos incluidos en las Órdenes de Compra emitidas por el mismo. Es un registro por cada artículo.
id - bigint - id autonumérico del registro
ordencompra - varchar(20) - Orden de Compra
remito - varchar(20) - nro de Remito
sku - varchar(25) - Código SKU - el mismo del maestro de artículos de Cristal
cantidad - decimal(13,3) - cantidad de unidades del articulo
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)
Tabla “In2” - Detalle de Artículos que no se pudieron cargar desde la Recepción de los Remitos
Cristal -> ERP
Esta tabla será alimentada por CRISTAL, para que el ERP pueda obtener las diferencias registradas desde la Recepción de los bultos. Es un registro por cada artículo.
id - bigint - id autonumérico del registro
ordencompra - varchar(20) - Orden de Compra
sku - varchar(25) - Código SKU - el mismo del maestro de artículos de Cristal
cantfaltante - decimal(13,3) - cantidad de unidades faltantes
cantsobrante - decimal(13,3) - cantidad de unidades sobrantes
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)
Tabla “In3” - Artículos confirmados por cada Nota de Pedido
Cristal -> ERP
Esta tabla será alimentada por CRISTAL, para que el ERP pueda obtener el detalle de artículos confirmados para su despacho y facturación. Es un registro por cada artículo, que puede agruparse por el dato “Nro Nota pedido”.
id - bigint - id autonumérico del registro
notapedido (bigint 12) - Nro de Nota de Pedido
idcliente - int 6 - ID del cliente destino
sku - varchar(25) - Código SKU
cantidad - decimal(13,3) - cantidad de unidades
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)
Tabla “In4” - Maestro de Artículos cargados en Cristal
Cristal -> ERP
Tabla alimentada por CRISTAL, aquí se dan de alta, se editan o se dan de baja los artículos para que puedan ser informados al ERP
id - bigint - id automático
sku - varchar(25) - Código SKU
descripcion - varchar(60) - Descripción del artículo
obs - text - observaciones del artículo
um - varchar(25) - unidad de medida - abreviatura de acuerdo a lo cargado en Unidades de Medida de Cristal (Ej UN = unidad, KG = Kilos, LT - litros, etc)
mt2 decimal 8,3 - Superficie ocupada en mt2 - opcional
mt3 decimal 8,3 - Volumen ocupado en mt3 - opcional
kilos - decimal 10,3 - Peso en kilos por unidad - opcional
baja - tinyint - marca de dado de baja (0=activo, 1=dado de baja)
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado) .
Tabla “In5” - Maestro de Proveedores
ERP -> Cristal
Tabla alimentada por el ERP, aquí deberían informarse todos los cambios que se realicen en el Maestro de Proveedores del ERP: es decir cuando se dan de alta, se editan o se dan de baja. Cristal actualizará esos datos desde aquí.
* id - bigint - id automático
* idprov bigint - Id Proveedor
* razonsocial - varchar(40) - Razón Social
alias - varchar(20) - Aliais (Razón Social Abreviada)
* tipo_cont - int - código de tipo de contribuyente. Puede venir 1=Responsable Inscripto, 4=Exento, 5=Consumidor Final, 6=Exento Internacional, 7 = Responsable Monotributo, 8 = No Categorizados
* cuit varchar 13 con guiones (ej: 99-99999999-9)
* domicilio - varchar(60) - domicilio
* codpostal - varchar(10) - código postal
* nombrelocalidad - varchar(30) - nombre de la localidad (por si no tenemos el cod postal)
telefono - varchar(40) - telefono
email - varchar(100) - direccion de mail
contacto - varchar(40) - Nombre del contacto principal
*baja - tinyint - marca de dado de baja (0=activo, 1=dado de baja)
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)
Los que tiene (*) son obligatorios
Tabla “In6” - Maestro de Clientes/Destinatarios
ERP -> Cristal
Tabla alimentada por el ERP, aquí deberían informarse todos los cambios que se realicen en el maestro de Clientes del ERP: es decir cuando se dan de alta, se editan o se dan de baja. Cristal actualizará esos datos desde aquí.
* id - bigint - id automático
* idcliente bigint - Id Cliente
* razonsocial - varchar(40) - Razón Social
alias - varchar(20) - Aliais (Razón Social Abreviada)
* tipo_cont - int - código de tipo de contribuyente. Puede venir 1=Responsable Inscripto, 4=Exento, 5=Consumidor Final, 6=Exento Internacional, 7 = Responsable Monotributo, 8 = No Categorizados
* cuit varchar 13 con guiones (ej: 99-99999999-9)
* domicilio - varchar(60) - domicilio
* codpostal - varchar(10) - código postal
* nombrelocalidad - varchar(30) - nombre de la localidad (por si no tenemos el cod postal)
telefono - varchar(40) - telefono
email - varchar(100) - direccion de mail
contacto - varchar(40) - Nombre del contacto principal
*baja - tinyint - marca de dado de baja (0=activo, 1=dado de baja)
procesado - datetime - Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)
Los que tiene (*) son obligatorios
ANEXO 1
Sentencias Mysql para crear tablas en el Servidor intermedio
En los scripts a continuación primero se crea una DB con el nombre “db_interfaz” y luego se trabaja sobre ella. En caso de querer cambiar el nombre de la base de datos se debe reemplazar el texto “db_interfaz” en todos los scripts por lo que se necesite.
CREATE DATABASE `db_interfaz`;
USE `db_interfaz`;
/*IN1*/
CREATE TABLE `db_interfaz`.`in1` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Id',
`ordencompra` VARCHAR(20) COMMENT 'Orden de Compra',
`remito` BIGINT COMMENT 'nro de Remito',
`sku` VARCHAR(25) COMMENT 'codigo SKU',
`cantidad` DECIMAL(13,3) COMMENT 'cantidad de unidades',
`procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/har = procesado)',
PRIMARY KEY (`id`), INDEX `ordensku` (`ordencompra`, `sku`) ) ENGINE=INNODB;
/*IN2*/
CREATE TABLE `db_interfaz`.`in2` (
`id` BIGINT(12) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id automático', `ordencompra` VARCHAR(20) COMMENT 'Orden de Compra',
`sku` VARCHAR(25) COMMENT 'Código SKU (viene de sk166.sku166)',
`cantfaltante` DECIMAL(13,3) COMMENT 'cantidad de unidades faltantes',
`cantsobrante` DECIMAL(13,3) COMMENT 'cantidad de unidades sobrantes',
`procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)',
PRIMARY KEY (`id`), INDEX `ordensku` (`ordencompra`, `sku`) ) ENGINE=INNODB;
/*IN3*/
CREATE TABLE `db_interfaz`.`in3` (
`id` BIGINT(12) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id automático', `notapedido` BIGINT(12) COMMENT 'Nro de Nota de Pedido',
`idcliente` INT(6) COMMENT 'D del cliente (usar cli348)',
`sku` VARCHAR(25) COMMENT 'Código SKU (viene de sk166.sku166)',
`cantidad` DECIMAL(13,3) COMMENT 'cantidad de unidades',
`procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)',
PRIMARY KEY (`id`) ) ENGINE=INNODB;
/*IN4*/
CREATE TABLE `db_interfaz`.`in4` (
`id` BIGINT(12) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id automático', `sku` VARCHAR(25) COMMENT 'Código SKU (sk166.sku166)',
`descripcion` VARCHAR(60) COMMENT 'Descripción del artículo (des166)',
`obs` TEXT COMMENT 'observaciones del artículo (obs166)',
`um` VARCHAR(25) COMMENT 'unidad de medida - abreviatura de la sk169.abr169 según uni166',
`mt2` DECIMAL(8,3) COMMENT 'Superficie ocupada en mt2 (mt2166)',
`mt3` DECIMAL(8,3) COMMENT 'Superficie ocupada en mt3 (mt3166)',
`kilos` DECIMAL(10,3) COMMENT 'Peso en kilos por unidad (kgr166)',
`baja` TINYINT(1) DEFAULT 0 COMMENT 'marca de dado de baja (0=activo, 1=dado de baja)', `procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/hora = procesado',
PRIMARY KEY (`id`) ) ENGINE=INNODB;
/*IN5*/
CREATE TABLE `db_interfaz`.`in5` (
`id` BIGINT(12) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id automático', `idprov` BIGINT(12) NOT NULL COMMENT 'Id Proveedor',
`razonsocial` VARCHAR(40) NOT NULL COMMENT 'Razón Social',
`alias` VARCHAR(20) COMMENT 'Alias (Razón Social Abreviada)',
`tipo_cont` INT NOT NULL COMMENT 'código de tipo de contribuyente. Puede venir 1=Responsable Inscripto, 4=Exento, 5=Consumidor Final, 6=Exento Internacional, 7 = Responsable Monotributo, 8 = No Categorizados',
`cuit` VARCHAR(13) NOT NULL COMMENT 'con guiones (ej: 99-99999999-9)',
`domicilio` VARCHAR(60) NOT NULL COMMENT 'domicilio',
`codpostal` VARCHAR(10) NOT NULL COMMENT 'código postal',
`nombrelocalidad` VARCHAR(30) NOT NULL COMMENT 'nombre de la localidad (por si no tenemos el cod postal)',
`telefono` VARCHAR(40) COMMENT 'telefono',
`email` VARCHAR(100) COMMENT 'direccion de mail',
`contacto` VARCHAR(40) COMMENT 'Nombre del contacto principal',
`baja` TINYINT(1) DEFAULT 0 COMMENT 'marca de dado de baja (0=activo, 1=dado de baja)', `procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)',
PRIMARY KEY (`id`) ) ENGINE=INNODB;
/*IN6*/
CREATE TABLE `db_interfaz`.`in6` (
`id` BIGINT(12) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id automático', `idcliente` BIGINT NOT NULL COMMENT 'Id Cliente',
`razonsocial` VARCHAR(40) NOT NULL COMMENT 'Razón Social',
`alias` VARCHAR(20) COMMENT 'Alias (Razón Social Abreviada)',
`tipo_cont` INT NOT NULL COMMENT 'código de tipo de contribuyente. Puede venir 1=Responsable Inscripto, 4=Exento, 5=Consumidor Final, 6=Exento Internacional, 7 = Responsable Monotributo, 8 = No Categorizados',
`cuit` VARCHAR(13) NOT NULL COMMENT 'cuit con guiones (ej: 99-99999999-9)', `domicilio` VARCHAR(60) NOT NULL COMMENT 'domicilio',
`codpostal` VARCHAR(10) NOT NULL COMMENT 'código postal',
`nombrelocalidad` VARCHAR(30) NOT NULL COMMENT 'nombre de la localidad (por si no tenemos el cod postal)',
`telefono` VARCHAR(40) COMMENT 'telefono',
`email` VARCHAR(100) COMMENT 'direccion de mail',
`contacto` VARCHAR(40) COMMENT 'Nombre del contacto principal',
`baja` TINYINT(1) DEFAULT 0 COMMENT 'marca de dado de baja (0=activo, 1=dado de baja)', `procesado` DATETIME COMMENT 'Marca de Procesado (NULL = sin procesar / fecha/hora = procesado)',
PRIMARY KEY (`id`) ) ENGINE=INNODB;