Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2017
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 21
jourdan Va por buen camino
leer nodo tfd de un cfdi xml

Hola a todos, alguien sabe como puedo leer el nodo tfd de un comprobante fiscal digital de México.
Lo que estoy buscando es obtener el valor UUID que esta en ese nodo.
Ya logre leer los demas valores del archivo xml usando xml data binding y un documento xmldocument pero no logro accesar el nodo tfd en particular

Ejemplo del nodo:

<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" FechaTimbrado="2017-03-01T14:00:38" UUID="BD9FF401-FXB9-11E6-8B61-00166D014007" noCertificadoSAT="00001000000403557578" selloSAT="XK/wZ07qqTewD+2/eWO/p8S/RIkpRdmxWL/z+T71KPgdMtBg9vGDLDF7nkRVOzWcS+XAYhvpk1FD2nOxr+/5XgijTKNbArvoW/JroP6nsGrj4kndNe1wh+pv9iQVHXInob7DLPw03KEMWPjTEm2Oa/e4e5l0BPKNrdwBMYY3LT4AcOuU30ilF7Q5fPiFYt0JSVx0CS/h3JtzhLthuttUrjiEKnGQqs5Sh8jKfsDVjnfxMFZDeFWp+5TtV7+F9o6Z+iYpcBGNUVFc/IZ3+/JMUmCp7uSZj5po5Zs0aQN+kmzft3m6TiiUQEvL3+vKWCUhzb6SoA0vxsdroCrclAbWL4Hg==" selloCFD="VQWrJlCa5u96NfNgHmImrz2eIGWXr/TD8KJDC3aH/IRH0JnrGA1XAsQre1spHH9NfxJe9QkVXk6JX2wwE8iLcG4YPz/nxC2mO8mU8IC+J5Wk/QzhoQhNTB0iGepOx8l5sQRYZPpaHjfI0xy3cpxBuW0qAvBy3bRiuQG5Vgri6hc=" version="1.0" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd"/>

De antemano muchas gracias y saludos
__________________
Alejandro Jourdan
Responder Con Cita
  #2  
Antiguo 08-03-2017
tmsanchez tmsanchez is offline
Miembro
 
Registrado: mar 2004
Ubicación: Mexico
Posts: 67
Poder: 21
tmsanchez Va por buen camino
Que tal.

Probablemente esto te sirva:

Código Delphi [-]
procedure TfrmPrincipal.generaPdf(archivo: String);
var
    recibo: IXMLComprobante;
    timbreFiscal: IXMLTimbreFiscalDigital;
    XMLDocument1: TXMLDocument;  
begin
  // cargar el comprogante a partir del nombre del archivo
  recibo := LoadComprobante(archivo);

  // obtener el nodo del timbre fiscal
  XMLDocument1.Xml.Text := recibo.Complemento.ChildNodes.FindNode('tfd:TimbreFiscalDigital', '').Xml;
  XMLDocument1.Active := True;
  timbreFiscal := GetTimbreFiscalDigital(XMLDocument1);

  showMessage(timbreFiscal.UUID);
end;
Responder Con Cita
  #3  
Antiguo 08-03-2017
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 21
jourdan Va por buen camino
Hola, es exactamente lo que estoy buscando peor no logre que funcionara el código.

La variable IXMLTimbreFiscalDigital no la reconoce!

Hay alguna otra unidad que hay que registrar?

Muchas gracias por tu ayuda
__________________
Alejandro Jourdan
Responder Con Cita
  #4  
Antiguo 08-03-2017
tmsanchez tmsanchez is offline
Miembro
 
Registrado: mar 2004
Ubicación: Mexico
Posts: 67
Poder: 21
tmsanchez Va por buen camino
Te paso el código de la unidad TimbreFiscalDigital:

Código Delphi [-]

{**********************************************************************************************}
{                                                                                              }
{                                       XML Data Binding                                       }
{                                                                                              }
{         Generated on: 24/04/2014 11:29:42 p.m.                                               }
{       Generated from: CFDI3.2\TimbreFiscalDigital.xsd   }
{                                                                                              }
{**********************************************************************************************}

unit TimbreFiscalDigital;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLTimbreFiscalDigital = interface;

{ IXMLTimbreFiscalDigital }

  IXMLTimbreFiscalDigital = interface(IXMLNode)
    ['{366D5D21-F94B-4BCB-9724-A79988C03709}']
    { Property Accessors }
    function Get_Version: UnicodeString;
    function Get_UUID: UnicodeString;
    function Get_FechaTimbrado: UnicodeString;
    function Get_SelloCFD: UnicodeString;
    function Get_NoCertificadoSAT: UnicodeString;
    function Get_SelloSAT: UnicodeString;
    procedure Set_Version(Value: UnicodeString);
    procedure Set_UUID(Value: UnicodeString);
    procedure Set_FechaTimbrado(Value: UnicodeString);
    procedure Set_SelloCFD(Value: UnicodeString);
    procedure Set_NoCertificadoSAT(Value: UnicodeString);
    procedure Set_SelloSAT(Value: UnicodeString);
    { Methods & Properties }
    property Version: UnicodeString read Get_Version write Set_Version;
    property UUID: UnicodeString read Get_UUID write Set_UUID;
    property FechaTimbrado: UnicodeString read Get_FechaTimbrado write Set_FechaTimbrado;
    property SelloCFD: UnicodeString read Get_SelloCFD write Set_SelloCFD;
    property NoCertificadoSAT: UnicodeString read Get_NoCertificadoSAT write Set_NoCertificadoSAT;
    property SelloSAT: UnicodeString read Get_SelloSAT write Set_SelloSAT;
  end;

{ Forward Decls }

  TXMLTimbreFiscalDigital = class;

{ TXMLTimbreFiscalDigital }

  TXMLTimbreFiscalDigital = class(TXMLNode, IXMLTimbreFiscalDigital)
  protected
    { IXMLTimbreFiscalDigital }
    function Get_Version: UnicodeString;
    function Get_UUID: UnicodeString;
    function Get_FechaTimbrado: UnicodeString;
    function Get_SelloCFD: UnicodeString;
    function Get_NoCertificadoSAT: UnicodeString;
    function Get_SelloSAT: UnicodeString;
    procedure Set_Version(Value: UnicodeString);
    procedure Set_UUID(Value: UnicodeString);
    procedure Set_FechaTimbrado(Value: UnicodeString);
    procedure Set_SelloCFD(Value: UnicodeString);
    procedure Set_NoCertificadoSAT(Value: UnicodeString);
    procedure Set_SelloSAT(Value: UnicodeString);
  end;

{ Global Functions }

function GetTimbreFiscalDigital(Doc: IXMLDocument): IXMLTimbreFiscalDigital;
function LoadTimbreFiscalDigital(const FileName: string): IXMLTimbreFiscalDigital;
function NewTimbreFiscalDigital: IXMLTimbreFiscalDigital;

const
  TargetNamespace = 'http://www.sat.gob.mx/TimbreFiscalDigital';

implementation

{ Global Functions }

function GetTimbreFiscalDigital(Doc: IXMLDocument): IXMLTimbreFiscalDigital;
begin
  Result := Doc.GetDocBinding('TimbreFiscalDigital', TXMLTimbreFiscalDigital, TargetNamespace) as IXMLTimbreFiscalDigital;
end;

function LoadTimbreFiscalDigital(const FileName: string): IXMLTimbreFiscalDigital;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('TimbreFiscalDigital', TXMLTimbreFiscalDigital, TargetNamespace) as IXMLTimbreFiscalDigital;
end;

function NewTimbreFiscalDigital: IXMLTimbreFiscalDigital;
begin
  Result := NewXMLDocument.GetDocBinding('TimbreFiscalDigital', TXMLTimbreFiscalDigital, TargetNamespace) as IXMLTimbreFiscalDigital;
end;

{ TXMLTimbreFiscalDigital }

function TXMLTimbreFiscalDigital.Get_Version: UnicodeString;
begin
  Result := AttributeNodes['version'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_Version(Value: UnicodeString);
begin
  SetAttribute('version', Value);
end;

function TXMLTimbreFiscalDigital.Get_UUID: UnicodeString;
begin
  Result := AttributeNodes['UUID'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_UUID(Value: UnicodeString);
begin
  SetAttribute('UUID', Value);
end;

function TXMLTimbreFiscalDigital.Get_FechaTimbrado: UnicodeString;
begin
  Result := AttributeNodes['FechaTimbrado'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_FechaTimbrado(Value: UnicodeString);
begin
  SetAttribute('FechaTimbrado', Value);
end;

function TXMLTimbreFiscalDigital.Get_SelloCFD: UnicodeString;
begin
  Result := AttributeNodes['selloCFD'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_SelloCFD(Value: UnicodeString);
begin
  SetAttribute('selloCFD', Value);
end;

function TXMLTimbreFiscalDigital.Get_NoCertificadoSAT: UnicodeString;
begin
  Result := AttributeNodes['noCertificadoSAT'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_NoCertificadoSAT(Value: UnicodeString);
begin
  SetAttribute('noCertificadoSAT', Value);
end;

function TXMLTimbreFiscalDigital.Get_SelloSAT: UnicodeString;
begin
  Result := AttributeNodes['selloSAT'].Text;
end;

procedure TXMLTimbreFiscalDigital.Set_SelloSAT(Value: UnicodeString);
begin
  SetAttribute('selloSAT', Value);
end;

end.
Responder Con Cita
  #5  
Antiguo 08-03-2017
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 21
jourdan Va por buen camino
Muchisimas gracias, me pongo a hacer pruebas inmediatamente!
Saludos
__________________
Alejandro Jourdan
Responder Con Cita
  #6  
Antiguo 08-03-2017
tmsanchez tmsanchez is offline
Miembro
 
Registrado: mar 2004
Ubicación: Mexico
Posts: 67
Poder: 21
tmsanchez Va por buen camino
Cita:
Empezado por jourdan Ver Mensaje
Muchisimas gracias, me pongo a hacer pruebas inmediatamente!
Saludos
Excelente, espero que el código te sea de ayuda.
Responder Con Cita
  #7  
Antiguo 22-08-2018
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 18
Faust Va por buen camino
Hola, entré buscando respuesta a esto y la encontré de una manera diferente.



Cita:
Empezado por tmsanchez Ver Mensaje
Que tal.

Probablemente esto te sirva:

Código Delphi [-]procedure TfrmPrincipal.generaPdf(archivo: String); var recibo: IXMLComprobante; timbreFiscal: IXMLTimbreFiscalDigital; XMLDocument1: TXMLDocument; begin // cargar el comprogante a partir del nombre del archivo recibo := LoadComprobante(archivo); // obtener el nodo del timbre fiscal XMLDocument1.Xml.Text := recibo.Complemento.ChildNodes.FindNode('tfd:TimbreFiscalDigital', '').Xml; XMLDocument1.Active := True; timbreFiscal := GetTimbreFiscalDigital(XMLDocument1); showMessage(timbreFiscal.UUID); end;



Hola, corrijo... para que funcione en la linea que dice:


Cita:
XMLDocument1.Xml.Text := recibo.Complemento.ChildNodes.FindNode('tfd:TimbreFiscalDigital', '').Xml;

Debe decir



Código Delphi [-]
  XMLDocument1.Xml.Text := recibo.Complemento[0].ChildNodes[0].Xml;


Siempre y cuando esté timbrado el CFDI...
Al menos a mi me sirve desde hace tiempo
__________________
Herr Heins Faust
Responder Con Cita
  #8  
Antiguo 22-08-2018
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 21
jourdan Va por buen camino
Muchas gracias, lo voy a probar.
Saludos
__________________
Alejandro Jourdan
Responder Con Cita
  #9  
Antiguo 28-08-2018
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 18
Faust Va por buen camino
Hola de nuevo

Quizás a muchos no les funcionó mi última solución y pues hasta yo le encontré que falla cuando hay más complementos como pagos.

Así que traigo otra solución ojalá definitiva...

Dónde dice:


Código:
XMLDocument1.Xml.Text := recibo.Complemento.ChildNodes.FindNode('tfd:TimbreFiscalDigital', '').Xml;

Debe ser


Quizás a muchos no les funcionó mi última solución y pues hasta yo le encontré que falla cuando hay más complementos como pagos.

Así que traigo otra solución ojalá definitiva...

Dónde dice:


XMLDocument1.Xml.Text := recibo.Complemento[0].ChildNodes.FindNode('tfd:TimbreFiscalDigital', '').Xml;


No lo he terminado de probar, pero la idea la saqué de aquí:


https://stackoverflow.com/questions/...nodes-findnode


Viene una explicación sobre el namespace (no se me había ocurrido así tal como dice) de que no lo encuentra con findnode por ser diferente al namespace del documento que ("cfdi" en la factura y en el complemento de timbrado es "cfd", mientras que en los pagos donde tengo problemas es "pagos10")



Saludos de nuevo...
__________________
Herr Heins Faust
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
C++Builder 6 CFDI Mexico ¿Como agregar nodo dentro de otro nodo como hijo? JXJ C++ Builder 0 10-03-2016 03:51:01
TFacturaElectronica con soporte para CFDI lcarrasco Bibliotecas de código fuente 14 22-03-2015 04:45:27
Web Service timbrado CFDI Alexis De la Cr Delphi para la web 2 08-11-2012 20:07:13
Consulta - TP Arboles- "Para cada nodo de un arbol Indique nombre del nodo padre" velapuerca88 Varios 5 08-06-2012 17:35:33


La franja horaria es GMT +2. Ahora son las 05:02:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi