Formato de los ficheros de Contabilización de datos de Facturación |
Scroll Anterior Inicio Siguiente Mas |
En este apartado, reservado para programadores con los necesarios conocimientos técnicos, se describe el formato de los ficheros XML requeridos en la opción Contabilización de datos de Facturación.
El formato de los ficheros XML, con datos reales de ejemplo, se puede obtener directamente ejecutando la opción Exportar de la propia pantalla de Contabilización. Tras ejecutarla, puede ver qué ficheros se generan, con qué nombres, qué campos contienen, etc. Puede visualizarlos haciendo doble clic sobre ellos, para que se abran con el navegador.
Algunos de estos ficheros serán opcionales, en función de las opciones que se habiliten en la pantalla de Contabilización.
En Noviembre de 2024 se ha modificado este formato, para añadir el campo DESCRIPCION_OPERACION_SII al fichero Tickets.xml.
Se requiere la versión 23 en el campo "Exportacion_version" del fichero ExportacionGesPro.xml
Estos cambios están marcados en amarillo en el texto.
|
Generar los ficheros XML ExportacionGesPro.xml
Si Vd. trabaja con Delphi como lenguaje de programación, puede obtener dichos ficheros fácilmente, ejecutando el método SaveToFile() del componente TClientDataset. Por ejemplo:
ClientDataset.SaveToFile('ExportacionGesPro.xml', dfXMLUTF8);
A continuación, listaremos los ficheros a generar, describiendo el comando SQL con el que generarlos a partir de los datos de OfiPro Facturación.
En el caso de otros programas de facturación distintos a OfiPro Facturación, deberá adaptar en el comando los nombres físicos de los campos de cada fichero, respetando el nombre que OfiPro Contabilidad espera recibir. Por ejemplo, en el comando
SELECT CODIGO FROM CLIENTES
si en su fichero de Clientes el campo CODIGO es CODE, deberá adaptarlo de la siguiente forma:
SELECT CODE AS CODIGO FROM CLIENTES
|
Este fichero, que siempre debe estar presente, consta de los siguientes campos:
|
Campos del fichero de Clientes, y comando SQL correspondiente:
SELECT PK_CLIENTE,CODIGO,EMPRESA, CIFNIF,IVA_REGIMEN, DIRECCION,LOCALIDAD,CODIGO_POSTAL,PROVINCIA,PAIS,TELEFONO1,EMAIL,URL,CUENTA_CONTABLE3,CUENTA_CONTABLE4,CUENTA_CONTABLE5,CONTRAPARTIDA_CONTABLE3,CONTRAPARTIDA_CONTABLE4,CONTRAPARTIDA_CONTABLE5, AVISO,IBAN FROM CLIENTES
|
Campos del fichero de Proveedores, y comando SQL correspondiente:
SELECT PK_Proveedor,CODIGO,EMPRESA,CIFNIF,IVA_REGIMEN,DIRECCION,LOCALIDAD,CODIGO_POSTAL,PROVINCIA,PAIS,TELEFONO1,EMAIL,URL,CUENTA_CONTABLE3,CUENTA_CONTABLE4,CUENTA_CONTABLE5,CONTRAPARTIDA_CONTABLE3,CONTRAPARTIDA_CONTABLE4,CONTRAPARTIDA_CONTABLE5,AVISO,IBAN FROM Proveedoresss |
Campos del fichero de Bancos, y comando SQL correspondiente:
SELECT PK_BANCO,CODIGO,NOMBRE,IBAN,CUENTA_CONTABLE3,CUENTA_CONTABLE4,CUENTA_CONTABLE5,CUENTA_COMISION3,CUENTA_COMISION4,CUENTA_COMISION5,CUENTA_ACREEDOR3,CUENTA_ACREEDOR4,CUENTA_ACREEDOR5 FROM BANCOS
|
Campos del fichero de Divisas, y comando SQL correspondiente:
SELECT PK_DIVISA, CODIGO, NOMBRE, DECIMALES, FRACCION_GENERO, UNIDAD_GENERO, COMENTARIO FROM DIVISAS
|
Campos del fichero de Facturas de clientes, y comando SQL correspondiente:
SELECT PK_FACTURA_VENTA,SERIE,CODIGO,PK_CLIENTE,FECHA,FECHA_OPERACION,IVA_DE_CAJA,IVA_REGIMEN, tipo_sujecion, causa_exencion, causa_nosujecion, PK_DIVISA,DIVISA_VALOR,BRUTO,DESCUENTO_FINANCIERO,GASTOS,PORTES,TIPO_IVA_PORTES,TIPO_RECARGO_PORTES,RETENCION,TOTAL,FACTURA_ORIGEN_SERIE,FACTURA_ORIGEN_CODIGO,FACTURA_ORIGEN_FECHA,DESCRIPCION_OPERACION_SII,CAUSA_RECTIFICACION_SII frOM FACTURAS_VENTAS WHERE FILTROFECHAS
|
Campos del fichero de líneas de Facturas de clientes, y comando SQL correspondiente, que varía según se haya indicado si se desglosan las facturas por artículo o no:
Sin desglose de facturas por artículo:
SELECT Facturas_Ventas_Lineas.Pk_Factura_Venta, ARTICULOS.ES_SUPLIDO, Facturas_Ventas_Lineas.Tipo_Iva, Facturas_Ventas_Lineas.Tipo_Recargo, Sum(Facturas_Ventas_Lineas.Importe) as ImporteTotalLinea FROM Facturas_Ventas_Lineas INNER JOIN SERIES ON (FACTURAS_VENTAS.SERIE = SERIES.CODIGO) INNER JOIN ARTICULOS ON (FACTURAS_ventas_LINEAS.PK_ARTICULO = ARTICULOS.PK_ARTICULO) WHERE FiltroFechas AND (FACTURAS_VENTAS_LINEAS.IMPORTE <> 0) GROUP BY Facturas_Ventas_Lineas.Pk_Factura_Venta, articulos.es_suplido, Facturas_Ventas_Lineas.Tipo_Iva, Facturas_Ventas_Lineas.Tipo_Recargo
Con desglose de facturas por artículo:
SELECT Facturas_Ventas_Lineas.Pk_Factura_Venta,Facturas_Ventas.Iva_Regimen, Max(Articulos.Nombre) AS ARTICULO_NOMBRE, Articulos.Cuenta_Contable3_Ventas as CuentaArticulo3, Articulos.Cuenta_Contable4_Ventas as CuentaArticulo4, Articulos.Cuenta_Contable5_Ventas as CuentaArticulo5, ARTICULOS.ES_SUPLIDO, Facturas_Ventas_Lineas.Tipo_Iva, Facturas_Ventas_Lineas.Tipo_Recargo, Sum(Facturas_Ventas_Lineas.Importe) as ImporteTotalLinea FROM Facturas_Ventas_Lineas INNER JOIN FACTURAS_VENTAS ON (Facturas_Ventas_Lineas.Pk_Factura_Venta = Facturas_Ventas.Pk_Factura_Venta) INNER JOIN ARTICULOS ON (Facturas_Ventas_Lineas.Pk_Articulo = Articulos.Pk_Articulo) INNER JOIN SERIES ON (FACTURAS_VENTAS.SERIE = SERIES.CODIGO) WHERE FiltroFechas AND (FACTURAS_VENTAS_LINEAS.IMPORTE <> 0) GROUP BY Facturas_Ventas_Lineas.Pk_Factura_Venta, Facturas_Ventas.Iva_Regimen, Facturas_Ventas_Lineas.Tipo_Iva, Facturas_Ventas_Lineas.Tipo_Recargo, Articulos.Cuenta_Contable3_Ventas, Articulos.Cuenta_Contable4_Ventas, Articulos.Cuenta_Contable5_Ventas
|
Campos del fichero de Tiques, y comando SQL correspondiente:
SELECT TICKETS.Pk_Ticket,Tickets.Serie,Tickets.Codigo,Tickets.Pk_Cliente,Tickets.Fecha, tickets.fecha_operacion, Tickets.Iva_De_Caja,Tickets.Iva_Regimen,Tickets.Pk_Divisa,Tickets.Divisa_Valor,Tickets.Bruto_Iva, Tickets.Total, tickets.ticket_origen_serie, tickets.ticket_origen_codigo, Tickets.ticket_origen_fecha, descripcion_operacion_sii, causa_rectificacion_sii FROM TICKETS WHERE FiltroFechas
|
Campos del fichero de líneas de Tiques, y comando SQL correspondiente
SELECT Tickets_Lineas.Pk_Ticket, Tickets_Lineas.Tipo_Iva, Tickets_Lineas.Tipo_Recargo, Sum(Tickets_Lineas.Importe) as ImporteTotalLinea FROM Tickets_Lineas INNER JOIN SERIES ON (TICKETS.SERIE = SERIES.CODIGO) WHERE FiltroFechas AND (TICKETS_LINEAS.IMPORTE <> 0) GROUP BY Tickets_Lineas.Pk_Ticket, Tickets.Iva_Regimen, Tickets_Lineas.Tipo_Iva, Tickets_Lineas.Tipo_Recargo
|
Campos del fichero de Facturas de proveedores, y comando SQL correspondiente:
SELECT PK_FACTURA_COMPRA,SERIE,CODIGO,PK_PROVEEDOR,FECHA,FECHA_OPERACION,FECHA_EXPEDICION,SU_FACTURA,IVA_DE_CAJA,IVA_REGIMEN,PK_DIVISA,DIVISA_VALOR,BRUTO,DESCUENTO_FINANCIERO,GASTOS,PORTES,TIPO_IVA_PORTES,TIPO_RECARGO_PORTES,RETENCION,TOTAL,FACTURA_ORIGEN_SERIE,FACTURA_ORIGEN_CODIGO,FACTURA_ORIGEN_FECHA,DESCRIPCION_OPERACION_SII,CAUSA_RECTIFICACION_SII FROM FACTURAS_COMPRAS WHERE FILTROFECHAS
|
Campos del fichero de líneas de Facturas de compras, y comando SQL correspondiente, que varía según se haya indicado si se desglosan las facturas por artículo o no:
Sin desglose de facturas por artículo:
SELECT Facturas_Compras_Lineas.Pk_Factura_Compra, ARTICULOS.ES_SUPLIDO, Facturas_Compras.Iva_Regimen,Facturas_Compras_Lineas.Tipo_Iva, Facturas_Compras_Lineas.Tipo_Recargo, Sum(Facturas_Compras_Lineas.Importe) as ImporteTotalLinea FROM Facturas_Compras_Lineas INNER JOIN Facturas_Compras ON (Facturas_Compras_Lineas.Pk_Factura_Compra = Facturas_Compras.Pk_Factura_Compra) INNER JOIN Articulos ON (Facturas_Compras_Lineas.Pk_Articulo = Articulos.Pk_Articulo) INNER JOIN SERIES ON (FACTURAS_COMPRAS.SERIE = SERIES.CODIGO) WHERE FiltroFechas AND (FACTURAS_COMPRAS_LINEAS.IMPORTE <> 0) GROUP BY Facturas_Compras_Lineas.Pk_Factura_Compra, articulos.es_suplido, Facturas_Compras.Iva_Regimen, Facturas_Compras_Lineas.Tipo_Iva, Facturas_Compras_Lineas.Tipo_Recargo
Con desglose de facturas por artículo:
SELECT Facturas_Compras_Lineas.Pk_Factura_Compra, Max(Articulos.Nombre) AS ARTICULO_NOMBRE, Articulos.Cuenta_Contable3_Compras as CuentaArticulo3, Articulos.Cuenta_Contable4_Compras as CuentaArticulo4, Articulos.Cuenta_Contable5_Compras as CuentaArticulo5, ARTICULOS.ES_SUPLIDO, Facturas_Compras_Lineas.Tipo_Iva, Facturas_Compras_Lineas.Tipo_Recargo, Sum(Facturas_Compras_Lineas.Importe) as ImporteTotalLinea FROM Facturas_Compras_Lineas INNER JOIN Articulos ON (Facturas_Compras_Lineas.Pk_Articulo = Articulos.Pk_Articulo) INNER JOIN SERIES ON (FACTURAS_COMPRAS.SERIE = SERIES.CODIGO) WHERE FiltroFechas AND (FACTURAS_COMPRAS_LINEAS.IMPORTE <> 0) GROUP BY Facturas_Compras_Lineas.Pk_Factura_Compra, Facturas_Compras_Lineas.Tipo_Iva, Facturas_Compras_Lineas.Tipo_Recargo, Articulos.Cuenta_Contable3_Compras, Articulos.Cuenta_Contable4_Compras, Articulos.Cuenta_Contable5_Compras
|
Campos del fichero de Cobros de Tiques, y comando SQL correspondiente:
SELECT Tickets_Cobros.Pk_Ticket_Cobro, Tickets_Cobros.Cobrado, Tickets.Serie, Tickets.Codigo, Tickets.Fecha, Tickets.Pk_Divisa, Tickets.Divisa_Valor, Tickets.Pk_Cliente, Formas_de_Cobro.Pk_Banco, Formas_de_Cobro.FACTURAE_FORMA_COBRO FROM TICKETS_COBROS INNER JOIN TICKETS ON (Tickets_Cobros.Pk_Ticket = Tickets.Pk_Ticket) INNER JOIN Formas_de_Cobro ON (Tickets_Cobros.Pk_Forma_Cobro = Formas_de_Cobro.Pk_Forma_Cobro) INNER JOIN SERIES ON (TICKETS.SERIE = SERIES.CODIGO) WHERE FiltroFechas
|
Campos del fichero de Remesas_Cobros, que incluye los cobros de vencimientos asignados a remesas, pero no los asignados a remesas del Cuaderno58 al cobro, ya que estos se contabilizan por separado, cada vencimiento en un asiento individual.
Comando SQL correspondiente:
SELECT Remesas.Fecha_Cobro, Remesas.Importe, Remesas.Pk_Banco, Remesas.Comision_Banco, Remesas.Serie, Remesas.Codigo, Cobros.Pk_Cobro, Cobros.Pk_Remesa, Cobros.Pk_Cliente, Cobros.Pk_Divisa, Cobros.Divisa_Valor, Cobros.Concepto, Cobros.Documento_Tipo, Cobros.Importe as Importe_Cobro FROM REMESAS INNER JOIN COBROS ON (Cobros.Pk_Remesa = Remesas.Pk_Remesa) INNER JOIN SERIES ON (Series.Codigo = Remesas.Serie) WHERE FiltroFechas
La expresión FiltroFechas se debe basar en el campo REMESAS.FECHA_COBRO.
|
Campos del fichero de Cobros, que incluye los cobros de vencimientos no asignados a remesas, o asignados a remesas del Cuaderno58 al cobro.
Comando SQL correspondiente:
SELECT COBROS.PK_COBRO,COBROS.PK_CLIENTE,COBROS.PK_BANCO,COBROS.FECHA_COBRO, COBROS.CONCEPTO,COBROS.DOCUMENTO_TIPO,COBROS.DOCUMENTO_NUMERO, COBROS.IMPORTE, COBROS.PK_DIVISA,COBROS.DIVISA_VALOR FROM COBROS INNER JOIN SERIES ON (COBROS.SERIE = SERIES.CODIGO) LEFT OUTER JOIN REMESAS ON (Remesas.Pk_Remesa = Cobros.Pk_Remesa) WHERE FiltroFechas
La expresión FiltroFechas se debe basar en el campo REMESAS.FECHA_COBRO.
|
Campos del fichero de Pagos, y comando SQL correspondiente:
SELECT PAGOS.PK_PAGO,PAGOS.PK_PROVEEDOR,PAGOS.PK_BANCO,PAGOS.FECHA_PAGO, PAGOS.CONCEPTO,PAGOS.DOCUMENTO_TIPO, PAGOS.DOCUMENTO_NUMERO,PAGOS.IMPORTE,PAGOS.PK_DIVISA,PAGOS.DIVISA_VALOR FROM PAGOS INNER JOIN SERIES ON (PAGOS.SERIE = SERIES.CODIGO) WHERE FiltroFechas
|
En este apartado se explica el formato de los ficheros que incluyen información específica del Régimen especial del Criterio de Caja.
Estos ficheros, a diferencia de los explicados en apartados anteriores, no se obtienen directamente mediante un comando SQL.
Tenga en cuenta que en estos ficheros se deben incluir también los datos del año anterior, y no sólo los del año actual.
El fichero CobrosVentasIvaDeCaja.xml indica para cada Factura y Cobro asignado a dicha Factura, cuál es el Importe Cobrado, así como los Tipos de IVA y Recargo y las correspondientes Cuotas de Iva y Recargo Cobradas, según la ley del Régimen especial de Criterio de Caja.
Los ficheros de ComprasIvaDeCajaPdtesPago.xml y TicketsCobrosIvaDeCaja.xml son similares, para el caso de Compras y Tiques, respectivamente.
Los ficheros VentasIvaDeCajaPdtesCobro.xml y ComprasIvaDeCajaPdtesPago.xml indican para cada Factura, cuál es el Importe pendiente de Cobrar o Pagar a 31 de Diciembre del año anterior, así como las los Tipos y Cuotas de IVA y Recargo.
|