lunes, noviembre 06, 2006

Módulo de Fidelización de Clientes en el SIGE

Permite realizar campañas de promoción donde los clientes acumulan puntos con sus compras, y los canjean por premios.Los puntos ganados pueden variar por producto o familia, y también por cliente.Soporta además el sorteo de premios, con emisión de cupones en función de los puntos acumulados.El modulo es full Web, tanto para la administración del sistema por parte de la empresa (configuración, análisis de datos, etc.), como para el acceso por los clientes.
Los clientes tienen acceso a sus cuentas por Internet, disponiendo de la siguiente información:
  • sus saldos
  • los puntos ganados
  • los premios ya canjeados
  • los premios a los que ya puede acceder con sus puntos
  • los próximos premios a los que podrá acceder, y cuantos puntos le faltan para lograrlo
  • Una calculadora que le permite saber cuantos puntos ganaría con una compra dada

Módulo para ventas por Internet en el SIGE

El pasado 1 de agosto Feli puso en funcionamiento el Web de ventas del SIGE para sus clientes. El sistema pone a disposición de los clientes, por Internet, funcionalidades tales como:

  • consulta de su estado de cuenta
  • consulta de su lista de precios
  • carrito de compras
  • solicitar entrega de mercadería, de los contratos activos que disponga el cliente

El sistema funciona en línea, permitiendo acceder en el momento a la disponibilidad en stock, mientras que los pedidos entran inmediatamente al ciclo de control de crédito, facturación y entrega del SIGE. El sistema esta generado en java, y permite distintas alternativas de arquitectura. Mientras Feli, para desligarse de la administración de la infraestructura, ha optado por hostear el Web en EasyMail (http://www.easymail.com.uy/) desde donde se accede a los datos por una VPN sobre Internet:





Sammel lo ha implantado en sus propios servidores siguiendo una arquitectura en capas:

miércoles, noviembre 01, 2006

Nuevo Procedimiento en Aduanas, Mesa Entrada Virtual

A partir del lunes 9 de Octubre de 2006 comenzó a regir en la Administración de Aduanas de Montevideo una nueva operativa para las operaciones de Importación, Exportación y Tránsito, resaltando el manejo de solicitud de canal mediante mensaje XML enviado por los Despachantes de Aduana al sistema LUCIA.

Otro punto importante es el escaneo de los documentos, comenzando en esta oportunidad por las Facturas utilizadas en cada operación, dichas imágenes son enviadas también a través de mensajería.

Como cambios generales podemos resaltar:

Cambia el Flujo grama de los tres regimenes: Importaciones, Exportaciones y Tránsitos.

Nueva Oficina para control documental: Mesa Reguladora (MRE), y el estado del DUA relacionado (DES).

Definición de criterios de selectividad para el tratamiento de los DUA's a posteriori que definirán nuevos canales para el posteriori:

  • Marrón - Primer oficina posteriori: Fiscalización
  • Celeste - Primer oficina posteriori: Análisis
  • Blanco - Primer oficina posteriori: Archivo

Segundos mensajes para importaciones y tránsitos: los segundos mensajes que antes estaban habilitados solo para las operaciones de exportación estarán, habilitados ahora también para importaciones y tránsitos para las modificaciones que antes se realizaban en mesa de entrada de: cabezal DUA, facturas y documentos asociados manuales (a excepción de CPAC/CROM).

Nueva mensajería:

  • las facturas de los DUAs escaneadas, su imagen en formato tiff es enviada a la DNA
  • asociación de la imagen de la factura con el DUA correspondiente
  • correlación/consolidación de DUAs
  • solicitud de aforo: canal y verificador

viernes, octubre 13, 2006

Diez años del SIGE

En este mes (Octubre 2006) se están cumpliendo 10 años de puesta en producción de una aplicación ERP (SIGE) hecha en GeneXus.

Desarrollando desde la trinchera

martes, septiembre 26, 2006

XVI Encuentro Internacional de Usuarios GeneXus - Seguridad en Aplicaciones GeneXus

Junto con Alexander Wolff, nos tocó exponer la metodología que utilizamos en Concepto para el estudio de los requerimientos de seguridad de una aplicación en el momento de su diseño.

Por tema de tiempo, tuvimos que recortar bastante lo que ibamos a presentar, pues nos resultó un poco dificil explicar lo que hacemos en una presentación de 45 minutos.

Por ejemplo, quedo afuera toda la explicación de como los usuarios tienen los roles deshabilitados en la base de datos y es la aplicación la que los habilita. Esto posibilita que si un usuario se conecta a la base con una herramienta externa no pueda ni siquiera ver las tablas.

Seguridad es uno de los temas mas relegados dentro de la comunidad GeneXus y creo que es bueno darle mas visibilidad para que todos los interesados podamos ir definiendo aplicaciones mas seguras.

La presentación de la charla puede bajarse aqui.

XVI Encuentro Internacional de Usuarios GeneXus - Charla sobre SummarizedBy Pattern

La segunda charla en la que Concepto participó en el XVI Encuentro Internacional de Usuarios GeneXus fue la que realizamos junto con Federico Dominioni (Federico el grande!!) de Genexus Consulting, explicando como se realizó el SummarizedBy y tratando de mostrar el proceso de generación de patterns en general.

Si bien tenemos una versión del pattern en GXOpen, aun falta bastante para dejarlo en estado usable. También falta la documentación, que es la etapa mas complicada de todas.

La presentación de la charla puede bajarse aqui.

XVI Encuentro Internacional de Usuarios GeneXus - Charla sobre Collaborative Projects

En el marco del XVI Encuentro Internacional de Usuarios GeneXus, junto con Marcos Crispino, contamos nuestra experiencia en el desarrollo del Proyecto Colaborativo del "SummarizedBy Pattern".

Fue una experiencia muy buena, donde junto con personas de tres paises diferentes, y utilizando algunas herramientas para el trabajo a distancia.

Se sugieren algunas ideas para los proximos proyectos colaborativos, como pueden ser:

  • Manejo de listas de tareas compartidas
  • Incorporacion de herramientas de Source Control.
  • Definición clara de roles entre los integrantes del grupo.
  • Definición clara de lo que cada participante quiere obtener del proyecto.

La presentación de la charla puede ser bajada/consultada aqui.

jueves, septiembre 07, 2006

Herramienta para generar reportes

En el SIGE nos hemos encontrado en varios casos con que los usuarios nos piden consultas que son muy específicas, que le sirven solo a un usuario de un determinado cliente, y que además las va a ejecutar de forma esporádica.

Hasta el momento no teníamos una solución estándar para resolver estas consultas. Lo que veníamos haciendo en estos casos, en general era hacer una consulta SQL que ejecutábamos en la base de datos, y le pasábamos los resultados al usuario en una planilla Excel.

Esta metodología tiene varios problemas:
  • cada vez que el usuario necesita la información, debemos dedicarle tiempo
  • las consultas no quedan guardadas (o con suerte le quedan solo al que las hace en el momento), por lo que la próxima vez hay que programarla nuevamente
Estuvimos buscando alternativas y encontramos una herramienta que permite hacer justo lo que necesitamos:
  • es un producto web desarrollado en Java que se puede instalar bajo Tomcat
  • los reportes se definen como una consulta SQL, pero al usuario se le muestra el nombre del reporte
  • se le pueden pasar parámetros a las consulta SQL, asignándole el tipo de datos y un valor por defecto
  • los resultados se muestran con paginado para no consumir demasiados recursos, y hay una opción para imprimir que muestra todos los datos de la consulta
  • se pueden exportar los datos a Excel.
Además cuenta con seguridad, pudiendo definir usuarios, grupos, y permisos de acceso a las consultas.

La herramienta que estamos usando es JavaEye Reporting Tool.

domingo, septiembre 03, 2006

Se liberó el SummarizedBy Pattern

Se liberó la primer versión del SummarizedBy Pattern y quedo publicada en GXOpen.

Desarrollando desde la trinchera.: SummarizedBy Pattern - Publicacion en GXOpen

El SummarizedBy Pattern se desarrolló en el contexto de los Collaborative Proyects, y será presentado en el XVI Encuentro Internacional GeneXus.

Se puede ver más información con respecto a este Pattern en la página del Wiki.

martes, agosto 29, 2006

Visita del Director de Cómputos de la Aduana de Cuba

Entre los días 21 y 24 de Agosto visitó la Aduana de Uruguay el Ing. Carlos Anasagasti, director del centro de automatización y dirección de la información de la Aduana General de la República de Cuba.

Esta visita se produce como respuesta a la visita a La Habana que realizara el Ing. Gustavo Ulivi de nuestra empresa durante el mes de Abril próximo pasado.

Ambas visitas se produjeron con el objetivo de buscar elementos tecnológicos de común interés que puedan ser intercambiados con el fin de potenciar las acciones de Gestión de las Aduanas de Cuba y Uruguay.

Ejemplos de este posible acuerdo podrían ser:

- El módulo de control de inventarios de depósitos fiscales
- El proceso de cobro electrónico



De izquierda a derecha: A/P Alvaro Palmigiani, Ing. Gustavo Ulivi, Ing. Carlos Anasagasti, C/N (R) Luis Alberto Salvo.

martes, agosto 01, 2006

Comandos nuevos en GeneXus 9.0

Ayer hablando con Enrique, me comentaba de un par de comandos nuevos que están la versión 9.0 de GeneXus, pero que aparentemente no están documentados.

El primero es el comando iif, que permite en una sola línea evaluar una expresión booleana y devolver el resultado. La función recibe tres parámetros: el primero es la expresión booleana, el segundo es el valor que devuelve si la expresión es verdadera, y el tercero es el valor que devuelve si la expresión es falsa.

Por ejemplo:

&msg = iif(&valor1=&valor2, 'iguales', 'distintos')
msg(&msg)
O mejor aún:
msg( iif(&valor1=&valor2, 'iguales', 'distintos') )

Lo otro, es un cambio en la sintaxis del comando new() para los SDTs. Hasta ahora lo que hacía para incializar un elemento de una colección, era usar el nombre completo del tipo de datos.

Algo así como:

&item = new SDTColeccion.Items()

Pero, en la versión 9.0 funciona también:

&item = new()

La segunda sintaxis tiene varias ventajas:

  • no me tengo que acordar del tipo de datos del SDT
  • es un código más limpio y más prolijo
  • si cambio el nombre del SDT, debería seguir funcionando sin cambiar el código.

lunes, julio 24, 2006

Corrector ortográfico en el navegador

Hace unos días se liberó la versión Beta 1 de Firefox 2.0, que entre otras funcionalidades cuenta con un corrector ortográfico que se puede utilizar para cualquier campo de texto que se encuentre en una página web.



Para poder utilizarlo, primero es necesario instalar la versión beta, que se puede bajar de aquí.

Por defecto tiene instalado un diccionario en inglés. La instalación de un diccionario en español no es trivial, pero tampoco es muy difícil.

Lo primero que se debe hacer es bajar el diccionario adecuado de la página Dictionaries for Mozilla. Los archivos tienen extensión .xpi, y se pueden abrir con cualquier programa para abrir zips.

Para instalar el diccionario, se deben descomprimir los archivos con extensiones .aff y .dic dentro del directorio dictionaries debajo de la instalación de la beta 1 de Firefox 2.0.

Eso es todo. Para poder utilizar el nuevo diccionario, es necesario reiniciar Firefox.

Para utilizar el corrector ortográfico, se debe presionar el botón secundario del ratón en un campo de texto, y elegir la opción Spell check this field.

Por más información sobre como instalar un nuevo diccionario, se puede ver aquí.

viernes, julio 14, 2006

Snapshot Isolation, una alternativa al Isolation Level "NOLOCK" que usa GeneXus

En SQL Server 2005 hay un nuevo "Isolation level" que se llama "SNAPSHOT".
La finalidad de este nivel de loqueo es que el usuario siempre lea una vista consistente de los datos (no dirty read) y a la vez no bloquear otros lectores o escritores accediendo a los mismos datos. Similarmente los escritores no loquean a los lectores.

En SQL Server 2000 ya está el isolation level "READ COMMITED" que no hace lecturas sucias, la única contra que tiene es que antes de leer hace un shared lock (lockeando a un posible escritor como un mecanismo de evitar posibles dirty reads).
De cualquier forma las aplicaciones Genexus/SQLServer (al menos hasta GeneXus 8.0 que es la versión con la que trabajo actualmente) usan en algunas sentencias el hint "NOLOCK" lo que es equivalente al isolation level "READ UNCOMMITTED" (que es sinónimo de dirty reads). Pese a los "dirty reads", este isolation level tiene una ventaja y es que no lockea nada.
Ahora con este nuevo isolation level se podría lograr lo mejor de 2 mundos: no dirty reads y loqueo cero.

miércoles, junio 28, 2006

Separación usuario-esquema en SQL Server 2005

SQL Server al igual que los DBMS’s mas comunes en el mercado utiliza el concepto de esquema para definir un dominio de nombres únicos de objeto.
A modo de ejemplo, en una base SQL Server no es posible tener 2 tablas de nombre “cliente” dentro de un esquema de nombre “sueldos_desarrollo”. Pero si podría tener dentro de la misma base la tabla “cliente” en el esquema “sueldos_desarrollo” y la tabla “cliente” en el esquema “sueldos_testing”.

En SQL Server 2000 el usuario y el esquema están implícitamente relacionados. Al crear un usuario se crea automáticamente un esquema y un esquema no existe sin su usuario asociado.
Este diseño es simple pero tiene algunas desventajas:

- Limita la independencia que deberían tener los desarrolladores para trabajar libremente con los objetos de un esquema y los DBA’s para administrar la seguridad del usuario asociado
- El nombre del esquema puede resultar poco amigable y no refleja la realidad ya que este nombre coincide con el nombre del usuario asociado al esquema.


En SQL Server 2005 este diseño cambia, independizándose el usuario del esquema. Al crear un usuario no se crea un esquema asociado y los esquemas de una base de datos se crean sin asociarse a un usuario.
Este diseño tiene algunas ventajas sobre el anterior:

- Para eliminar un usuario ya no es necesario eliminar previamente todos los objetos del esquema asociado (pues simplemente no hay esquema asociado)
- Se puede renombrar un usuario sin tener que renombrar el esquema, lo cual podía implicar un cambio en las aplicaciones que accedían a tablas de dicho esquema
- Cuando se tenían varios usuarios en una base de datos, al tener cada uno su propio esquema se corría el riesgo de que un usuario creara tablas u otros objetos en su esquema para el caso en que lo deseable fuera concentrar todas las tablas en un único esquema
- El nombre de un esquema no tiene porque coincidir con el nombre de un usuario

Una necesidad que surge de este nuevo diseño es lo que en SQL Server 2005 se llama “esquema por defecto”. Esta propiedad del usuario se usa para determinar la tabla a la que el usuario quiere acceder para el caso en que se haga referencia a un objeto por su nombre sin incluir el esquema como parte del nombre. En el siguiente ejemplo se intenta explicar el funcionamiento de esta propiedad:

Supongamos que en una base se tiene el usuario “supervisor” que tiene como default_schema “sueldos_testing”. Al intentar acceder a la tabla “clientes”, SQL Server 2005 intenta primero ubicarla en el esquema “sueldos_testing”. Si la tabla no existe en ese esquema, SQL Server 2005 intenta como alternativa ubicar la tabla dentro del esquema “dbo”.
Si se estuviera en SQL Server 2000 primero se intentaría ubicar la tabla dentro del esquema “supervisor” (es decir el propio esquema del usuario “supervisor”) y sino se encontrara en este esquema se buscaría en el esquema “dbo”.

Un usuario siempre tiene un esquema por defecto que se indica en la cláusula DEFAULT_SCHEMA de la sentencia CREATE/ALTER USER. Sino se indica un DEFAULT_SCHEMA se asume “dbo” como esquema por defecto.

lunes, junio 12, 2006

Análisis de Riesgo en el módulo de cargas del GIA

Así como desde el año 2004 se manejan criterios de riesgo para las declaraciones aduaneras de importación, exportación y transito, desde el mes pasado se han empezado a cuantificar los riesgos de las declaraciones de carga marítimas, aéreas y terrestres en la aduana de Uruguay.

El modulo de riesgo permite a los usuarios aduaneros la definición dinámica de reglas por diferentes criterios y condiciones en un lenguaje sencillo y entendible por todos. También se manejan criterios de aleatoriedad y permite el manejo de diferentes valores de riesgo.

Por ejemplo, se pueden redactar reglas del tipo:

SI PRODUCTO='HARINA' Y VIA_TRANSPORTE='MARITIMA'
ENTONCES

VERIFICACION_FISICA 45%
VERIFICACION_DOCUMENTAL 30%
SIN_VERIFICACION 25%

La incorporación de esta metodología del manejo de riesgo para operaciones de cargas, trae mas agilidad al comercio por poder focalizar las verificaciones en las operaciones consideradas riesgosas y una correcta administración de los recursos.

El sistema esta desarrollado en Java/Oracle y se comunica con el sistema aduanero a través de Web Services.

viernes, junio 09, 2006

Auditoria de TABLAS en el SIGE

En la próxima versión del SIGE (Sistemas Integrados de Gestión Empresarial) se agrega la funcionalidad de la realización de auditorias de tablas.
El cliente podrá elegir cuales son las tablas que quiere controlar, y de las mismas quedará un registro de que usuarios realizan en ellas, inserciones, modificaciones y borrado de datos.
Se registrará también la fecha y hora de la operación así como también desde que terminal fue realizada la operación.
Esta forma de auditoria, agrega seguridad y trazabilidad a los cambios que se realizan en la base de datos por medio de la aplicación, permitiendo un mayor control sobre la información de la empresa.