consulta como usar un condicionante IF ENDIF dentro de un TEXT ENDTEXT

151 views
Skip to first unread message

Marcelo Barberis

unread,
Jan 25, 2022, 9:24:39 PM1/25/22
to publicesvfoxpro
Hola buenas noches, estoy creando una factura en formato xml y utilizo un TEXT ENDTEXT para su elaboracion, armo todas las etiquetas pero existen algunas etiquetas que pueden tener dos valores, uno seria por ejemplo 1234000004567 y otro seria NULL, es decir dependiendo de una condicion puede ser <numeroTarjeta><<lnNroTarjeta>></numeroTarjeta> caso contrario puede ser <numeroTarjeta xsi:nil="true"/>.
Segun el XSD para valores null se debe pasar asi  <numeroTarjeta xsi:nil="true"/>

Ahora probando con IF ENDIF
TEXT TO lcFactura NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

<nitEmisor><<lnNitEmisor>></nitEmisor>
<razonSocialEmisor><<lcRazonSocialEmisor>></razonSocialEmisor>
<municipio><<lcMunicipio>></municipio>
IF forma_pago = 2 && con tarjeta
<numeroTarjeta><<lnNroTarjeta>></numeroTarjeta>
ELSE
<numeroTarjeta xsi:nil="true"/>
ENDIF
<numeroFactura><<lnNroFact>></numeroFactura>

Probando con IIF()
TEXT TO lcFactura NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

<nitEmisor><<lnNitEmisor>></nitEmisor>
<razonSocialEmisor><<lcRazonSocialEmisor>></razonSocialEmisor>
<municipio><<lcMunicipio>></municipio>
IIF(VAL(THIS.ID_FORMA_PAGO.Value)=2, <numeroTarjeta><<lnNroTarjeta>></numeroTarjeta>, <numeroTarjeta xsi:nil="true"/>)
<numeroFactura><<lnNroFact>></numeroFactura>   

probando de las dos forma me genera el siguiente error

xml.jpg
Agradecido por cualquier comentario
--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

ZeRoberto

unread,
Jan 25, 2022, 9:30:43 PM1/25/22
to publicesvfoxpro
De esta forma

Text To lcFactura Textmerge Noshow Additive
  <nitEmisor><<lnNitEmisor>></nitEmisor> 
  <razonSocialEmisor><<lcRazonSocialEmisor>></razonSocialEmisor>
  <municipio><<lcMunicipio>></municipio>
EndText
If forma_pago = 2 && con tarjeta
  Text To lcFactura Textmerge Noshow Additive
     <numeroTarjeta><<lnNroTarjeta>></numeroTarjeta>
  EndText
Else
Text To lcFactura Textmerge Noshow Additive
     <numeroTarjeta xsi:nil="true"/>
EndText
EndIf
Text To lcFactura Textmerge Noshow Additive
     <numeroFactura><<lnNroFact>></numeroFactura>
EndText

Saludos

Ze



--
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/CAMUm0dnXWjSSB7t05d%2BsAtnZzEYohBdGKHfS2Hx8T%3D_am19OkQ%40mail.gmail.com.

Cristian Novoa

unread,
Jan 25, 2022, 9:31:19 PM1/25/22
to Comunidad de Visual Foxpro en Español
El IF lo estás pasando como un texto estático. Si usaras <<, podria haber anidaciones de TEXTMERGE.

Yo haria lo siguiente:

TEXT TO lcTexto TEXTMERGE NOSHOW
IF forma_pago = 2 && con tarjeta
<numeroTarjeta><<lnNroTarjeta>></numeroTarjeta>
ELSE
<numeroTarjeta xsi:nil="true"/>
ENDIF
ENDTEXT

y despues metes lcTexto en el texto grande <<lcTexto>>

Cristian Novoa

unread,
Jan 25, 2022, 9:32:45 PM1/25/22
to Comunidad de Visual Foxpro en Español
Entreparentesis, también existe la función TEXTMERGE, para que pongas cosas en una línea.

El martes, 25 de enero de 2022 a la(s) 23:24:39 UTC-3, alexm...@gmail.com escribió:

HernanCano

unread,
Jan 26, 2022, 6:35:35 AM1/26/22
to Comunidad de Visual Foxpro en Español
Alex:
Mira las modificaciones que le hice al IIF en tu intento "Probando con IIF":

*!* Probando con IIF()

TEXT TO lcFactura NOSHOW ADDITIVE TEXTMERGE PRETEXT 15

<nitEmisor><<lnNitEmisor>></nitEmisor>
<razonSocialEmisor><<lcRazonSocialEmisor>></razonSocialEmisor>
<municipio><<lcMunicipio>></municipio>
<<IIF(VAL(THIS.ID_FORMA_PAGO.Value)=2, '<numeroTarjeta><<lnNroTarjeta>></numeroTarjeta>', '<numeroTarjeta xsi:nil="true"/>')>>
<numeroFactura><<lnNroFact>></numeroFactura>

ENDTEXT
MessageBox(lcFactura)

La idea es que se escriba en un sólo renglón.
Aún no lo he probado, por que estoy procesando datos para un cierre de mes.

Nos vas contando.
Reply all
Reply to author
Forward
0 new messages