Skip to main content

Perfiles de Importación

Descripción

En general desde los sistemas podemos exportar información estructurada (p.ej. en archivos de texto delimitados por comas o archivos de Excel), lo que es una buena alternativa cuando deseamos hacer una migración de datos y evitar transcribir información de un sistema a otro . También es deseable permitir alternativas a teclear la información usando las pantallas del sistema, por ejemplo, cuando la información se repite cada mes con pequeñas variantes. En este caso podemos guardar un archivo de origen, copiarlo y hacer las modificaciones con una herramienta adecuada (p.ej. Excel) y luego importar la información al Q3.

Cada origen de datos que usamos para cargar información tiene una estructura definida que raramente cambia, por lo que guardamos el perfil en el sistema para usarlo cada vez que tengamos información que cargar.  Para esto necesitamos configurar cada perfil en nuestro sistema para especificar cómo está estructurada la información, qué datos vienen, dónde los queremos  guardar y qué sucede si la información que queremos cargar ya existe en el sistema. Para esto sirven los perfiles de importación, para definir la estructura de un origen de datos a importar al Q3, por ejemplo un estado de cuenta en formato CSV o un excel de ventas emitidas descargado de la Agencia Virtual SAT.

Tenemos entonces los siguientes conceptos:

Origen de datos
El archivo de origen que queremos cargar al sistema.
Destino de datos
El tipo de documento que estamos cargando, p.ej. transacciones bancarias o compras.
Perfil de Importación
Estructura de un origen de datos y configuración de cómo cargarlo al destino de datos.
Implementación

El método que usamos tiene el siguiente orden:

  1. Extraer: cargar desde el archivo a una tabla intermedia
  2. Transformar: validar, limpiar y enriquecer los datos en la tabla intermedia
  3. Cargar: guardar los datos transformados de la tabla intermedia a la(s) tabla(s) de destino

Los perfiles de importación se consideran configuración del sistema, por lo que son accesibles en los Parámetros Generales.

Cada perfil de importación tiene:

  1. Un mapeo de columnas de origen y destino para la extracción
  2. Una tabla intermedia según el destino
  3. Una lista de acciones con orden, descripción y el comando SQL a ejecutar en la tabla de destino

Puede existir cualquier cantidad de perfiles de importación, por defecto el sistema incluye los necesarios para la carga inicial o migración de datos para implementaciones.

 La validación, transformación y carga se hace en el servidor, lo único que debe hacer la aplicación es cargar las líneas del archivo a la tabla intermedia.

Estos son los campos del perfil de importación y su uso:

Campo
Descripción
Descripción
El nombre del perfil.
Destino
Lo que estamos importando, internamente se guardan en la tabla clases bajo 'importar.destinos' y la columna código de esa tabla es el nombre de la tabla intermedia.
Tipo de archivo
El tipo de archivo puede ser CSV, XLS o XLSX.
Codificación
Para archivos tipo CSV ya que los archivos de texto tiene una codificación específica, usualmente son UTF-8.
Delimitador de columna

Para archivos tipo CSV, es el delimitador de columna utilizado en cada línea del archivo.

Delimitador de texto

Para archivos tipo CSV, dentro de cada columna, cuando el valor de la columna incluye el caracter usado como delimitador de columna se delimita la columna con este caracter, p.ej. si el delimitador es una coma (,) y una línea tiene los campos:

<col1>, Empresa, S.A., <col2>

debería aparecer en el archivo de texto como:

<col1>,"Empresa, S.A.",<col2>

para evitar errores de lectura. En este caso el delimitador de columna es una coma (,) y el delimitador de texto es una doble comilla (").

Columnas por fila

La cantidad total de columnas que tiene cada línea (o fila si es tipo excel), sirve para validar que todas las líneas vengan completas y sin datos adicionales. Aquí hay que poner la cantidad total de columnas que vienen aunque solo vayamos a importar algunas.

Fila encabezado

La línea/fila que trae los nombres de las columnas en el archivo a cargar, usualmente la número 1.

Primera fila datos

La línea/fila en la cual empiezan los datos, usualmente la número 2.

Número de hoja

Para archvios tipo XLS y XLSX, es el número de hoja a importar, la primera hoja del archivo es la 1.

Estos son los campos de las columnas del perfil de importación y su uso:

Campo
Descripción
Destino
El nombre de la columna de destino, este nombre es el comentario de la columna de la tabla intermedia en la base de datos.
Índice columna origen
La columna (comenzando con 1) de la columna de origen, esto lo usa el importador al cargar los datos del archivo a la tabla intermedia.
Columna de origen
El nombre de la columna de origen, esto sirve solamente como información adicional.

Estos son los campos de las acciones del perfil de importación y su uso:

Campo
Descripción
Orden
Para definir la secuencia de acciones, porque las acciones modifican los datos de la tabla intermedia incrementalmente.
Descripción
La descripción de la acción para referencia.
Comando

El comando SQL que modifica la tabla intermedia, limpiando, eliminando o enriqueciendo los datos antes de importarlos.

El sistema agrega automáticamente a cada comando una cláusula WHERE/AND lote='< código lote >'

La última acción debería ser un INSERT desde la tabla intermedia al destino e incluir el código del lote de operación

Destinos de Perfiles de Importación

Para crear un nuevo destino hay que hacer lo siguiente:

  1. Crear una tabla intermedia que incluya todas las columnas que importaremos a las tablas de destino, esta  nueva tabla debe heredar de la tabla importar.intermedia y debe estar ubicada en el esquema importar.
  2. Ponerle un comentario a todas las columnas de la tabla intermedia con un nombre descriptivo para el usuario, p.ej. si la columna se llama tipo_documento, el comentario sería Tipo Documento.
  3. Incluir el nuevo destino en la tabla clases y en el archivo sql/crear/clases.sql (buscar donde se insertan las clases con código 'importar.destinos'). La clase es 'importar.destinos', el código debe ser el nombre de la tabla (con esquema, p.ej. 'importar.transacciones'), y la descripción es como aparecerá en la lista de destinos en la interfaz gráfica, p.ej. 'Transacciones Bancarias'.
  4. Agregar un ítem al menú Importar en Operaciones y hacer que se active con el permiso de editar el destino, p.ej. si estamos importando Gastos, le pondríamos de etiqueta 'Gastos' al ítem y se debe activar con el permiso (7, Gastos).
Permisos

La premisa es: si tengo permiso para operar, tengo permiso para importar, p.ej. un usuario con el permiso de operar transacciones bancarias tendrá acceso a importar transacciones bancarias. Aparte, para poder editar perfiles de importación es necesario el permiso de parámetros generales. Por esto, todos los permisos necesarios ya existen, aquí está la lista:

id
Nombre
Tipo
11
Parámetros Generales
Administración
17
Transacciones Bancarias
Operación
Clases .NET
Clase
Carpetas
Descripción
PerfilImportacion
gen/importar, src/importar
Corresponde a importar.perfiles, incluye los métodos para leer los tipos de archivo a las tablas intermedias
ColumnaPerfilImportacion
gen/importar, src/importar Corresponde a importar.perfiles_columnas
AccionPerfilImportacion
gen/importar, src/importar Corresponde a importar.perfiles_acciones
Objetos DB
Tipo
Nombre
Descripción
Esquema
importar
Para agrupar todo lo de importar.
Tabla
importar.perfiles
Para guardar los perfiles.
Tabla
importar.perfiles_acciones
Tabla
importar.perfiles_columnas
Secuencia
importar.perfiles_id_seq
Secuencia
importar.perfiles_columnas_id_seq
Secuencia
importar.perfiles_acciones_id_seq
Tabla
importar.intermedia
Tiene las columnas necesarias para que cualquier tabla intermedia funcione correctamente.
Tabla
importar.transacciones
La tabla intermedia para perfiles con destino de transacciones bancarias.
Función
importar.codigo_lote
Genera el código del lote según la fecha, el usuario y el destino. Este código es importante para agrupar los datos en la tabla intermedia y luego en el destino.
Función

importar.crear_columnas

Al crear un nuevo perfil de importación, esta función jala los nombres de columna y sus comentarios para insertarlos en la tabla importar.perfiles_columnas.
Función importar.duplicar_perfil
Duplica el perfil recibido, incluyendo sus columnas y acciones.
Función importar.validar_y_cargar_lote
Valida que el lote y el perfil estén correctos, luego ejecuta las acciones del perfil en la tabla intermedia.
Errores DB
Código
Descripción
Q3005
Errores en importación
Pantallas
Form
Accesible desde
Descripción
Importar/PerfilesImportacion.vb Parámetros Generales
Para crear/editar/eliminar perfiles de importación
Importar/EditarPerfilImportacion.vb
Perfiles Importación
Importar/EditarPerfilAccion.vb
Editar Perfil Importación
Importar/ImportarPerfil.vb
Operación
Sirve para importar cualquier perfil de importación, se configura con PerfilImportacion.Destinos