Buscar en este blog

jueves, 10 de octubre de 2013

CONSTRUIR DTE USANDO CLASE C#

CONSTRUIR DTE USANDO CLASE C#


Bueno mucha gente me ha preguntado cómo puede construir sus dtes utilizando una forma simple y didáctica para realizarlo. Con un poco de paciencia y unos cuantos dolores de cabeza he construido una clase compuesta que permite realizar este trabajo. Les dejo los ejemplos de como funciona. Si alguien esta interesado en ella puede llamarme y charlamos. 

Principios generales

 Esta clase está basada en la posibilidad de serializar un objeto. Utilizando etiquetas de System.Serialization de C#. Este proceso permite transformar un objeto en su representación XML, exponiendo solo los elementos públicos de la misma y ocultando los privados. Particularmente esta clase contiene métodos para serializar, calcular los montos de la totalera, crear el ID del documento.  Los cuales no son visibles al momento de realizar la serializacion.

Primer paso

Primero cree una instancia de la clase y asigne las propiedades básicas del documento a crear, en este caso asigno datos del objeto Dte como la versión, el Id del objeto Documento y Finalmente asigno los datos básicos de la zona de Identificación del documento.




















Segundo paso

Para continuar asignaremos a nuestra clase los valores del emisor, receptor y los totales del documento actual.



























Tercer paso


Ahora lo más importante, es agregar el detalle del documento. Esta operación se realiza de la siguiente forma:



Cuarto paso

Bueno finalmente solo falta serializar el documento para obtener su representación básica en formato XML








El resultado de toda esta operación regresara un archivo físico como el siguiente:












































Calcular los montos


La clase también permite calcular automáticamente los montos de la totalera utilizando un método interno de sumatoria de los valores afectos o exentos según corresponda. Calcula además el monto del IVA y el monto total del documento.










Luego solo debemos asignar el método adecuado:








Lo que dará de resultado lo siguiente:


Totales del documento calculados automaticamente















Nodo TED

Esta clase agrega automaticamente el nodo TED, el cual debe ser timbrado posteriormente por el suario. El resultado de su calculo automatico es el siguiente:





16 comentarios:

  1. disculpa tocayo (tal cual tb me llamo Marcelo Rojas) =) ...la cuestion es que no entiendo como creaste la clase para que al serializar te quede como en el XML...

    ResponderEliminar
  2. Mi problema es el mismo. Acabo de generar con xsd en base a lo que pasa el SII y me queda medio extraño todo...

    ResponderEliminar
  3. Estimado alguna posibilidad de exponer la clase dte que realiza toda la pega?

    ResponderEliminar
  4. Estimado Marcelo, gracias por ser tan generoso al compartir tus extraordinarios logros en lo que a Facturación Electrónica se refiere, no me habría sido posible resolverlo sin tu ayuda.

    Tengo la misma inquietud de Anónimo acerca de tu clase, yo lo he resuelto creando el archivo linea a linea pero no me parece óptimo.

    Nuevamente gracias, saludos y suerte

    ResponderEliminar
  5. Marcelo, una duda de tu implementación

    ¿Por que no generaste las clases desde los esquemas (XSD)?, existe algun problema de como se generan las clases usando XSD.exe?

    Gracias

    Saludos

    ResponderEliminar
  6. Marcelo, podrías ser tan gentil y decirme como creaste ese XML serializado, tienes alguna función?

    Atte., Mauro Pro

    ResponderEliminar
    Respuestas
    1. Un aporte
      hay un servicio web gratuito que genera DTE, SetDTE y pdf gratis
      hsoft.cl

      Eliminar
  7. Marcelo, estoy creando el DTE para la boleta y estoy poniendo 39 para el tipoDTE pero me da ese error:

    Failed to set value on the property "TpoDTE". Possible reason: The Given Value 39 Violates Restrictions: Enumeration = (33 34 46 52 56 61)

    Tendria alguna noticia?

    ResponderEliminar
    Respuestas
    1. Estimado lo mas probable es que estes utilizando un xml DTE normal para crear tu boleta. Lo que debes hacer es revisar la documentacion de boletas para crear el documento correcto.

      Si tienes dudas llamame al 224042279

      Eliminar
  8. Hola amigos creo que puedo hacer un pequeño aporte, en este documento nos entrega un enunciado pero no da la solucion de fondo que es la creacion de la clase por lo tanto yo he aplicado la ingeneria inversa que es del archivo xml transformarlo en una clase para c#.
    esto se logra de la siguiente manera
    primero escribiremos el archivo xml tal como aparece presentado aqui
    por supuesto tener instalado el visual studio
    ir al tool y al simbolo para desarrolladores, ejecutarlo como administrador una vez ahi cd .. y cd .. quedamos en la raiz por ejemplo el archivo que escribi lo deje en una carpeta llamada xxxxx (ustedes eligen el nombre) en el cual copiaran el archivo xml
    cd xxxx
    y ejecutamos lo siguiente
    xsd /c /l:cs prueba.xml
    esto lo va a transformar en un xsd y quedara prueba.xsd
    otra vez realizan lo mismo y cambian la extencion
    xsd /c /l:cs prueba.xsd
    el resultado sera una clase y quedara como
    prueba.cs .. que es una clase el cual tengra la definicion de esta clase Experimente y me cuentan
    esto lo estoy realizado para desarrollar la factura electronica en chile ... acepto comentario gracias

    ResponderEliminar
    Respuestas
    1. Hola. Jorge

      Genere la Clase c# del squema que entrega SII y lo estoy consumiendo. esto genera dos grupos uno EnvioDte y el Otro DTEDefType.

      necesito ayuda me falta generar el xml para ver como va quedando a medida que voy traspasando los datos.
      Tu sabes como generar el xml?

      Gracias

      Eliminar
  9. a mi correo es jorgemezaleiva@gmail.com

    ResponderEliminar
  10. Hola Marcelo,

    Estoy interesado en adquirir tu clase DTE ($), pero necesito saber si modelaste la clase "Documento" solamente o también modelaste la clase "Liquidacion" y la clase "Exportaciones".

    Por ejemplo en Documento>Encabezado>Totales el MntTotal es un integer, pero en Exportaciones>Encabezado>Totales el MntTotal es un decimal

    ¿Eso está modelado OK en lo que ofreces?

    ResponderEliminar
    Respuestas
    1. Estimado,
      Tengo modelado para todos los documentos, sin perjuicio de esto si faltare algo o hubiese que hacer una modificación, no hay problema en hacerlo.

      Cualquier duda puede llamarme al 997800285

      Atte.
      Marcelo Rojas Rojas

      Eliminar
    2. disculpa la pregunta indiscreta marleo pero como hiciste para que pa class detalle of list detalle no saliera dentro del parent detalles en la serialización, yo le pongo xmlignoreattribute a la propiedad del tipo lista detalles que esta en DTE pero me descarta todo el detalle incluyendo los elementos :( :( :(

      Eliminar
    3. me respondo a mi mismo, ya lo arregle, ufff me costo

      Eliminar