![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
Saludos.
__________________
Tiempo y ocasión acontecen a todos! |
|
#2
|
|||
|
|||
|
Hola programadores y foreros, les envío un cordial saludo.
Este es mi primer post y antes que nada permítanme felicitarlos por el excelente trabajo que están haciendo en estos foros del clubdelphi.com ya que me han salvado incontables veces; pero en especial en este foro de las facturas electrónicas SAT, este foro me ha salvado la vida (bueno tal vez no tanto como la vida pero me ha dado una gran ayudadota): MUUUUCHAS GRACIAAAAAAS!!!! Gracias al código que han puesto aquí estoy haciendo mi modulito de facturas electrónicas, si no, quién sabe si lo hubiera podido hacer. De nuevo muchas gracias. Y me gustaría añadir mi granito de arena al tema, ya que yo tuve problemas para añadir los encabezados y el tipo de documento al documento xml y en estos foros leí un hilo que decía que tienes que respetar los namespaces del documento, y no fijarlo como atributo: véase: Attributos fantasmas en nodos XML (www_clubdelphi_com/foros/showthread.php?t=40379) y leyendo sus indicaciones llegué a esto: Código:
procedure prepareSatXML(thisXMLDoc : TXMLDocument);
var CFD : IXMLComprobante;
begin
thisXMLDoc.XML.Text := '';
thisXMLDoc.Active := True;
thisXMLDoc.Version := '1.0';
thisXMLDoc.Encoding:='UTF-8';
CFD := GetComprobante(thisXMLDoc);
CFD.DeclareNamespace('xsi', 'http_//www_w3_org/2001/XMLSchema-instance');
CFD.Schema:='http_//www_sat_gob_mx/cfd/2 http_//www_sat_gob_mx/sitio_internet/cfd/2/cfdv2.xsd';
CFD.Version:='2.0';
end;
![]() Por cierto, primero use el xml binder para que delphi me generara una unidad de interface para manejar automáticamente el documento xml en el formato que pide hacienda como está ejemplificado arriba (IXMLComprobante). Y luego use el TSXLPageProducer para que automáticamente me generara la cadena original (Ejemplo de TSXLPageProducer): Código:
procedure TForm1.bttnCadenaOriginal1Click(Sender: TObject);
var xslt_source : string;
begin
xslt_source := 'cadenaoriginal_2_0.xslt';
try
XMLDoc.Active := False; // just in case
XSLPageProducer1.FileName := xslt_source;
XSLPageProducer1.XMLData := XMLDoc;
XMLDoc.Active := True;
Memo1.Text := XSLPageProducer1.Content; // Transform!!
except
on E: Exception do
Memo1.Text := E.Message
end;
end;
espero que sea de ayuda para alguien como lo fue para mí. Entonces mis preguntas son: De dónde obtienes NoAprobación y AnoAprobación ?? Y finalmente usando Sello.pas que bajas de este mismo hilo (muchísimas gracias felipep) puedes producir el sello, el certificado y el NoCertificado. Y precisamente aquí es donde está mi última pregunta: la función GetNoCertificado(const AFileName: string): string; de la unidad Sello.pas me regresa un string muy raro, así debe ser? ejemplo de resultado: 〱〰㈱〰〰〰〰㈰㔲㜱圌¨ que cuando le hago: UTF8Decode(NoCertificado) me da: ??????????? (puros signos de interrogación) Muchas gracias por su atención. Saludos! |
|
#3
|
||||
|
||||
|
El número de aprobación y el año de aprobación, se te proporcionan cuando solicitas los folios. En el documento de solicitud de folios ahí encuentras estos datos. Obviamente esto se configuran junto con los folio.
__________________
|
|
#4
|
|||
|
|||
|
Cita:
Ok, entonces uno debe llevar el control y debe saber el NoAprobacion y el AnoAprobacion. Muchas gracias! Entonces rápidamente, lo único que generas en el momento es: 1.-cadena original 2.-sello digital 3.-NoCertificado verdad? gracias! |
|
#5
|
||||
|
||||
|
Cita:
En serio, te agradezco el aporte. Solo me resta probarlo.
__________________
Tiempo y ocasión acontecen a todos! |
|
#6
|
|||
|
|||
|
Cita:
Saludos! |
|
#7
|
||||
|
||||
|
Cita:
Ahora me estoy metiendo en la onda de CFDI, a ver como me va con eso. Saludos.
__________________
Tiempo y ocasión acontecen a todos! Última edición por nuk3zito fecha: 01-10-2010 a las 21:13:53. |
|
#8
|
|||
|
|||
|
Cita:
Por cierto amigos programadores, tengo un problemilla con la unidad Sello.pas que postearon en este hilo, ojalá me puedan ayudar. Ya había preguntado sobre esto en mi primer post, pero sigo con eso, y es que por más que le muevo y le busco, no doy. Mi problema esta en la función: Código:
function GetNoCertificado(const AFileName: string): string; var bp: pBIO; fn: PWideChar; x: pX509; x509: pX509; bn: pBIGNUM; num: array [0..19] of char; begin InitOpenSSL; fn := PWideChar(AnsiString(AFileName)); bp := BIO_new(BIO_s_file()); BIO_read_filename(bp, fn); x := X509_new; x509 := PEM_read_bio_X509(bp, x, nil, nil); bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil); BN_bn2bin(bn, @num[0]); BN_free(bn); X509_free(x509); BIO_free(bp); Result := num; EVP_cleanup; end; Alguna sugerencia? Gracias! |
|
#9
|
|||
|
|||
|
Corrigiendo mi mensaje anterior (perdón, no se cómo editarlo), al final hablé del primer cambio que le hice, quise decir, el único cambio que le hice, que fue cambiar el tipo de dato, de PAnsiChar a PWideChar o PChar, porque al compilarlo como PAnsiChar, el delphi me dice que no es un tipo compatible:
E2010 Incompatible Types: 'Ansi' and 'Char' Y si le hago un typecast como: BIO_read_filename(bp, PChar(fn)); Ya me lo compila pero al correr y asignar el valor que me devuelve esta función al documento XML me marca un error: EOleException : 'se encontró un carácter no válido en el contenido del texto' Y he estado cambiándole los tipos de dato y me sigue devolviendo 'carácter no válido' o si le quito el typecast a AnsiString en fn := PAnsiChar(AnsiString(AFileName)); me marca otro error: access violation at address 10055fd4 in module 'libeay32.dll' Alguna sugerencia? será por la versión del libeay32.dll? Gracias |
|
#10
|
|||
|
|||
|
disculpen la intromision pero
Estimados compañeros del mismo infortunio
. Yo tambiene stoy metido ene sto de la facturacion electronica y he intentado usar la unidad sello.pas que amablemente subieron en un post anterior. es una gran ayuda definitivamente, solo que no he podido compilar dicha unidad ya que requiere otra unidad llamada libeay32 ya sea compilada o en fuente. La unidad libeay32.pas se puede bajar de la siguiente direccion http://www.disi.unige.it/person/Ferr...delphiopenssl/ solo que al intentar compilarla me arroja un error en la linea 1262
el error es el siguiente [DCC Error] libeay32.pas(1262): E2023 Function needs result type lei en la unidad que esta desarrollada especificamente para libeay32.dll version 0.9.6b he probado con varias versiones de dicha dll pero en todas me arroja el mismo error. Lo que me apena es no encontrar a otra persona que le haya pasado lo mismo. Utilizo delphi 2007 sobre xp. disculpen la pregunta, pero, Que crren ustedes que este haciendo mal? sera la version de la dll que no he encontrado la correcta? gracias por su atencion. Alexis de la Cruz |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Mexico - Como crear sellos en FACTURA ELECTRONICA.. | pcicom | API de Windows | 12 | 10-11-2012 18:46:55 |
| Factura Electrónica | aig | Varios | 13 | 10-12-2010 17:12:44 |
| factura electronica | cmm07 | Varios | 4 | 02-04-2009 17:46:03 |
| factura electronica | spia | Varios | 2 | 22-02-2009 21:30:06 |
| Factura electronica AUNA | Aprendiz | Varios | 5 | 01-09-2005 10:44:15 |
|