Visor o leer XML...(Solucionado)

ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML

Post by ACC69 »

karinha wrote:tArray.prg y tArray.ch

http://fivetechsupport.com/forums/viewt ... 99&start=0

Saludos.

Gracias Ing. Karinha, te agradezco la informacion de la clase TArray, con eso ya debo empezar a adaptarlo a mi sistema,el archivo xml, lo subi, desde principio, descargalo desde ahi, que viene adjunto, o solo copia y create test.xml.

Saludos y nuevamente gracias a todos.

Atte: Adrian C. C.
derpipu
Posts: 93
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico
Contact:

Re: Visor o leer XML

Post by derpipu »

Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos
Luis Fernando Rubio Rubio
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML

Post by ACC69 »

derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos
Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una pequeña duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code: Select all

// EMISOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle  := pcValue

 // RECEPTOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle  := pcValue
Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML

Post by ACC69 »

ACC69 wrote:
derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos
Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una pequeña duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code: Select all

// EMISOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle  := pcValue

 // RECEPTOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle  := pcValue
Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com
Esta es la imagen, por el que ya tengo algo avanzado que lee xml y extrae datos gracias a la rutina del Ing. Luis Fernando,solo que hay inconveniente,de la longitud de caracteres de "domicilio" a "domiciliofiscal" que al procesar, me toma la primera frase "domicilio" sin llegar a procesar "...fiscal", habria que ver que solucion darle.

Image

Ya luego pongo el codigo, hasta solucionar ese pequeño inconveniente.

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML.. (Solucionado)

Post by ACC69 »

ACC69 wrote:
ACC69 wrote:
derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos
Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una pequeña duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code: Select all

// EMISOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle  := pcValue

 // RECEPTOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle  := pcValue
Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com
Esta es la imagen, por el que ya tengo algo avanzado que lee xml y extrae datos gracias a la rutina del Ing. Luis Fernando,solo que hay inconveniente,de la longitud de caracteres de "domicilio" a "domiciliofiscal" que al procesar, me toma la primera frase "domicilio" sin llegar a procesar "...fiscal", habria que ver que solucion darle.

Image

Ya luego pongo el codigo, hasta solucionar ese pequeño inconveniente.

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com

Listoo ya quedo, ya muestra bien los datos de la direccion del emisor,como la direccion del receptor, ya el resto, ya es cuestion mia. :D
Adjunto la imagen y el prg, como queria y con browse .

Gracias Ing. Luis Fernando ,le agradezco mil, que me haya ayudado.

Image

Saludos cordiales .

Code: Select all

#include "FiveWin.ch"
#Include "xBrowse.ch"
#include "TArray.ch"

REQUEST  DbfCdx, DbfFpt, RPreview
EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo

Static oDlg, oSay, oBrw, aDatos

//------------------------------------------------------------------------------
FUNCTION PRINCIPAL()
 Local aGradBarSelFocus:= { { 1, RGB(252,232,171)   , RGB(248,195, 34) } }
 Local aGradBarSel     := {{1, RGB(252,235, 184), RGB(251,222,88)}}

 Local hFile    := FOpen( "test.xml" )
 Local oXmlDoc  := TXmlDocument():New( hFile )
 Local oXmlIter := TXmlIterator():New( oXmlDoc:oRoot ), oTagActual, cTagname, oDatos
 Local cDirecc

 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetResDebug(.T.) // Al inicio ...

 oDatos := NIL

 DEFINE STRUCT oDatos
   STRUCT FIELD cEmiNom   INIT ""
   STRUCT FIELD cEmiRFC   INIT ""
   STRUCT FIELD cExpedidoen INIT ""
   STRUCT FIELD cCalle INIT ""
   STRUCT FIELD cNoExt INIT ""
   STRUCT FIELD cColonia INIT ""
   STRUCT FIELD cMunicip INIT ""
   STRUCT FIELD cEstado INIT ""
   STRUCT FIELD cPais INIT ""
   STRUCT FIELD cCodPos INIT ""
   STRUCT FIELD cRegFisc INIT ""
   STRUCT FIELD cLugExp INIT ""

   STRUCT FIELD cRecNom   INIT ""
   STRUCT FIELD cRecRFC   INIT ""
   STRUCT FIELD cTipoCo   INIT ""
   STRUCT FIELD cFecha    INIT ""
   STRUCT FIELD cSerie    INIT ""
   STRUCT FIELD cFolio    INIT ""

   STRUCT FIELD cRCalle   INIT ""
   STRUCT FIELD cRNoExt   INIT ""
   STRUCT FIELD cRColonia INIT ""
   STRUCT FIELD cRMunicip INIT ""
   STRUCT FIELD cREstado  INIT ""
   STRUCT FIELD cRPais    INIT ""
   STRUCT FIELD cRCodPos  INIT ""

   STRUCT FIELD cMoneda   INIT ""
   STRUCT FIELD cTCambio  INIT ""
   STRUCT FIELD cfPago    INIT ""
   STRUCT FIELD cmPago    INIT ""
   STRUCT FIELD cCtaPago  INIT ""

   STRUCT FIELD nCantidad   INIT 0.0000
   STRUCT FIELD cDescrip  INIT ""
   STRUCT FIELD cUnidad  INIT ""
   STRUCT FIELD nPrecUnit   INIT 0.0000
   STRUCT FIELD nImporte   INIT 0.0000

   STRUCT FIELD nSubtot   INIT 0.0000
   STRUCT FIELD nDescto   INIT 0.0000
   STRUCT FIELD nTotIT    INIT 0.0000
   STRUCT FIELD nTotIR    INIT 0.0000
   STRUCT FIELD nTotal    INIT 0.0000

   STRUCT FIELD cOrden    INIT ""

 END STRUCT

 oDatos:Zap()

 aDatos := {}

 DO WHILE .T.
     oTagActual = oXmlIter:Next()

     If oTagActual != nil
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDatos, cKey, cValue, oTagActual:cName ) } )
     Else
         Exit
     Endif
 ENDDO

 FClose( hFile )

 oSay   := ARRAY(21)

 DEFINE DIALOG oDlg RESOURCE "VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE
  REDEFINE SAY oSay[01] PROMPT oDatos:cEmiNom      ID 101 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[02] PROMPT oDatos:cEmiRFC      ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[03] PROMPT oDatos:cCalle       ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[04] PROMPT oDatos:cExpedidoen  ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[05] PROMPT oDatos:cRegFisc     ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[06] PROMPT oDatos:cLugExp     ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[07] PROMPT oDatos:cFecha     ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[08] PROMPT oDatos:cSerie     ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[09] PROMPT oDatos:cFolio     ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[10] PROMPT oDatos:cFPago     ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[11] PROMPT oDatos:cMPago     ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[12] PROMPT oDatos:cCtaPago   ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[13] PROMPT oDatos:cRecNom    ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[14] PROMPT oDatos:cRecRFC    ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[15] PROMPT oDatos:cRCalle    ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
           HEADERS 'Cantidad','Descripción','Unidad','P. Unitario','Importe' ;
           COLSIZES 60,260,85,85,85 ;
           PICTURES "999"           ,;
                    "@X"            ,;
                    "@X"            ,;
                    "999,999.99"      ,;
                    "999,999,999.99"   ;
           ARRAY aDatos FOOTERS AUTOCOLS

    WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle:=LINESTYLE_LIGHTGRAY
      :nRowDividerStyle:=LINESTYLE_LIGHTGRAY

      :bClrSel       := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic      := .f.
      :lContrastClr  := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo

      :SetArray(aDatos)

      oBrw:Refresh()
    END

    REDEFINE SAY oSay[16] PROMPT oDatos:cMoneda  ID 121 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[17] PROMPT oDatos:cTCambio ID 122 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[18] PROMPT oDatos:nSubtot  ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[19] PROMPT oDatos:nDescto  ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[20] PROMPT oDatos:nTotIT   ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[21] PROMPT oDatos:nTotal   ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
 ACTIVATE DIALOG oDlg CENTER  //ON INIT Inicia()
RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( poDatos, pcKey, pcValue, pcTagName )
 //? cTagName, cTagData, pcKey, pcValue
 //? pcTagName, pcKey, pcValue

 IF        UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="MONEDA";                    poDatos:cMoneda  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="TIPOCAMBIO";                poDatos:cTCambio := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FECHA";                     poDatos:cFecha   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="SERIE";                     poDatos:cSerie   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FOLIO";                     poDatos:cFolio   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FORMADEPAGO";               poDatos:cfPago   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="METODODEPAGO";              poDatos:cmPago   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="NUMCTAPAGO";                poDatos:cCtaPago := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="LUGAREXPEDICION";           poDatos:cLugExp   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="SUBTOTAL";                  poDatos:nSubtot  := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="DESCUENTO";                 poDatos:nDescto  := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="TOTAL";                     poDatos:nTotal   := VAL(pcValue)

    // EMISOR
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EMISOR,EMISOR"           .AND. UPPER(ALLTRIM(pcKey))="NOMBRE";                    poDatos:cEmiNom  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EMISOR,EMISOR"           .AND. UPPER(ALLTRIM(pcKey))="RFC";                       poDatos:cEmiRFC  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))="CFDI:DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";           poDatos:cCalle  := pcValue   // Solucionado
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="NOEXTERIOR";      poDatos:cNoExt  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="COLONIA";         poDatos:cColonia := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="MUNICIPIO";       poDatos:cMunicip  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="ESTADO";          poDatos:cEstado  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="PAIS";            poDatos:cPais  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="CODIGOPOSTAL";    poDatos:cCodPos  := pcValue

    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EXPEDIDOEN,EXPEDIDOEN"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";                     poDatos:cExpedidoen  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:REGIMENFISCAL,REGIMENFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="REGIMEN";             poDatos:cRegFisc  := pcValue

    // RECEPTOR
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:RECEPTOR,RECEPTOR"     .AND. UPPER(ALLTRIM(pcKey))="NOMBRE";                    poDatos:cRecNom  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:RECEPTOR,RECEPTOR"     .AND. UPPER(ALLTRIM(pcKey))="RFC";                       poDatos:cRecRFC  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))="CFDI:DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";                     poDatos:cRCalle  := pcValue   // Solucionado
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="NOEXTERIOR";      poDatos:cRNoExt  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="COLONIA";         poDatos:cRColonia := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="MUNICIPIO";       poDatos:cRMunicip  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="ESTADO";          poDatos:cREstado  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="PAIS";            poDatos:cRPais  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="CODIGOPOSTAL";    poDatos:cRCodPos  := pcValue

    // IMPUESTOS
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:IMPUESTOS,IMPUESTOS"     .AND. UPPER(ALLTRIM(pcKey))="TOTALIMPUESTOSTRASLADADOS"; poDatos:nTotIT   := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:IMPUESTOS,IMPUESTOS"     .AND. UPPER(ALLTRIM(pcKey))="TOTALIMPUESTOSRETENIDOS";   poDatos:nTotIR   := VAL(pcValue)

    // Conceptos
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="CANTIDAD";                 poDatos:nCantidad := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="DESCRIPCION";              poDatos:cDescrip := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="UNIDAD";                   poDatos:cUnidad := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="VALORUNITARIO";            poDatos:nPrecUnit := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="IMPORTE";                  poDatos:nImporte := VAL(pcValue)

    // Carga aDatos en arreglo para TXBrowse
    AADD(aDatos, { poDatos:nCantidad ,;
                   poDatos:cDescrip  ,;
                   poDatos:cUnidad   ,;
                   poDatos:nPrecUnit ,;
                   poDatos:nImporte    })

 ENDIF
RETURN(NIL)

Saludos y gracias los que me ayudaron.

Atte: Adrian C. C.
acc69@hotmail.com
derpipu
Posts: 93
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico
Contact:

Re: Visor o leer XML...(Solucionado)

Post by derpipu »

Adrian, me da gusto que haya salido y que ademas nos retroalimentes con tu colaboracion corregida, y asi nos servira mucho a todos...
Luis Fernando Rubio Rubio
User avatar
wilsongamboa
Posts: 439
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Visor o leer XML...(Solucionado)

Post by wilsongamboa »

Adrian gracias por ponerlo al alcance de todos
seria mucha molestia si posteas el archivo de recursos .rc ?

saludos cordiales
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML...(Solucionado)

Post by ACC69 »

wilsongamboa wrote:Adrian gracias por ponerlo al alcance de todos
seria mucha molestia si posteas el archivo de recursos .rc ?

saludos cordiales
Hola Ing. Luis Fernando, gracias a ti, por la clase y la rutina de extraer datos, que por cierto, no me sabia de esa clase maravillosa TArray que te crea por la nube temporal ,se podria decir :) , es muy buena sin necesidad de crear dbf temporal, que es lo que tenia en mente, pero no fue necesario por la clase de TArray,aunque no tenga ejemplos de usar esta clase,pero se te agradece Ing. Luis Fernando.

Saludos .

Hola Wilson te paso el archivo visor_xml.rc creado desde Pelles C, que podras descargar o copiar y pegarlo a tu archivo .rc.

https://dl.dropboxusercontent.com/u/110 ... or_XML.rar
https://dl.dropboxusercontent.com/u/110 ... or_XML.rar

Code: Select all

// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

VISOR_XML DIALOGEX DISCARDABLE 6, 18, 574, 342
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Dialog"
FONT 8, "Tahoma", 0, 0, 1
{
  CONTROL "Datos Emisor y Receptor", 4001, "Button", BS_GROUPBOX, 0, 0, 592, 84
  CONTROL "", 4002, "Button", BS_GROUPBOX, 0, 84, 556, 180
  CONTROL "RFC:", 4003, "Static", WS_GROUP, 4, 16, 40, 8
  CONTROL "Dirección:", 4004, "Static", WS_GROUP, 4, 24, 40, 8
  CONTROL "Expedido en:", 4005, "Static", WS_GROUP, 4, 36, 44, 8
  CONTROL "Regimen Fiscal:", 4006, "Static", WS_GROUP, 4, 48, 52, 8
  CONTROL "Lugar de Expedicion:", 4007, "Static", WS_GROUP, 4, 60, 68, 8
  CONTROL "Telefono:", 4008, "Static", WS_GROUP, 4, 72, 40, 8
  CONTROL "Correo:", 4009, "Static", WS_GROUP, 128, 72, 40, 8
  CONTROL "Fecha:", 4010, "Static", WS_GROUP, 344, 8, 40, 8
  CONTROL "Serie:", 4011, "Static", WS_GROUP, 344, 20, 40, 8
  CONTROL "Folio:", 4012, "Static", WS_GROUP, 348, 36, 40, 8
  CONTROL "Forma de Pago:", 4013, "Static", WS_GROUP, 348, 48, 52, 8
  CONTROL "Metodo de Pago:", 4014, "Static", WS_GROUP, 348, 56, 56, 8
  CONTROL "No. de Cuenta:", 4015, "Static", WS_GROUP, 348, 68, 52, 8
  CONTROL "101", 101, "Static", WS_GROUP, 92, 4, 236, 8
  CONTROL "102", 102, "Static", WS_GROUP, 40, 16, 184, 8
  CONTROL "103", 103, "Static", WS_GROUP, 44, 24, 188, 8
  CONTROL "104", 104, "Static", WS_GROUP, 48, 36, 184, 8
  CONTROL "105", 105, "Static", WS_GROUP, 60, 48, 176, 8
  CONTROL "106", 106, "Static", WS_GROUP, 72, 60, 164, 8
  CONTROL "107", 107, "Static", WS_GROUP, 36, 72, 40, 8
  CONTROL "108", 108, "Static", WS_GROUP, 156, 72, 40, 8
  CONTROL "109", 109, "Static", WS_GROUP, 388, 8, 188, 8
  CONTROL "110", 110, "Static", WS_GROUP, 388, 20, 40, 8
  CONTROL "111", 111, "Static", WS_GROUP, 396, 36, 40, 8
  CONTROL "112", 112, "Static", WS_GROUP, 404, 48, 156, 8
  CONTROL "113", 113, "Static", WS_GROUP, 404, 56, 156, 8
  CONTROL "114", 114, "Static", WS_GROUP, 400, 68, 96, 8
  CONTROL "120", 120, "TXBrowse", WS_TABSTOP|0x00a00000, 4, 188, 422, 72
  CONTROL "", 4016, "Button", BS_GROUPBOX, 4, 268, 524, 72
  CONTROL "Moneda:", 4017, "Static", WS_GROUP, 8, 280, 40, 8
  CONTROL "Tipo de Cambio:", 4018, "Static", WS_GROUP, 8, 296, 40, 8
  CONTROL "SubTotal:", 4019, "Static", WS_GROUP, 220, 280, 40, 8
  CONTROL "Descto:", 4020, "Static", WS_GROUP, 220, 292, 40, 8
  CONTROL "Impto Retenido:", 4021, "Static", WS_GROUP, 220, 304, 56, 8
  CONTROL "I.V.A.:", 4022, "Static", WS_GROUP, 220, 316, 40, 8
  CONTROL "Total:", 4023, "Static", WS_GROUP, 220, 328, 40, 8
  CONTROL "121", 121, "Static", WS_GROUP, 48, 280, 40, 8
  CONTROL "122", 122, "Static", WS_GROUP, 48, 296, 40, 8
  CONTROL "123", 123, "Static", SS_RIGHT|WS_GROUP, 276, 280, 40, 8
  CONTROL "124", 124, "Static", SS_RIGHT|WS_GROUP, 276, 292, 40, 8
  CONTROL "125", 125, "Static", SS_RIGHT|WS_GROUP, 276, 304, 40, 8
  CONTROL "126", 126, "Static", SS_RIGHT|WS_GROUP, 276, 316, 40, 8
  CONTROL "127", 127, "Static", SS_RIGHT|WS_GROUP, 276, 328, 40, 8
  CONTROL "Cliente:", 4024, "Static", WS_GROUP, 4, 92, 40, 8
  CONTROL "R.F.C.:", 4025, "Static", WS_GROUP, 4, 108, 40, 8
  CONTROL "Dirección:", 4026, "Static", WS_GROUP, 4, 124, 40, 8
  CONTROL "115", 115, "Static", WS_GROUP, 40, 92, 272, 8
  CONTROL "116", 116, "Static", WS_GROUP, 40, 108, 64, 8
  CONTROL "117", 117, "Static", WS_GROUP, 40, 124, 272, 8
}

Saludos a todos y nuevamente gracias Ing. Luis Fernando.

Atte: Adrian C. C.
acc69@hotmail.com
User avatar
wilsongamboa
Posts: 439
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Visor o leer XML...(Solucionado)

Post by wilsongamboa »

Adrian muchas gracias

Wilson
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML...(Solucionado)

Post by ACC69 »

wilsongamboa wrote:Adrian muchas gracias

Wilson

De nada Wilson.
Saludos.


Mis estimados, para seleccion de archivos .xml, pongo imagen, y pequeñas modificaciones .

Imagen
Image

Codigo

Code: Select all

#include "FiveWin.ch"
#Include "xBrowse.ch"
#include "TArray.ch"

Static oDlg, oSay, oBrw, oDato, aDatos, oFnt1, oBtn
Static cDirec1, cDirec2

//------------------------------------------------------------------------------
FUNCTION PRINCIPAL()
 Local aGradBarSelFocus:= {{ 1, RGB(252,232,171) , RGB(248,195, 34) }}
 Local aGradBarSel     := {{ 1, RGB(252,235, 184), RGB(251,222,88) }}

 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetResDebug(.T.) // Al inicio ...

 oDato := NIL

 DEFINE STRUCT oDato
   // "Comprobante"
   STRUCT FIELD cVersion   INIT ""
   STRUCT FIELD cSerie     INIT ""
   STRUCT FIELD cFolio     INIT ""
   STRUCT FIELD cFecha     INIT ""
   STRUCT FIELD cfPago     INIT ""
   STRUCT FIELD cmPago     INIT ""
   STRUCT FIELD cCtaPago   INIT ""
   STRUCT FIELD cLugarExp  INIT ""
   STRUCT FIELD cMoneda    INIT ""
   STRUCT FIELD cTCambio   INIT ""
   STRUCT FIELD nSubtot    INIT 00.00
   STRUCT FIELD nDescto    INIT 00.00
   STRUCT FIELD nTotal     INIT 00.00

   // "Emisor"
   STRUCT FIELD EcNomb     INIT ""
   STRUCT FIELD EcRFC      INIT ""

   STRUCT FIELD EcCalle    INIT ""
   STRUCT FIELD EcNoExt    INIT ""
   STRUCT FIELD EcNoInt    INIT ""
   STRUCT FIELD EcColonia  INIT ""
   STRUCT FIELD EcLocalid  INIT ""
   STRUCT FIELD EcMunicip  INIT ""
   STRUCT FIELD EcEstado   INIT ""
   STRUCT FIELD EcPais     INIT ""
   STRUCT FIELD EcCodPos   INIT ""

   STRUCT FIELD EcRegFisc  INIT ""
   STRUCT FIELD EcExpedEn  INIT ""


   // "Receptor"
   STRUCT FIELD RcNomb     INIT ""
   STRUCT FIELD RcRFC      INIT ""

   STRUCT FIELD RcCalle    INIT ""
   STRUCT FIELD RcNoExt    INIT ""
   STRUCT FIELD RcNoInt    INIT ""
   STRUCT FIELD RcColonia  INIT ""
   STRUCT FIELD RcLocalid  INIT ""
   STRUCT FIELD RcMunicip  INIT ""
   STRUCT FIELD RcEstado   INIT ""
   STRUCT FIELD RcPais     INIT ""
   STRUCT FIELD RcCodPos   INIT ""

   // "Conceptos"
   STRUCT FIELD nCantidad  INIT 00.00
   STRUCT FIELD cDescrip   INIT ""
   STRUCT FIELD cNoIdentif INIT ""
   STRUCT FIELD cUnidad    INIT ""
   STRUCT FIELD nPrecUnit  INIT 00.00
   STRUCT FIELD nImporte   INIT 00.00

   // "Impuestos"
   STRUCT FIELD nTImpRet   INIT 00.00
   STRUCT FIELD nIVA       INIT 00.00

   STRUCT FIELD cOrden     INIT ""
 END STRUCT

 oDato:Zap()

 oSay   := ARRAY(22)
 aDatos := {{ "","","","","" }}
 oBtn   := ARRAY(2)

 DEFINE FONT oFnt1 NAME "Arial" SIZE 0,-14 BOLD

 DEFINE DIALOG oDlg RESOURCE "VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE
  REDEFINE SAY oSay[01] PROMPT oDato:EcNomB    ID 101 OF oDlg COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[02] PROMPT oDato:EcRFC     ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[03] PROMPT cDirec1         ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[04] PROMPT oDato:EcExpedEn ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[05] PROMPT oDato:EcRegFisc ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[06] PROMPT oDato:cLugarExp ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[07] PROMPT oDato:cFecha    ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[08] PROMPT oDato:cSerie    ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[09] PROMPT oDato:cFolio    ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[10] PROMPT oDato:cFPago    ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[11] PROMPT oDato:cMPago    ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[12] PROMPT oDato:cCtaPago  ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[13] PROMPT oDato:RcNomb    ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[14] PROMPT oDato:RcRFC     ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[15] PROMPT cDirec2         ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
           HEADERS 'Cantidad','Descripción','Unidad','P. Unitario','Importe' ;
           COLSIZES 60,260,85,85,85 ;
           PICTURES "999"           ,;
                    "@X"            ,;
                    "@X"            ,;
                    "999,999.99"      ,;
                    "999,999,999.99"   ;
           ARRAY aDatos FOOTERS AUTOCOLS

    WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle := LINESTYLE_LIGHTGRAY

      :bClrSel      := { || { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic     := .F.
      :lContrastClr := .F.  //para que no cambie color de texto automaticamente segun intensidad del fondo

     * :SetArray(aDatos)

     * oBrw:Refresh()
    END

    REDEFINE SAY oSay[16] PROMPT oDato:cMoneda  ID 121 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[17] PROMPT oDato:cTCambio ID 122 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[18] PROMPT oDato:nSubtot  ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nSubTotal
    REDEFINE SAY oSay[19] PROMPT oDato:nDescto  ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nDesCto
    REDEFINE SAY oSay[20] PROMPT oDato:nTImpRet ID 125 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTImpRet
    REDEFINE SAY oSay[21] PROMPT oDato:nIVA     ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nIVA
    REDEFINE SAY oSay[22] PROMPT oDato:nTotal   ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTotal

    REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Sel_XML()
    REDEFINE BUTTON oBtn[02] ID 202 OF oDlg  // ACTION Pendiente opcion de impresion y/o PDF
 ACTIVATE DIALOG oDlg CENTER  //ON INIT Inicia()
RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION Sel_XML()
 LOCAL cFile
 Local hFile, oXmlDoc, oXmlIter, oTagActual, cTagname

 cFile := cGetFile32("*.xml","Por favor Seleccione archivo XML")

 if Empty( cFile )
     return nil
 endif

 if ! "." $ cFile
      cFile += ".xml"
 endif

 if ! File( cFile )
      MsgStop( "Archivo no encontrado " + cFile )

      return nil
 endif

 hFile    := FOpen( cFile )
 oXmlDoc  := TXmlDocument():New( hFile )
 oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

 oDato:Blank()

 aDatos := {}

 DO WHILE .T.
     oTagActual := oXmlIter:Next()

     If oTagActual != nil
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDato, cKey, cValue, oTagActual:cName ) } )
     Else
         Exit
     Endif
 ENDDO

 FClose( hFile )

 cDirec1 := oDato:EcCalle+" "+oDato:EcNoExt+" "+oDato:EcColonia+" "+oDato:EcLocalid+" "+oDato:EcMunicip+" "+oDato:EcEstado+" "+oDato:EcPais+" "+oDato:EcCodPos
 cDirec2 := oDato:RcCalle+" "+oDato:RcNoExt+" "+oDato:RcColonia+" "+oDato:RcLocalid+" "+oDato:RcMunicip+" "+oDato:RcEstado+" "+oDato:RcPais+" "+oDato:RcCodPos

 AEval( oSay,{|o| o:Refresh()} )

 oBrw:SetArray(aDatos)
 oBrw:Refresh()
RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
 //? cTagName, cTagData, pcKey, pcValue
 //? pcTagName, pcKey, pcValue

      // "COMPROBANTE"
 IF      UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "VERSION";         oDatos:cVersion  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SERIE";           oDatos:cSerie    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FOLIO";           oDatos:cFolio    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FECHA";           oDatos:cFecha    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FORMADEPAGO";     oDatos:cfPago    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "METODODEPAGO";    oDatos:cmPago    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "NUMCTAPAGO";      oDatos:cCtaPago  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TIPOCAMBIO";      oDatos:cTCambio  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "MONEDA";          oDatos:cMoneda   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SUBTOTAL";        oDatos:nSubtot   := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "DESCUENTO";       oDatos:nDesCto   := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TOTAL";           oDatos:nTotal    := VAL(pcValue)

      // "EMISOR"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:EcNomb    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:EcRFC     := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:EcCalle   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:EcNoExt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:EcColonia := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:EcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:EcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:EcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:EcPais    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:EcCodPos  := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; oDatos:EcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; oDatos:EcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";    oDatos:EcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";      oDatos:EcPais    := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:REGIMENFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "REGIMEN"; oDatos:EcRegFisc := pcValue

      // "RECEPTOR"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:RcNomb := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:RcRFC  := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:RcCalle   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:RcNoExt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOINTERIOR";   oDatos:RcNoInt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:RcColonia := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:RcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:RcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:RcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:RcPais    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:RcCodPos  := pcValue

      // "Conceptos"  Para Browse
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "CANTIDAD";         oDatos:nCantidad  := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "DESCRIPCION";      oDatos:cDescrip   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "UNIDAD";           oDatos:cUnidad    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "VALORUNITARIO";    oDatos:nPrecUnit  := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "IMPORTE";          oDatos:nImporte   := VAL(pcValue)

         // Carga aDatos en arreglo para TXBrowse \\
         AADD(aDatos, { oDatos:nCantidad ,;
                        oDatos:cDescrip  ,;
                        oDatos:cUnidad   ,;
                        oDatos:nPrecUnit ,;
                        oDatos:nImporte    })

      // "IMPUESTOS"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS";   oDatos:nTImpRet := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA     := VAL(pcValue)
 ENDIF
RETURN(NIL)
Archivo .rc

Code: Select all

// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

VISOR_XML DIALOGEX DISCARDABLE 6, 18, 574, 398
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Dialog"
FONT 8, "Tahoma", 0, 0, 1
{
  CONTROL "Datos Emisor y Receptor", 4001, "Button", BS_GROUPBOX, 0, 0, 592, 84
  CONTROL "", 4002, "Button", BS_GROUPBOX, 0, 84, 556, 180
  CONTROL "RFC:", 4003, "Static", WS_GROUP, 4, 16, 40, 8
  CONTROL "Dirección:", 4004, "Static", WS_GROUP, 4, 24, 40, 8
  CONTROL "Expedido en:", 4005, "Static", WS_GROUP, 4, 36, 44, 8
  CONTROL "Regimen Fiscal:", 4006, "Static", WS_GROUP, 4, 48, 52, 8
  CONTROL "Lugar de Expedicion:", 4007, "Static", WS_GROUP, 4, 60, 68, 8
  CONTROL "Telefono:", 4008, "Static", WS_GROUP, 4, 72, 40, 8
  CONTROL "Correo:", 4009, "Static", WS_GROUP, 128, 72, 40, 8
  CONTROL "Fecha:", 4010, "Static", WS_GROUP, 344, 8, 40, 8
  CONTROL "Serie:", 4011, "Static", WS_GROUP, 344, 20, 40, 8
  CONTROL "Folio:", 4012, "Static", WS_GROUP, 348, 36, 40, 8
  CONTROL "Forma de Pago:", 4013, "Static", WS_GROUP, 348, 48, 52, 8
  CONTROL "Metodo de Pago:", 4014, "Static", WS_GROUP, 348, 56, 56, 8
  CONTROL "No. de Cuenta:", 4015, "Static", WS_GROUP, 348, 68, 52, 8
  CONTROL "101", 101, "Static", WS_GROUP, 84, 4, 256, 8
  CONTROL "102", 102, "Static", WS_GROUP, 40, 16, 184, 8
  CONTROL "103", 103, "Static", WS_GROUP, 44, 24, 296, 8
  CONTROL "104", 104, "Static", WS_GROUP, 48, 36, 184, 8
  CONTROL "105", 105, "Static", WS_GROUP, 60, 48, 176, 8
  CONTROL "106", 106, "Static", WS_GROUP, 72, 60, 164, 8
  CONTROL "107", 107, "Static", WS_GROUP, 36, 72, 40, 8
  CONTROL "108", 108, "Static", WS_GROUP, 156, 72, 40, 8
  CONTROL "109", 109, "Static", WS_GROUP, 388, 8, 188, 8
  CONTROL "110", 110, "Static", WS_GROUP, 388, 20, 40, 8
  CONTROL "111", 111, "Static", WS_GROUP, 396, 36, 40, 8
  CONTROL "112", 112, "Static", WS_GROUP, 404, 48, 156, 8
  CONTROL "113", 113, "Static", WS_GROUP, 404, 56, 156, 8
  CONTROL "114", 114, "Static", WS_GROUP, 400, 68, 96, 8
  CONTROL "120", 120, "TXBrowse", WS_TABSTOP|0x00a00000, 4, 188, 422, 72
  CONTROL "", 4016, "Button", BS_GROUPBOX, 4, 260, 524, 72
  CONTROL "Moneda:", 4017, "Static", WS_GROUP, 8, 272, 40, 8
  CONTROL "Tipo de Cambio:", 4018, "Static", WS_GROUP, 8, 288, 40, 8
  CONTROL "SubTotal:", 4019, "Static", WS_GROUP, 312, 272, 40, 8
  CONTROL "Descto:", 4020, "Static", WS_GROUP, 312, 284, 40, 8
  CONTROL "Impto Retenido:", 4021, "Static", WS_GROUP, 312, 296, 56, 8
  CONTROL "I.V.A.:", 4022, "Static", WS_GROUP, 312, 308, 40, 8
  CONTROL "Total:", 4023, "Static", WS_GROUP, 312, 320, 40, 8
  CONTROL "121", 121, "Static", WS_GROUP, 48, 272, 40, 8
  CONTROL "122", 122, "Static", WS_GROUP, 48, 288, 40, 8
  CONTROL "123", 123, "Static", SS_RIGHT|WS_GROUP, 368, 272, 40, 8
  CONTROL "124", 124, "Static", SS_RIGHT|WS_GROUP, 368, 284, 40, 8
  CONTROL "125", 125, "Static", SS_RIGHT|WS_GROUP, 368, 296, 40, 8
  CONTROL "126", 126, "Static", SS_RIGHT|WS_GROUP, 368, 308, 40, 8
  CONTROL "127", 127, "Static", SS_RIGHT|WS_GROUP, 368, 320, 40, 8
  CONTROL "Cliente:", 4024, "Static", WS_GROUP, 4, 92, 40, 8
  CONTROL "R.F.C.:", 4025, "Static", WS_GROUP, 4, 108, 40, 8
  CONTROL "Dirección:", 4026, "Static", WS_GROUP, 4, 124, 40, 8
  CONTROL "115", 115, "Static", WS_GROUP, 40, 92, 272, 8
  CONTROL "116", 116, "Static", WS_GROUP, 40, 108, 64, 8
  CONTROL "117", 117, "Static", WS_GROUP, 40, 124, 396, 8
  CONTROL "XML", 201, "Button", WS_TABSTOP, 40, 356, 50, 14
  CONTROL "Imprimir", 202, "Button", WS_TABSTOP, 104, 356, 50, 14
}

 
Saludos y buen dia.

Atte: Adrian C. C.
derpipu
Posts: 93
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico
Contact:

Re: Visor o leer XML...(Solucionado)

Post by derpipu »

Adrian, si tienes un correo al que te lo pueda enviar, te envio con todo y ejemplos...

Saludos
Luis Fernando Rubio Rubio
derpipu
Posts: 93
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico
Contact:

Re: Visor o leer XML...(Solucionado)

Post by derpipu »

Hola, ya subi a mi pagina la TArray que utilizo con todo y ejemplos y todo

La direccion es: http://www.csoluciones.com.mx/fivewin/

Espero les sea de utilidad...

Saludos
Luis Fernando Rubio Rubio
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visor o leer XML...(Solucionado)

Post by ACC69 »

derpipu wrote:Hola, ya subi a mi pagina la TArray que utilizo con todo y ejemplos y todo

La direccion es: http://www.csoluciones.com.mx/fivewin/

Espero les sea de utilidad...

Saludos

Hola Ing, Luis Fernando, gracias muy amable por los ejemplos, yo aqui sigo con la rutina de xml, que me tope con un detalle, que no me habia fijado, cuando son archivos cfd, no me los lee, solo archivos de CFDI: y por lo tanto, tuve que hacer modificaciones a la rutina y al parecer ya ahora, si me lee, dos tipos de cfds, CFD version 1,2 y CFDi version 3.20

Si es comprobante que me lea, sino de otra manera si es CFDI:Comprobante, al igual que me los lea.

Copio la rutina,que tuve que modificar y gracias de nuevo Ing. Luis Fernando.

Ahora lo que se me presenta una duda, como saber en la misma rutina que al leer los datos, detecte el CFD fue alterado. Verifica tus datos..! se podra saber ? :?: :roll:

Si alguien la puede mejorar, esta rutina, sera bienvenida

Code: Select all

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
 Local lAlterado := .T., lProcesa := .F.
 LOCAL aVar

 //? cTagName, cTagData, pcKey, pcValue
 //? pcTagName, pcKey, pcValue

 pcTagName := UPPER(ALLTRIM(pcTagName))
 pcKey     := UPPER(ALLTRIM(pcKey))

      // "COMPROBANTE"
 IF      pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "VERSION";         oDatos:cVersion  := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "SERIE";           oDatos:cSerie    := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FOLIO";           oDatos:cFolio    := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FECHA";           oDatos:cFecha    := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FORMADEPAGO";     oDatos:cfPago    := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "METODODEPAGO";    oDatos:cmPago    := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "NUMCTAPAGO";      oDatos:cCtaPago  := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "TIPOCAMBIO";      oDatos:cTCambio  := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "MONEDA";          oDatos:cMoneda   := pcValue
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "SUBTOTAL";        oDatos:nSubtot   := VAL(pcValue)
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "DESCUENTO";       oDatos:nDesCto   := VAL(pcValue)
  ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "TOTAL";           oDatos:nTotal    := VAL(pcValue)

      // "EMISOR"
  ELSEIF pcTagName = IF(pcTagName="EMISOR","EMISOR","CFDI:EMISOR") .AND. pcKey = "NOMBRE"; oDatos:EcNomb := pcValue
  ELSEIF pcTagName = IF(pcTagName="EMISOR","EMISOR","CFDI:EMISOR") .AND. pcKey = "RFC";    oDatos:EcRFC  := pcValue

  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "CALLE";        oDatos:EcCalle   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "NOEXTERIOR";   oDatos:EcNoExt   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "NOINTERIOR";   oDatos:EcNoInt   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "COLONIA";      oDatos:EcColonia := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "LOCALIDAD";    oDatos:EcLocalid := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "MUNICIPIO";    oDatos:EcMunicip := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "ESTADO";       oDatos:EcEstado  := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "PAIS";         oDatos:EcPais    := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "CODIGOPOSTAL"; oDatos:EcCodPos  := pcValue

  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "CALLE";      oDatos:EcCalle1   := pcValue
  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "NOEXTERIOR"; oDatos:EcNoExt1   := pcValue
  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "LOCALIDAD";  oDatos:EcLocalid1 := pcValue
  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "MUNICIPIO";  oDatos:EcMunicip1 := pcValue
  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "ESTADO";     oDatos:EcEstado1  := pcValue
  ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "PAIS";       oDatos:EcPais1    := pcValue

  ELSEIF pcTagName = IF(pcTagName="REGIMENFISCAL","REGIMENFISCAL","CFDI:REGIMENFISCAL") .AND. pcKey = "REGIMEN"; oDatos:EcRegFisc := pcValue

      // "RECEPTOR"
  ELSEIF pcTagName = IF(pcTagName="RECEPTOR","RECEPTOR","CFDI:RECEPTOR") .AND. pcKey = "NOMBRE";       oDatos:RcNomb := pcValue
  ELSEIF pcTagName = IF(pcTagName="RECEPTOR","RECEPTOR","CFDI:RECEPTOR") .AND. pcKey = "RFC";          oDatos:RcRFC  := pcValue

  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "CALLE";        oDatos:RcCalle   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "NOEXTERIOR";   oDatos:RcNoExt   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "NOINTERIOR";   oDatos:RcNoInt   := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "COLONIA";      oDatos:RcColonia := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "LOCALIDAD";    oDatos:RcLocalid := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "MUNICIPIO";    oDatos:RcMunicip := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "ESTADO";       oDatos:RcEstado  := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "PAIS";         oDatos:RcPais    := pcValue
  ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "CODIGOPOSTAL"; oDatos:RcCodPos  := pcValue

      // "CONCEPTO"  Para Browse
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "CANTIDAD";         oDatos:nCantidad  := VAL(pcValue)
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "DESCRIPCION";      oDatos:cDescrip   := pcValue
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "UNIDAD";           oDatos:cUnidad    := pcValue
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "VALORUNITARIO";    oDatos:nPrecUnit  := VAL(pcValue)
  ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "IMPORTE";          oDatos:nImporte   := VAL(pcValue)

         // Carga aDatos en arreglo para TXBrowse \\
         AADD(aDatos, { oDatos:nCantidad ,;
                        oDatos:cDescrip  ,;
                        oDatos:cUnidad   ,;
                        oDatos:nPrecUnit ,;
                        oDatos:nImporte    })

      // "IMPUESTOS"
  ELSEIF UPPER(ALLTRIM(pcTagName))=IF(pcTagName="IMPUESTOS","IMPUESTOS","CFDI:IMPUESTOS") .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS";   oDatos:nTImpRet := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName))=IF(pcTagName="IMPUESTOS","IMPUESTOS","CFDI:IMPUESTOS") .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA     := VAL(pcValue)
 ENDIF
RETURN(NIL)
Si alguien la puede mejorar, esta rutina, sera bienvenida

Saludos y buen dia Ing. Luis Fernando.

Atte: Adrian C. C.
User avatar
juan_arroyo_t
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Visor o leer XML...(Solucionado)

Post by juan_arroyo_t »

Adrian

Desarrolle tu ejemplo, te pongo la imagen

Este es el link de la imagen

https://1drv.ms/u/s!AgM94kAKnz9CjnsbZvIMAF9cp9CA

En el browse que contiene dos partidas, los datos de unidad y precio unitario de la primera partida me los ponde en la segunda

Este es mi codigo

Code: Select all

#include "fivewin.ch"
#include "tarray.ch"

Static oDlg, oSay, oBrw, oDato, aDatos, oFnt1, oBtn
Static cDirec1, cDirec2

//------------------------------------------------------------------------------
FUNCTION main()
   Local aGradBarSelFocus:= {{ 1, RGB(252,232,171) , RGB(248,195, 34) }}
   Local aGradBarSel     := {{ 1, RGB(252,235, 184), RGB(251,222,88) }}

   SET EXCLUSIVE OFF
   SET 3DLOOK ON
   SET DELETED ON
   SET CONFIRM ON
   SET EPOCH TO 1969
   SET DATE BRITISH

   SetResDebug(.T.) // Al inicio ...

   oDato := NIL

   DEFINE STRUCT oDato
      // "Comprobante"
      STRUCT FIELD cVersion   INIT ""
      STRUCT FIELD cSerie     INIT ""
      STRUCT FIELD cFolio     INIT ""
      STRUCT FIELD cFecha     INIT ""
      STRUCT FIELD cfPago     INIT ""
      STRUCT FIELD cmPago     INIT ""
      STRUCT FIELD cCtaPago   INIT ""
      STRUCT FIELD cLugarExp  INIT ""
      STRUCT FIELD cMoneda    INIT ""
      STRUCT FIELD cTCambio   INIT ""
      STRUCT FIELD nSubtot    INIT 00.00
      STRUCT FIELD nDescto    INIT 00.00
      STRUCT FIELD nTotal     INIT 00.00

      // "Emisor"
      STRUCT FIELD EcNomb     INIT ""
      STRUCT FIELD EcRFC      INIT ""

      STRUCT FIELD EcCalle    INIT ""
      STRUCT FIELD EcNoExt    INIT ""
      STRUCT FIELD EcNoInt    INIT ""
      STRUCT FIELD EcColonia  INIT ""
      STRUCT FIELD EcLocalid  INIT ""
      STRUCT FIELD EcMunicip  INIT ""
      STRUCT FIELD EcEstado   INIT ""
      STRUCT FIELD EcPais     INIT ""
      STRUCT FIELD EcCodPos   INIT ""

      STRUCT FIELD EcRegFisc  INIT ""
      STRUCT FIELD EcExpedEn  INIT ""


      // "Receptor"
      STRUCT FIELD RcNomb     INIT ""
      STRUCT FIELD RcRFC      INIT ""

      STRUCT FIELD RcCalle    INIT ""
      STRUCT FIELD RcNoExt    INIT ""
      STRUCT FIELD RcNoInt    INIT ""
      STRUCT FIELD RcColonia  INIT ""
      STRUCT FIELD RcLocalid  INIT ""
      STRUCT FIELD RcMunicip  INIT ""
      STRUCT FIELD RcEstado   INIT ""
      STRUCT FIELD RcPais     INIT ""
      STRUCT FIELD RcCodPos   INIT ""

      // "Conceptos"
      STRUCT FIELD nCantidad  INIT 00.00
      STRUCT FIELD cDescrip   INIT ""
      STRUCT FIELD cNoIdentif INIT ""
      STRUCT FIELD cUnidad    INIT ""
      STRUCT FIELD nPrecUnit  INIT 00.00
      STRUCT FIELD nImporte   INIT 00.00

      // "Impuestos"
      STRUCT FIELD nTImpRet   INIT 00.00
      STRUCT FIELD nIVA       INIT 00.00

      STRUCT FIELD cOrden     INIT ""
   END STRUCT

   oDato:Zap()

   oSay   := ARRAY(22)
   aDatos := {{ "","","","","" }}
   oBtn   := ARRAY(2)

   DEFINE FONT oFnt1 NAME "Arial" SIZE 0,-14 BOLD

   DEFINE DIALOG oDlg RESOURCE "DLG_VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE

   REDEFINE SAY oSay[01] PROMPT oDato:EcNomB    ID 101 OF oDlg COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[02] PROMPT oDato:EcRFC     ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[03] PROMPT cDirec1         ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[04] PROMPT oDato:EcExpedEn ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[05] PROMPT oDato:EcRegFisc ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[06] PROMPT oDato:cLugarExp ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

   REDEFINE SAY oSay[07] PROMPT oDato:cFecha    ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[08] PROMPT oDato:cSerie    ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[09] PROMPT oDato:cFolio    ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[10] PROMPT oDato:cFPago    ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[11] PROMPT oDato:cMPago    ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[12] PROMPT oDato:cCtaPago  ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

   REDEFINE SAY oSay[13] PROMPT oDato:RcNomb    ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[14] PROMPT oDato:RcRFC     ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
   REDEFINE SAY oSay[15] PROMPT cDirec2         ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

   REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
            HEADERS 'Cantidad','Descripción','Unidad','P. Unitario','Importe' ;
            COLSIZES 60,260,85,85,85 ;
            PICTURES "999"           ,;
                     "@X"            ,;
                     "@X"            ,;
                     "999,999.99"      ,;
                     "999,999,999.99"   ;
            ARRAY aDatos FOOTERS AUTOCOLS

      WITH OBJECT oBrw
         :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
         :nColDividerStyle := LINESTYLE_LIGHTGRAY
         :nRowDividerStyle := LINESTYLE_LIGHTGRAY

         :bClrSel      := { || { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
         :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
         :lKinetic     := .F.
         :lContrastClr := .F.  //para que no cambie color de texto automaticamente segun intensidad del fondo

         :SetArray(oDato:aDatos)

         //:Refresh()
      END

      REDEFINE SAY oSay[16] PROMPT oDato:cMoneda  ID 121 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
      REDEFINE SAY oSay[17] PROMPT oDato:cTCambio ID 122 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
      REDEFINE SAY oSay[18] PROMPT oDato:nSubtot  ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nSubTotal
      REDEFINE SAY oSay[19] PROMPT oDato:nDescto  ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nDesCto
      REDEFINE SAY oSay[20] PROMPT oDato:nTImpRet ID 125 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTImpRet
      REDEFINE SAY oSay[21] PROMPT oDato:nIVA     ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nIVA
      REDEFINE SAY oSay[22] PROMPT oDato:nTotal   ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTotal

      REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Sel_XML()
      REDEFINE BUTTON oBtn[02] ID 202 OF oDlg  // ACTION Pendiente opcion de impresion y/o PDF

   ACTIVATE DIALOG oDlg CENTER  //ON INIT Inicia()

RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION Sel_XML()
   LOCAL cFile
   Local hFile, oXmlDoc, oXmlIter, oTagActual, cTagname

   cFile := cGetFile32("*.xml","Por favor Seleccione archivo XML")

   if Empty( cFile )
      return nil
   endif

   if ! "." $ cFile
      cFile += ".xml"
   endif

   if ! File( cFile )
      MsgStop( "Archivo no encontrado " + cFile )
      return nil
   endif

   hFile    := FOpen( cFile )
   oXmlDoc  := TXmlDocument():New( hFile )
   oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

   oDato:Blank()

   aDatos := {}

   DO WHILE .T.

      oTagActual := oXmlIter:Next()

      If oTagActual != nil
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDato, cKey, cValue, oTagActual:cName ) } )
      Else
         Exit
      Endif
   ENDDO

   FClose( hFile )

   cDirec1 := oDato:EcCalle+" "+oDato:EcNoExt+" "+oDato:EcColonia+" "+oDato:EcLocalid+" "+oDato:EcMunicip+" "+oDato:EcEstado+" "+oDato:EcPais+" "+oDato:EcCodPos
   cDirec2 := oDato:RcCalle+" "+oDato:RcNoExt+" "+oDato:RcColonia+" "+oDato:RcLocalid+" "+oDato:RcMunicip+" "+oDato:RcEstado+" "+oDato:RcPais+" "+oDato:RcCodPos

   AEval( oSay,{|o| o:Refresh()} )

   oBrw:SetArray(aDatos)
   oBrw:Refresh()

RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
   //? oDatos, pcKey, pcValue, pcTagName


   // "COMPROBANTE"
   IF        UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "VERSION";         oDatos:cVersion  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SERIE";           oDatos:cSerie    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FOLIO";           oDatos:cFolio    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FECHA";           oDatos:cFecha    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FORMADEPAGO";     oDatos:cfPago    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "METODODEPAGO";    oDatos:cmPago    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "NUMCTAPAGO";      oDatos:cCtaPago  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TIPOCAMBIO";      oDatos:cTCambio  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "MONEDA";          oDatos:cMoneda   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SUBTOTAL";        oDatos:nSubtot   := VAL(pcValue)
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "DESCUENTO";       oDatos:nDesCto   := VAL(pcValue)
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TOTAL";           oDatos:nTotal    := VAL(pcValue)

      // "EMISOR"
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:EcNomb    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:EcRFC     := pcValue

      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:EcCalle   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:EcNoExt   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:EcColonia := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:EcLocalid := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:EcMunicip := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:EcEstado  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:EcPais    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:EcCodPos  := pcValue

      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; oDatos:EcLocalid := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; oDatos:EcMunicip := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";    oDatos:EcEstado  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";      oDatos:EcPais    := pcValue

      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:REGIMENFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "REGIMEN"; oDatos:EcRegFisc := pcValue

      // "RECEPTOR"
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:RcNomb := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:RcRFC  := pcValue

      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:RcCalle   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:RcNoExt   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOINTERIOR";   oDatos:RcNoInt   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:RcColonia := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:RcLocalid := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:RcMunicip := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:RcEstado  := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:RcPais    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:RcCodPos  := pcValue

      // "Conceptos"  Para Browse
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "CANTIDAD";         oDatos:nCantidad  := VAL(pcValue)
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "DESCRIPCION";      oDatos:cDescrip   := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "UNIDAD";           oDatos:cUnidad    := pcValue
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "VALORUNITARIO";    oDatos:nPrecUnit  := VAL(pcValue)
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "IMPORTE";          oDatos:nImporte   := VAL(pcValue)

      // Carga aDatos en arreglo para TXBrowse \\
      AADD(aDatos, { oDatos:nCantidad ,;
                     oDatos:cDescrip  ,;
                     oDatos:cUnidad   ,;
                     oDatos:nPrecUnit ,;
                     oDatos:nImporte } )

      // "IMPUESTOS"
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS";   oDatos:nTImpRet := VAL(pcValue)
      ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA     := VAL(pcValue)

   ENDIF

RETURN(NIL)

//------------------------------------------------------------------------------

// FIN DE : MAIN.PRG
De antemano muchas gracias por tu ayuda

Saludos
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Visor o leer XML...(Solucionado)

Post by acuellar »

Esitmado Derpipu

No funciona el Link de descarga.
Saludos,

Adhemar C.
Post Reply