*--- STRING XML
*- Prepara archivo XML
**************************************************************
*fact = ALLTRIM(STR(vreportes.fact_num))
LOCAL _Archivo
_Archivo = "C:\PathXml"
*Borra Archivo para crearlo de nuevo
DELETE FILE &_Archivo
IF FILE(_Archivo) && Existe el archivo?
gnFileXml = FOPEN(_Archivo,12) && Si, abrirlo lectura-escritura
ELSE
gnFileXml = FCREATE(_Archivo) && No, crearlo
ENDIF
IF gnFileXml < 0 && Comprobar error al abrir el archivo
WAIT 'No se puede abrir o crear el archivo' WINDOW NOWAIT
ELSE
SELECT gVenta &&&-- Deberia se tu tabla lista que contiene tus datos de factura
nTotFacs = RECCOUNT()
*- Se agregale linea por linea del archivo
FPUTS(gnFileXml,'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
FPUTS(gnFileXml,'<LOTE>')
FPUTS(gnFileXml,'<PEDIDO>1</PEDIDO>')
FPUTS(gnFileXml,'<TOTALDOCUMENTOS>'+ALLTRIM(STR(nTotFacs))+'</TOTALDOCUMENTOS>')
FPUTS(gnFileXml,'<DOCUMENTOS>')
SELECT gVenta
GOTO TOP
DO WHILE !EOF()
*** INICIA LA FATURA
FPUTS(gnFileXml,'<FACTURA>')
**.- Inicia Encabezado
FPUTS(gnFileXml,' <ENCABEZADO>')
FPUTS(gnFileXml,' <NOFACTURA>'+ALLTRIM(gVenta.Fact_num)+'</NOFACTURA>')
FPUTS(gnFileXml,' <RESOLUCION>'+ALLTRIM(gVenta.Resolucion)+'</RESOLUCION>')
FPUTS(gnFileXml,' <IDSERIE>'+ALLTRIM(gVenta.Serie)+'</IDSERIE>')
FPUTS(gnFileXml,' <EMPRESA>533</EMPRESA>')
FPUTS(gnFileXml,' <SUCURSAL>1</SUCURSAL>')
FPUTS(gnFileXml,' <CAJA>01</CAJA>')
FPUTS(gnFileXml,' <USUARIO>'+ALLTRIM(gVenta.CO_US_IN)+'</USUARIO>')
FPUTS(gnFileXml,' <FECHAEMISION>'+DTOC(gVenta.Fec_emis)+'</FECHAEMISION>')
FPUTS(gnFileXml,' <GENERACION>C</GENERACION>')
FPUTS(gnFileXml,' <MONEDA>'+ALLTRIM(gVenta.Moneda)+'</MONEDA>')
FPUTS(gnFileXml,' <TASACAMBIO>'+ALLTRIM(STR(gVenta.Tasa,12,5))+'</TASACAMBIO>')
FPUTS(gnFileXml,' <NOMBRECONTRIBUYENTE><![CDATA['+_Tildes(gVenta.cli_des)+']]></NOMBRECONTRIBUYENTE>')
FPUTS(gnFileXml,' <DIRECCIONCONTRIBUYENTE><![CDATA['+_Tildes(gVenta.direc1)+']]></DIRECCIONCONTRIBUYENTE>')
FPUTS(gnFileXml,' <NITCONTRIBUYENTE>'+ALLTRIM(gVenta.Nit)+'</NITCONTRIBUYENTE>')
*Arreglo 15-07-2014 donde la factura tiene valor cero porque se desconto el 100%
IF gVenta.sub_des-gVenta.Iva = 0.00
FPUTS(gnFileXml,' <VALORNETO>0.01</VALORNETO>')
FPUTS(gnFileXml,' <IVA>0.00</IVA>')
FPUTS(gnFileXml,' <TOTAL>0.01</TOTAL>')
ELSE
FPUTS(gnFileXml,' <VALORNETO>'+ALLTRIM(STR((gVenta.sub_des-gVenta.Iva),12,2))+'</VALORNETO>')
FPUTS(gnFileXml,' <IVA>'+ALLTRIM(STR(gVenta.Iva,12,2))+'</IVA>')
FPUTS(gnFileXml,' <TOTAL>'+ALLTRIM(STR(gVenta.sub_des,12,2))+'</TOTAL>')
ENDIF
FPUTS(gnFileXml,' <DESCUENTO>'+ALLTRIM(STR(gVenta.Glob_desc,12,2))+'</DESCUENTO>')
*-Si el valor es Exento
IF gVenta.Iva = 0.00
FPUTS(gnFileXml,' <EXENTO>'+ALLTRIM(STR(gVenta.Tot_neto,12,2))+'</EXENTO>')
ELSE
FPUTS(gnFileXml,' <EXENTO>0.00</EXENTO>')
ENDIF
FPUTS(gnFileXml,' </ENCABEZADO>')
**.- Finaliza Encabezado Encabezado
**.- Opciones
FPUTS(gnFileXml,' <OPCIONAL>')
FPUTS(gnFileXml,' <OPCIONAL1><![CDATA['+gVenta.co_tran+']]></OPCIONAL1>')
FPUTS(gnFileXml,' <OPCIONAL2><![CDATA['+_Tildes(gVenta.des_tran)+']]></OPCIONAL2>')
IF VAL(gVenta.forma_pag) > 0 &&Credito
FPUTS(gnFileXml,' <OPCIONAL3><![CDATA[ '+']]></OPCIONAL3>')
FPUTS(gnFileXml,' <OPCIONAL4><![CDATA[ '+']]></OPCIONAL4>')
FPUTS(gnFileXml,' <OPCIONAL5><![CDATA['+ALLTRIM(gVenta.forma_pag)+']]></OPCIONAL5>')
ELSE
FPUTS(gnFileXml,' <OPCIONAL3><![CDATA[X]]></OPCIONAL3>')
FPUTS(gnFileXml,' <OPCIONAL4><![CDATA[ '+']]></OPCIONAL4>')
FPUTS(gnFileXml,' <OPCIONAL5><![CDATA[ '+']]></OPCIONAL5>')
ENDIF
FPUTS(gnFileXml,' <OPCIONAL6><![CDATA['+gVenta.co_ven+']]></OPCIONAL6>')
FPUTS(gnFileXml,' <OPCIONAL7><![CDATA['+_Tildes(gVenta.ven_des)+']]></OPCIONAL7>')
FPUTS(gnFileXml,' <OPCIONAL8><![CDATA['+gVenta.co_cli+']]></OPCIONAL8>')
FPUTS(gnFileXml,' <OPCIONAL9><![CDATA['+ALLTRIM(STR(gVenta.SubtotFac,12,2))+']]></OPCIONAL9>')
FPUTS(gnFileXml,' <TOTAL_LETRAS><![CDATA['+NumLet(gVenta.sub_des)+']]></TOTAL_LETRAS>')
FPUTS(gnFileXml,' </OPCIONAL>')
*- Hace un ciclo para detarmiar todos los Items
SELECT * FROM tempxx1;
WHERE tempxx1.fact_num = gVenta.fact_num;
ORDER BY 1,2;
INTO CURSOR gDetaFactura
SELECT gDetaFactura
FPUTS(gnFileXml,' <DETALLE>')
SCAN ALL
FPUTS(gnFileXml,' <LINEA>')
FPUTS(gnFileXml,' <CANTIDAD>'+ALLTRIM(STR(gDetaFactura.Total_art1,12,5))+'</CANTIDAD>')
FPUTS(gnFileXml,' <DESCRIPCION><![CDATA['+_Tildes(gDetaFactura.Art_des)+']]></DESCRIPCION>')
FPUTS(gnFileXml,' <METRICA>'+ALLTRIM(gDetaFactura.Uni_venta)+'</METRICA>')
FPUTS(gnFileXml,' <PRECIOUNITARIO>'+ALLTRIM(STR(gDetaFactura.Prec_Uni,12,5))+'</PRECIOUNITARIO>')
FPUTS(gnFileXml,' <VALOR>'+ALLTRIM(STR(gDetaFactura.Renglon_neto,12,5))+'</VALOR>')
FPUTS(gnFileXml,' <DETALLE1><![CDATA['+ALLTRIM(gDetaFactura.Co_art)+']]></DETALLE1>')
FPUTS(gnFileXml,' <DETALLE2><![CDATA['+ALLTRIM(STR(gDetaFactura.Prec_vta,12,3))+']]></DETALLE2>')
FPUTS(gnFileXml,' <DETALLE3><![CDATA['+ALLTRIM(STR(gDetaFactura.porc1,8,2))+']]></DETALLE3>')
FPUTS(gnFileXml,' <DETALLE4><![CDATA['+ALLTRIM(STR(gDetaFactura.porc2,8,2))+']]></DETALLE4>')
FPUTS(gnFileXml,' <DETALLE5><![CDATA['+ALLTRIM(STR(gDetaFactura.porc3,8,2))+']]></DETALLE5>')
FPUTS(gnFileXml,' </LINEA>')
ENDSCAN
USE IN gDetaFactura
FPUTS(gnFileXml,' </DETALLE>')
FPUTS(gnFileXml,'</FACTURA>')
** FINALIZA LA FACTURA
SELECT gVenta
SKIP
ENDDO
FPUTS(gnFileXml,'</DOCUMENTOS>')
FPUTS(gnFileXml,'</LOTE>')
ENDIF
=FCLOSE(gnFileXml ) && Cerrar archivo