DEFINE a om.SaxAttributes DEFINE out om.SaxDocumentHandler, i INT, nombreFile STRING DEFINE r_documento_encabezado RECORD tipoEcf,eNcf,indicadorMontoGravado,tipoPago,fechaLimitePago,FormadePAgo,montoPago,FechaVencimientoSecuencia, rncEmisor,razonSocialEmisor,direccionEmisor,Municipio,Provincia,telefonoEmisor, correoEmisor,webSite,codigoVendedor,numeroFacturaInterna,numeroPedidoInterno, fechaEmision,rncComprador,razonSocialComprador,montoGravadoTotal,montoGravadoI1, montoGravadoI2,montoGravadoI3,montoExento,itbis1,itbis2,itbis3,totalItbis,totalItbis1, totalItbis2,totalItbis3,montoTotal,tipoIngreso,terminoPago,TipoCuentaPago,NumeroCuentaPago,IdentificadorExtranjero STRING END RECORD DEFINE r_documento_Detalle DYNAMIC ARRAY OF RECORD indicadorFacturacion,nombreItem,indicadorBienoServicio,cantidadItem,precioUnitarioItem, montoItem STRING, DescripcionItem VARCHAR(1000), NumeroLinea int END RECORD FUNCTION generafile(documento_encabezado,documento_Detalle) DEFINE documento_encabezado RECORD tipoEcf,eNcf,indicadorMontoGravado,tipoPago,fechaLimitePago,FormadePAgo,montoPago,FechaVencimientoSecuencia, rncEmisor,razonSocialEmisor,direccionEmisor,Municipio,Provincia,telefonoEmisor, correoEmisor,webSite,codigoVendedor,numeroFacturaInterna,numeroPedidoInterno, fechaEmision,rncComprador,razonSocialComprador,montoGravadoTotal,montoGravadoI1, montoGravadoI2,montoGravadoI3,montoExento,itbis1,itbis2,itbis3,totalItbis,totalItbis1, totalItbis2,totalItbis3,montoTotal,tipoIngreso,terminoPago,TipoCuentaPago,NumeroCuentaPago,IdentificadorExtranjero STRING END RECORD DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD indicadorFacturacion,nombreItem,indicadorBienoServicio,cantidadItem,precioUnitarioItem, montoItem STRING, DescripcionItem VARCHAR(1000), NumeroLinea int END RECORD LET nombreFile = 'ECF',documento_encabezado.eNcf CLIPPED,'.XML' LET r_documento_encabezado.* = documento_encabezado.* LET r_documento_Detalle = documento_detalle LET out=om.XmlWriter.createFileWriter(nombreFile) LET a=om.SaxAttributes.create() CALL out.startDocument() CALL out.startElement("ECF",a) CALL encabezado() CALL detalle() CALL out.endElement("ECF") CALL out.endDocument() CALL procesoEncf(nombrefile) END FUNCTION FUNCTION encabezado() CALL out.startElement("Encabezado",a) CALL out.startElement("Version",null) CALL out.characters("1.0") CALL out.endElement("Version") CALL a.clear() CALL out.startElement("idDoc",NULL) CALL out.startElement("TipoeCF",null) CALL out.characters(r_documento_encabezado.tipoEcf CLIPPED) CALL out.endElement("TipoeCF") CALL out.startElement("eNCF",null) CALL out.characters(r_documento_encabezado.eNcf CLIPPED) CALL out.endElement("eNCF") CALL out.startElement("FechaVencimientoSecuencia",null) CALL out.characters(r_documento_encabezado.FechaVencimientoSecuencia) CALL out.endElement("FechaVencimientoSecuencia") CALL out.startElement("IndicadorMontoGravado",null) CALL out.characters(r_documento_encabezado.indicadorMontoGravado) CALL out.endElement("IndicadorMontoGravado") CALL out.startElement("TipoIngresos",null) CALL out.characters(r_documento_encabezado.tipoIngreso) CALL out.endElement("TipoIngresos") CALL out.startElement("TipoPago",null) CALL out.characters(r_documento_encabezado.tipoPago) CALL out.endElement("TipoPago") IF r_documento_encabezado.fechaLimitePago IS NOT NULL THEN CALL out.startElement("FechaLimitePago",null) CALL out.characters(r_documento_encabezado.fechaLimitePago) CALL out.endElement("FechaLimitePago") END IF IF r_documento_encabezado.terminoPago IS NOT NULL THEN CALL out.startElement("TerminoPago",null) CALL out.characters(r_documento_encabezado.terminoPago) CALL out.endElement("TerminoPago") END IF # AQUI VA LA TABLA FORMA DE PAGO, ESTO NO ES OBLIGATORIO CALL out.startElement("TablaFormasPago",NULL) CALL out.startElement("FormaPago",null) CALL out.characters(r_documento_encabezado.FormadePAgo) CALL out.endElement("FormaPago") CALL out.startElement("MontoPago",null) CALL out.characters(r_documento_encabezado.montoPago) CALL out.endElement("MontoPago") CALL out.startElement("TipoCuentaPago",null) CALL out.characters(r_documento_encabezado.TipoCuentaPago) CALL out.endElement("TipoCuentaPago") CALL out.endElement("TablaFormasPago") CALL out.endElement("idDoc") CALL out.startElement("Emisor",NULL) CALL out.startElement("RNCEmisor",NULL) CALL out.characters(r_documento_encabezado.rncEmisor) CALL out.endElement("RNCEmisor") CALL out.startElement("RazonSocialEmisor",NULL) CALL out.characters(r_documento_encabezado.razonSocialEmisor) CALL out.endElement("RazonSocialEmisor") CALL out.startElement("DireccionEmisor",NULL) CALL out.characters(r_documento_encabezado.direccionEmisor) CALL out.endElement("DireccionEmisor") CALL out.startElement("Municipio",NULL) CALL out.characters(r_documento_encabezado.Municipio) CALL out.endElement("Municipio") CALL out.startElement("Provincia",NULL) CALL out.characters(r_documento_encabezado.Provincia) CALL out.endElement("Provincia") CALL out.startElement("CorreoEmisor",NULL) CALL out.characters(r_documento_encabezado.correoEmisor) CALL out.endElement("CorreoEmisor") CALL out.startElement("CodigoVendedor",NULL) CALL out.characters(r_documento_encabezado.codigoVendedor) CALL out.endElement("CodigoVendedor") CALL out.startElement("NumeroFacturaInterna",NULL) CALL out.characters(r_documento_encabezado.numeroFacturaInterna) CALL out.endElement("NumeroFacturaInterna") CALL out.startElement("NumeroPedidoInterno",NULL) CALL out.characters(r_documento_encabezado.numeroPedidoInterno) CALL out.endElement("NumeroPedidoInterno") CALL out.startElement("FechaEmision",NULL) CALL out.characters(r_documento_encabezado.fechaEmision) CALL out.endElement("FechaEmision") CALL out.endElement("Emisor") CALL out.startElement("Comprador",NULL) CALL out.startElement("RNCComprador",NULL) CALL out.characters(r_documento_encabezado.rncComprador) CALL out.endElement("RNCComprador") CALL out.startElement("RazonSocialComprador",NULL) CALL out.characters(r_documento_encabezado.razonSocialComprador) CALL out.endElement("RazonSocialComprador") CALL out.endElement("Comprador") CALL out.startElement("Totales",NULL) CALL out.startElement("MontoGravadoTotal",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoTotal") CALL out.startElement("MontoGravadoI1",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoI1") CALL out.startElement("MontoGravadoI2",NULL) CALL out.characters(r_documento_encabezado.montoGravadoI2) CALL out.endElement("MontoGravadoI2") CALL out.startElement("MontoGravadoI3",NULL) CALL out.characters(r_documento_encabezado.montoGravadoI3) CALL out.endElement("MontoGravadoI3") CALL out.startElement("MontoExento",NULL) CALL out.characters(r_documento_encabezado.montoExento) CALL out.endElement("MontoExento") CALL out.startElement("ITBIS1",NULL) CALL out.characters(r_documento_encabezado.itbis1) CALL out.endElement("ITBIS1") CALL out.startElement("ITBIS2",NULL) CALL out.characters(r_documento_encabezado.itbis2) CALL out.endElement("ITBIS2") CALL out.startElement("ITBIS3",NULL) CALL out.characters(r_documento_encabezado.itbis3) CALL out.endElement("ITBIS3") CALL out.startElement("TotalITBIS",NULL) CALL out.characters(r_documento_encabezado.totalItbis) CALL out.endElement("TotalITBIS") CALL out.startElement("TotalITBIS1",NULL) CALL out.characters(r_documento_encabezado.totalItbis1) CALL out.endElement("TotalITBIS1") CALL out.startElement("TotalITBIS2",NULL) CALL out.characters(r_documento_encabezado.totalItbis2) CALL out.endElement("TotalITBIS2") CALL out.startElement("TotalITBIS3",NULL) CALL out.characters(r_documento_encabezado.totalItbis3) CALL out.endElement("TotalITBIS3") CALL out.startElement("MontoTotal",NULL) CALL out.characters(r_documento_encabezado.montoTotal) CALL out.endElement("MontoTotal") CALL out.endElement("Totales") CALL out.endElement("Encabezado") END FUNCTION FUNCTION detalle() CALL out.startElement("DetallesItems",NULL) FOR i =1 TO r_documento_detalle.getLength() CALL out.startElement("Item",NULL) CALL out.startElement("NumeroLinea",NULL) CALL out.characters(i USING "<<<") CALL out.endElement("NumeroLinea") CALL out.startElement("IndicadorFacturacion",NULL) CALL out.characters(r_documento_detalle[i].indicadorFacturacion) CALL out.endElement("IndicadorFacturacion") CALL out.startElement("NombreItem",NULL) CALL out.characters(r_documento_detalle[i].nombreItem) CALL out.endElement("NombreItem") CALL out.startElement("IndicadorBienoServicio",NULL) CALL out.characters(r_documento_detalle[i].indicadorBienoServicio) CALL out.endElement("IndicadorBienoServicio") CALL out.startElement("DescripcionItem",NULL) CALL out.characters(r_documento_detalle[i].DescripcionItem) CALL out.endElement("DescripcionItem") CALL out.startElement("CantidadItem",NULL) CALL out.characters(r_documento_detalle[i].cantidadItem) CALL out.endElement("CantidadItem") CALL out.startElement("PrecioUnitarioItem",NULL) CALL out.characters(r_documento_detalle[i].precioUnitarioItem) CALL out.endElement("PrecioUnitarioItem") CALL out.startElement("MontoItem",NULL) CALL out.characters(r_documento_detalle[i].montoItem) CALL out.endElement("MontoItem") CALL out.endElement("Item") END FOR CALL out.endElement("DetallesItems") END FUNCTION