FoxPro/Visual FoxPro - Convertir dbf a xml

 
Vista:
sin imagen de perfil

Convertir dbf a xml

Publicado por Armando (8 intervenciones) el 12/04/2016 23:07:31
Buen dia a todos :
Trabajo en un proyecto de un sistema de facturacion; resulta que SUNAT aqui en Peru, determino obligatoriedad de facturas y otros electronico.
Es decir mi archivo DBF donde esta la factura o en todo caso los datos debo convertirlo a un formato XML y enviarselo a Sunat para que lo valide. Podrian orientarme al respecto. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convertir dbf a xml

Publicado por Saul Hernandez (728 intervenciones) el 30/04/2016 06:43:17
Hola Armando
Te dejo un ejemplo que uso.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
*--- 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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar