Buscar en este blog

jueves, 27 de febrero de 2014

AGREGAR DOCUMENTO DTE A BASE DE DATOS SQL

AGREGAR DOCUMENTO DTE A BASE DE DATOS SQL

Bueno una de las cosas que esta relacionada con los documentos XML(DTE), es la posibilidad de almacenarlos en la base de datos. Lo que parece simple de decir en la practica resulta ser un poco complicado al momento de ejecutarlo. En esta entrega los mostraré como agregar un documento xml a la base de datos  utilizando un procedimiento almacenado.

PROBLEMA

Uno de nuestros proveedores nos envía una factura electrónica para que nosotros la contabilicemos en nuestro sistema. Actualmente se contabilizan estas facturas copiándolas físicamente en un directorio de windows. Se requiere registrarlas en la base de datos SQL.

SOLUCIÓN

Para poder registrar los documentos de compras en la base de datos se debe recrear la estructura del documento DTE(Completo) en la base de datos. Es decir construir las tablas basándose en el documento DTE. Luego se debe construir un procedimiento almacenado que lea el documento DTE y lo distribuya en las tablas creadas con el proposito de almacenar los datos del documento. Esto permitirá crear los reportes necesarios para la contabilidad de la empresa.

IMPLEMENTAR SOLUCIÓN

Bueno manos a la obra, primero que nada en su base de datos deberá crear la representación del documento DTE utilizando las tablas. Para fines didácticos solo crearemos la tabla denominada IdDoc que hace referencia al nodo IdDoc del documento DTE. Esto se logra de la siguiente forma:





























Este es un ejemplo de como crear la tabla, Ud. podrá construirlo según sus necesidades.

Luego para recuperar los datos desde el documento XML (DTE) deberá crear un procedimiento almacenado que realice esta tarea.
























































































Con este procedimiento almacenado podrá rescatar los datos desde el documento DTE(XML). Recuerde que solo se implementa parcialmente la solución al problema. Ud. Deberá crear el resto de las tablas que faltan y completar el Procedimiento Almacenado.

Este es el documento XML para rescatar la información.





























Bueno espero haberlos ayudado con este ejemplo. Creo que es mas practico de esta forma pues muchos de nosotros utilizamos la capa de datos para agregar uno a uno los datos del XML.


3 comentarios:

  1. Excelente! tiene la estructura de datos completa??

    ResponderEliminar
  2. consulta, hay que enviar los dte generados a un cliente siempre que sea facturador electrónico? tanto a los facturadores elec. con software de mercado como los que usan el portal (ex)mipyme también? y en caso de una guía por traslado a proveedor (para reparación de una máquina por ej.), se debe enviar al proveedor esta guía?(es que a él no le importa la guía, y además hay dos casos uno llevamos la máquina para que le haga presupuesto altiro y nos vamos otro caso que la máquina se quede allá sólo en ese caso nos interesaría mostrarle la guía aunque él tendría otro documento de recibo seguramente). También están las guías a cliente por cambio, esas sí tiene sentido enviarlas porque tienen que ver con lo que es la venta. Bueno en fin cualquier aclaración gracias. Ah a todo esto no hay manera de conseguir los correos electrónicos de intercambio xml de los clientes? que es lo normal (sw de mercado), contactar a tus clientes e ir consiguiendo los emails de a poco... y si tus proveedores no te envían sus facturas contactarlos a ellos tú mismo tb? A todo esto el acuse de recibo de mercaderías o aceptación comercial electrónicos aún no son necesarios si se hizo acuse firmando la factura cierto? gracias.

    ResponderEliminar
  3. acerca del post, me llama la atención el tipo con que se ha registrado algunos campos. Aquí quizá cabe una discusión filosófica del asunto pero lo que me parece lógico es 1.- registrar los DTE de forma binaria por ejemplo, así conservamos los originales, y 2.- guardarlos en el formato y tipos de datos que más nos acomoden a nosotros, o sea medio de pago no necesariamente un string, fecha no necesariamente un string, etc etc.

    ResponderEliminar