Generacion de txt para importar a Contpaq i(explicacion)
Publicado: Mié Nov 10, 2010 3:24 pm
Tarde pero seguro…
Hace dias comente que estaba haciendo una dll para crear la poliza de contaq i en formato txt, para que pudiera ser leida e importada por dicho sistema.
Tuve problemas generando la DLL (de Windows), por eso tratare de explicar lo mejor que pueda sobre que hay que hacer para generar el txt con un formato valido.
Lo que hice fue generar una poliza ya existente desde el sistema de contpaq, y de ahí, aplicar un poco de ingeniería inversa para “descifrar” el formato, después lei en un comentario de aquí del foro sobre un archivo “de Esquema” que usa el contpaq i para generar y leer las polizas, dicho archivo lo pueden encontrar en la siguiente ruta de su PC (si tienen instalado el contpaq i)
En dicho archivo se encuentra definido el “formato” para generar el txt, los campos, longitudes, etc.
Vamos a lo bueno…..
Primeramente cabe señalar que la poliza “basica” consta de dos partes fundamentales, el encabezado, que es donde irian los datos de la poliza, tales como fecha, numero, concepto, etc. Y el detalle, que es donde van las cuentas contables a afectar, cantidades, cargos, abonos, etc.
El formato del encabezado seria el siguiente (tomando como base el archivo de esquema mencionado antes):

Descripcion de campos:
Poliza: Siempre debe de ser una “P”, con esto indicamos que es el encabezado de la poliza, a 2 posiciones alineado a la izquierda.
Fecha: formato yyyyMMdd
TipoPol: se pondria 1 para ingreso, 2 para egreso, 3 para diario y 4 para orden, a 4 pociciones alineado a la derecha.
Folio: es el numero de poliza con el que se va a registrar en el sistema, solo acepta datos numericos enteros, 9 posiciones alineado a la derecha.
Clase: ¿???(Desconozco a que se refiere, las pólizas que genere siempre pone un 1)
idDiario: a que No de Diario pertenece la póliza, si no pertenece a ninguno poner un cero “0”, 10 posiciones alineado a la izquierda
Concepto: Concepto de la póliza, por ejem “Ventas del dia”, a 100 posiciones alineado a la izquierda.
SisOrig: Sistema de origen de la poliza, solo se que se pone un once “11” para indicar que viene del sistema Contpaq i
Impresa: es una bandera para indicar si la poliza ya fue impresa o no, se pone un 1 para indicarla como impresa y 0 para indicarla como no impresa.
Ajuste: es una bandera para indicar si es poliza de ajuste, 1 para Si, 0 para No.
Todos los campos van separados por un espacio (al final del ultimo campo tambien se pone un espacio), la longitud del campo siempre debe ser la indicada, en caso de no completar la longitud requerida deberá rellenarse con espacios.
Por ejemplo si un campo es de longitud 3 y e valor de ese campo es un 1 alineado a la derecha se deberá expresar de la siguiente manera:
El formato para el detalle de los movimientos seria el siguiente:

Descripcion de los campos:
Movtopoliza.1 : Siempre debe ser la letra M, alienada a la izquierda a 2 pociciones.
idCuenta: es el numero de cuenta contable que se afectara, 30 pociciones alineaada a la izquierda. Se debe indicar el numero de cuenta sin formato, en el contpaq el formato mas comun para las cuentas es XXX-XXXX, para indicarlo en el txt se debera indicar como XXXXXXX (sin los guiones).
Referencia: el Numero de referencia del movimiento, 10 pociciones alineado a la izquierda.
TipoMovto: tipo de movimiento (cargo/abono), se indica 1 para abono, 0 para cargo.
Importe: Importe del movimiento a 20 pociciones alineado a la izquierda y con al menos un decimal y como maximo 2. por ejemplo: 6.50 se indica como 6.5, 6 como 6.0 y 6.53 como 6.53
idDiario: a que No de Diario pertenece la póliza, si no pertenece a ninguno poner un cero “0”, 10 posiciones alineado a la izquierda
ImporteME: desconozco a que se refiere, las polizas que yo genere siempre ponen 0.0, a 20 posiciones alineado a la izquierda. Actualizacion: ImporteME: se refiere al importe en moneda extranjera. -> Gracias a eduardoperez por el dato
Concepto: Concepto del movimiento a 100 posiciones alineado a la izquierda
idSegNeg: si el movimiento pertenece a un segmento de negocio se pone el id de ese segmento, si no se deja en blanco.
Todos los campos van separados por un espacio (al final del ultimo campo tambien se pone un espacio), la longitud del campo siempre debe ser la indicada, en caso de no completar la longitud requerida deberá rellenarse con espacios. Cada movimiento va en un renglón diferente.
Si seguimos este formato podremos generar un txt valido para ser leido por contpaq i.
Ejemplo de una poliza:
Supongamos que tenemos los siguientes datos para genera una poliza
El encabezado quedaría de la siguiente manera (reemplacé los espacios en blanco por asteriscos *, para que se noten)
Y el detalle de la siguiente manera:
Nota: Todo va en el mismo txt, aquí lo separe para efectos del ejemplo.
al final, tendremos una poliza valida y se podra importar (de manera manual) a contpaq i

Adjunto poliza en txt con este ejemplo, cualquier comentario, duda, acalaracion, correccion, etc son bienvenidos.
Saludos!!
Nota: En este post esta la DLL en .NET con las funciones para crear los encabezados y los movimientos de la poliza
http://www.validacfd.com/phpbb3/viewtop ... f=17&t=215
Hace dias comente que estaba haciendo una dll para crear la poliza de contaq i en formato txt, para que pudiera ser leida e importada por dicho sistema.
Tuve problemas generando la DLL (de Windows), por eso tratare de explicar lo mejor que pueda sobre que hay que hacer para generar el txt con un formato valido.
Lo que hice fue generar una poliza ya existente desde el sistema de contpaq, y de ahí, aplicar un poco de ingeniería inversa para “descifrar” el formato, después lei en un comentario de aquí del foro sobre un archivo “de Esquema” que usa el contpaq i para generar y leer las polizas, dicho archivo lo pueden encontrar en la siguiente ruta de su PC (si tienen instalado el contpaq i)
Código: Seleccionar todo
C:\Compac\Empresas\Esquemas\Contpaq\CT_EST_Poliza_NG.xls
Vamos a lo bueno…..
Primeramente cabe señalar que la poliza “basica” consta de dos partes fundamentales, el encabezado, que es donde irian los datos de la poliza, tales como fecha, numero, concepto, etc. Y el detalle, que es donde van las cuentas contables a afectar, cantidades, cargos, abonos, etc.
El formato del encabezado seria el siguiente (tomando como base el archivo de esquema mencionado antes):

Descripcion de campos:
Poliza: Siempre debe de ser una “P”, con esto indicamos que es el encabezado de la poliza, a 2 posiciones alineado a la izquierda.
Fecha: formato yyyyMMdd
TipoPol: se pondria 1 para ingreso, 2 para egreso, 3 para diario y 4 para orden, a 4 pociciones alineado a la derecha.
Folio: es el numero de poliza con el que se va a registrar en el sistema, solo acepta datos numericos enteros, 9 posiciones alineado a la derecha.
Clase: ¿???(Desconozco a que se refiere, las pólizas que genere siempre pone un 1)
idDiario: a que No de Diario pertenece la póliza, si no pertenece a ninguno poner un cero “0”, 10 posiciones alineado a la izquierda
Concepto: Concepto de la póliza, por ejem “Ventas del dia”, a 100 posiciones alineado a la izquierda.
SisOrig: Sistema de origen de la poliza, solo se que se pone un once “11” para indicar que viene del sistema Contpaq i
Impresa: es una bandera para indicar si la poliza ya fue impresa o no, se pone un 1 para indicarla como impresa y 0 para indicarla como no impresa.
Ajuste: es una bandera para indicar si es poliza de ajuste, 1 para Si, 0 para No.
Todos los campos van separados por un espacio (al final del ultimo campo tambien se pone un espacio), la longitud del campo siempre debe ser la indicada, en caso de no completar la longitud requerida deberá rellenarse con espacios.
Por ejemplo si un campo es de longitud 3 y e valor de ese campo es un 1 alineado a la derecha se deberá expresar de la siguiente manera:
Código: Seleccionar todo
[“ 1” -(espacio-espacio-uno) – Para completar la longitud requerida.

Descripcion de los campos:
Movtopoliza.1 : Siempre debe ser la letra M, alienada a la izquierda a 2 pociciones.
idCuenta: es el numero de cuenta contable que se afectara, 30 pociciones alineaada a la izquierda. Se debe indicar el numero de cuenta sin formato, en el contpaq el formato mas comun para las cuentas es XXX-XXXX, para indicarlo en el txt se debera indicar como XXXXXXX (sin los guiones).
Referencia: el Numero de referencia del movimiento, 10 pociciones alineado a la izquierda.
TipoMovto: tipo de movimiento (cargo/abono), se indica 1 para abono, 0 para cargo.
Importe: Importe del movimiento a 20 pociciones alineado a la izquierda y con al menos un decimal y como maximo 2. por ejemplo: 6.50 se indica como 6.5, 6 como 6.0 y 6.53 como 6.53
idDiario: a que No de Diario pertenece la póliza, si no pertenece a ninguno poner un cero “0”, 10 posiciones alineado a la izquierda
ImporteME: desconozco a que se refiere, las polizas que yo genere siempre ponen 0.0, a 20 posiciones alineado a la izquierda. Actualizacion: ImporteME: se refiere al importe en moneda extranjera. -> Gracias a eduardoperez por el dato

Concepto: Concepto del movimiento a 100 posiciones alineado a la izquierda
idSegNeg: si el movimiento pertenece a un segmento de negocio se pone el id de ese segmento, si no se deja en blanco.
Todos los campos van separados por un espacio (al final del ultimo campo tambien se pone un espacio), la longitud del campo siempre debe ser la indicada, en caso de no completar la longitud requerida deberá rellenarse con espacios. Cada movimiento va en un renglón diferente.
Si seguimos este formato podremos generar un txt valido para ser leido por contpaq i.
Ejemplo de una poliza:
Supongamos que tenemos los siguientes datos para genera una poliza
Código: Seleccionar todo
Fecha; 4 de nov de 2010
Poliza de Ingreso No 2
No pertenece a diario
Clase 1
Concepto “ventas del dia”
Origen: Contpaq i
Impresa: No
Ajuste: No.
Por 5000 pesos + iva al 10% cargado a bancos
Cuenta de ventas: 400-0000
Cuenta de iva: 204-0000
Cuenta Bancos: 102-0000
Código: Seleccionar todo
P**20101104****1*********2*1*0**********ventas*del*dia***************************************************************************************11*0*0*
Código: Seleccionar todo
M**4000000***********************************1*5000.0***************0**********0.0******************ventas*del*dia********************************************************************************************
M**2040000***********************************1*500.0****************0**********0.0******************ventas*del*dia********************************************************************************************
M**1020000***********************************0*5500.0***************0**********0.0******************ventas*del*dia********************************************************************************************
al final, tendremos una poliza valida y se podra importar (de manera manual) a contpaq i


Adjunto poliza en txt con este ejemplo, cualquier comentario, duda, acalaracion, correccion, etc son bienvenidos.

Saludos!!
Nota: En este post esta la DLL en .NET con las funciones para crear los encabezados y los movimientos de la poliza

http://www.validacfd.com/phpbb3/viewtop ... f=17&t=215