Consulta sobre armado de XML/XSD y uso de TEXT ... ENDTEXT

293 views
Skip to first unread message

Marcelo Barberis

unread,
Oct 24, 2021, 10:13:26 PM10/24/21
to publicesvfoxpro
Hola buenas, estoy con el tema de generar procesos para armar un XML para la realizacion de una factura algo asi como electronica pero por aqui se llama En Linea, bueno la renta nos pasa un ejemplo de una factura en XML y su correspondiente XSD y la respuesta que recibo de la renta es que debemos basarnos en el XSD que se descarga de su portal. Viendo la estructura del XML tengo al principio esta etiqueta
<facturaComputarizadaCompraVenta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="facturaComputarizadaCompraVenta.xsd">
Mi consulta, estoy queriendo armar el XML con la instruccion TEXT ... ENDTEXT, esta etiqueta la copio tal cual esta..???

2.- Como le venia comentando debo realizar una factura, y se entiende que una factura puede contener de 1 a varios productos, mi consulta usando TEXT ... ENDTEXT como debo hacer para armar el TEXT ... ENDTEXT con la inclusion de varios productos, tomando en cuenta que tengo ya un cursor con los datos de la factura, es decir tengo el encabezado y el detalle.

3.- Tengo el archivo XSD, que es el esquema que debo usar, podrian decirme como visualizo este XSD, ver su estructura y si es posible la modificacion, yo intente abrirlo como un archivo de texto pero se visualiza todo desorganizado.

Desde ya agradesco cualquier tipo de comentario y adjunto un XML y XSD es el que descargo del portal de la renta

--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

facturaComputarizadaCompraVenta.xml
facturaComputarizadaCompraVenta.xsd

HernanCano

unread,
Oct 25, 2021, 12:07:06 AM10/25/21
to Comunidad de Visual Foxpro en Español
La próx vez muestra un poquito de esfuerzo de tu  parte y escribe algo que consideres que es como debes proceder, para poder saber dónde está tu necesidad.

function GenerarXML

lparameters M.tNum

if !used('FACTURAS')
use FACTURAS order NUMERO shared
endif
select FACTURAS

seek M.tNum


local M.cFac
M.cFac = ""

TEXT TO M.cFac NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<facturaComputarizada xsi:noNamespaceSchemaLocation="facturaComputarizada.xsd">
<cabecera>
<nitEmisor><<NIT>></nitEmisor>
<razonSocialEmisor><<RAZONSOCIAL>></razonSocialEmisor>
<numeroFactura><<NUMERO>></numeroFactura>
<direccion><<DIRECCION>></direccion>
<fechaEmision><<FECHA>></fechaEmision>
<nombreRazonSocial><<RAZONSOCIAL>></nombreRazonSocial>
<VrMercancia><<VRMERCANCIA>></VrMercancia>
<VrIva><<VRIVA>></VrIva>
<VrFactura><<VRFACTURA>></VrFactura>
</cabecera>

ENDTEXT

scan while NUMERO=M.tNum

TEXT TO M.cFac NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

<detalle>
<codigo><<CODIGO>></codigo>
<descripcion><<DESCRIPCION>></descripcion>
<cantidad><<CANTIDAD></cantidad>
<precio><<PRECIO>></precio>
</detalle>

ENDTEXT

endscan


TEXT TO M.cFac NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

</facturaComputarizada>

ENDTEXT

MessageBox(M.cFac)

**

Marcelo Barberis

unread,
Oct 25, 2021, 12:52:12 AM10/25/21
to publicesvfoxpro
Hola perdon por mi ignorancia con el tema de XML, bueno mi consulta pense que habia realizado bien mi consulta, lo que queria saber pese que busque en la web y no encontre de la forma que yo necesitaba realizar, lo que necesito es lo sigueinte:
Debo realizar una factura y pasarlo a un XML y lo que encontre en la web se basan en un solo detalle de factura es decir que la factura lleva un solo detalle o un producto, yo consulte a este grupo es como hago para armar una factura que tenga mas de un producto en el detalle, ahora lo que tu me pasas gentilmente es todo en forma separada, es decir lo que vendria ser el encabezado con un TEXT .. ENDTEXT y aparte lo que es el detalle. Bueno comentarte es que yo es primera vez que trabajo con XML pero bueno yo buscaba algun ejemplo mas completo con el encabezado y el detalle.
Pero al margen agradedesco tus comentarios y el tiempo que te tomaste para ver mi consulta

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/7aebf52a-43d2-4679-bed2-91cc812ee48en%40googlegroups.com.

HernanCano

unread,
Oct 25, 2021, 1:58:17 AM10/25/21
to Comunidad de Visual Foxpro en Español
Con todo éso quieres decir que tampoco te funciona la alternativa que te propongo????????????????

Si es así, entonces nada te va a funcionar.

El domingo, 24 de octubre de 2021 a la(s) 23:52:12 UTC-5, alexm... escribió:
Hola perdon por mi ignorancia con el tema de XML, bueno mi consulta pense que habia realizado bien mi consulta, lo que queria saber pese que busque en la web y no encontre de la forma que yo necesitaba realizar, lo que necesito es lo sigueinte:
Debo realizar una factura y pasarlo a un XML y lo que encontre en la web se basan en un solo detalle de factura es decir que la factura lleva un solo detalle o un producto, yo consulte a este grupo es como hago para armar una factura que tenga mas de un producto en el detalle, ahora lo que tu me pasas gentilmente es todo en forma separada, es decir lo que vendria ser el encabezado con un TEXT .. ENDTEXT y aparte lo que es el detalle. Bueno comentarte es que yo es primera vez que trabajo con XML pero bueno yo buscaba algun ejemplo mas completo con el encabezado y el detalle.
Pero al margen agradedesco tus comentarios y el tiempo que te tomaste para ver mi consulta

El lun, 25 oct 2021 a las 0:07, HernanCano escribió:
function GenerarXML

Marcelo Barberis

unread,
Oct 25, 2021, 3:35:31 AM10/25/21
to publicesvfoxpro
De todos modos gracias por disponer tu tiempo a leer mis consultas, valoro eso amigo

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

HernanCano

unread,
Oct 25, 2021, 1:52:04 PM10/25/21
to Comunidad de Visual Foxpro en Español
>>> ...   pero bueno yo buscaba algun ejemplo mas completo con el encabezado y el detalle.

El procedimiento que te puse funciona para ese escenario. Hice lo que no debemos hacer: pasar el conjunto de comandos directo (listo para copiar y pegar), sólo falta poner los nombres de campos de tus DBFs.............

Y no es sólo para encabezado y detalle, sino que incluye también el fin de xml.

El ejemplo que te paso es lo suficientemente completo para que funcione en tu escenario.

Pero no has aclarado por qué no te sirve.


El domingo, 24 de octubre de 2021 a la(s) 23:52:12 UTC-5, alexm... escribió:

Fernando Mora

unread,
Oct 26, 2021, 11:34:56 AM10/26/21
to Comunidad de Visual Foxpro en Español
Hola Marcelo!

Los Xml son simples archivos de texto, puedes crear un Xml usando un objeto DOM ej: oXml=CreateObject("MSXML.DomDocument") pero eso es COMPLICARSE LA VIDA, cuando en Fox podemos escribir los Xml directamente usando Text EndText tal como te lo plantea Hernan. 
Armas una cadena de texto y luego pasas toda la cadena a un archivo usando StrToFile(cadena, "MirutaArchivo.xml")

Usas un Text EndText para encabezado, otro para detalles y otro para el pie de factura (usando Additive desde luego) y finalmente pasas eso a un archivo con extensión Xml. 

Suerte!
Fernando Mora

almonts ( www.ontariombd.es )

unread,
Oct 26, 2021, 5:39:12 PM10/26/21
to Comunidad de Visual Foxpro en Español
Así es como yo lo hice. Con TEXT .....ENDTEXT 

Marcelo Barberis

unread,
Oct 26, 2021, 5:44:40 PM10/26/21
to publicesvfoxpro
gracias por tu comentario amigo

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Gonzalo Mariscal

unread,
Nov 2, 2021, 3:16:16 PM11/2/21
to Comunidad de Visual Foxpro en Español
LOCAL loXMLSchema as "MSXML2.XMLSchemaCache.4.0"
LOCAL loXML as "MSXML2.DOMDocument.4.0"

loXMLSchema = CREATEOBJECT("MSXML2.XMLSchemaCache.4.0")
loXMLSchema.add("", "facturaElectronicaEstandar.xsd")

loXML = CREATEOBJECT("MSXML2.DOMDocument.4.0")
loXML.schemas = loXMLSchema
loXML.async = .F.
loXML.load("facturaElectronicaEstandar.xml")
IF loXML.parseError.errorCode = 0
    MESSAGEBOX("Document XML cargado correcto!")
ELSE
    lcErrorMsg = "No fue posible cargar el documento " + ;
    "porque no corresponde al esquema." + CHR(10) + ;
    "linea: " + TRANSFORM(loXML.parseError.line) + CHR(10) + ;
    "Caracter en la linea: " + ;
    TRANSFORM(loXML.parseError.linepos) + CHR(10) + ;
    "causa del error: " + TRANSFORM(loXML.parseError.reason)
    MESSAGEBOX(lcErrorMsg)
    _cliptext=TRANSFORM(loXML.parseError.reason)
ENDIF


Usa esta rutuina para validar tus xml contra xsd
Reply all
Reply to author
Forward
0 new messages