SCHEMA smarmotech DEFINE pventas RECORD LIKE vetb00002.* DEFINE a om.SaxAttributes DEFINE out om.SaxDocumentHandler, i INT 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, nombreFile STRING 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") { DECLARE buscar CURSOR FOR SELECT b.factura,b.fecha_factura FROM vetb00002 b,vetb00071 c,vetb00072 d WHERE b.factura = d.documento AND d.tipo_doc = 'FT' AND c.codigo_dgii = d.codigo_dgii and b.fecha_factura between '03/01/2023' and '03/30/2023' and b.status_t is null FOREACH buscar INTO pventas.factura,pventas.fecha_factura # CALL a.clear() CALL a.addAttribute("factura",pventas.factura) CALL a.addAttribute("fecha",pventas.fecha_factura) CALL out.startElement("Encabezado",a) CALL out.endElement("Encabezado") END FOREACH} END FUNCTION