Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2010
mesquivelh mesquivelh is offline
Registrado
 
Registrado: may 2006
Posts: 7
Poder: 0
mesquivelh Va por buen camino
Addenda

Estoy usando el código publicado aquí con Delphi 2007, todo estaba bien hasta que intenté agragar una addenda a mi documento XML.

Lo hize de éste modo:

CFD.Addenda := 'CADENA|ADDENDA';

Y delphi me devuelve un error:

[DCC Error] Main.pas(767): E2129 Cannot assign to a read-only property

Entonces lo hize de éste modo:

CFD:Addenda.Text := 'CADENA|ADDENDA';

y delphi me lo genera bien, pero al validar en el SAT obtengo éste error:

El sello del comprobante es válido:
Se presentaron los siguientes errores al validar la estructura del comprobante \Bin\FacturaSello.xml
Error: cvc-complex-type.2.3: Element 'Addenda' cannot have character [children], because the type's content type is element-only.

¿Alguién me puede orientar sobre cómo agregar la addenda sin obtener errores?
Responder Con Cita
  #2  
Antiguo 09-06-2010
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Saludos compañeros!

Estoy comenzando a desarrollar la facturacion electronica, no he logrado entender aun paso por paso cual es el procedimiento que pide el SAT,

1. Generar la cadena original
2. Generar xml
3. Sellar la cadena

He ledio lo que pide hacienda pero no logro entender que se tiene que hacer primero, ya tengo perfectamente entendido que se necesita la key y el cer junto con la FEA, que sigue despues?.

Desde ya, gracias por sus aportes!
Responder Con Cita
  #3  
Antiguo 09-06-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Cita:
Empezado por odrack Ver Mensaje
Saludos compañeros!

Estoy comenzando a desarrollar la facturacion electronica, no he logrado entender aun paso por paso cual es el procedimiento que pide el SAT,

1. Generar la cadena original
2. Generar xml
3. Sellar la cadena

He ledio lo que pide hacienda pero no logro entender que se tiene que hacer primero, ya tengo perfectamente entendido que se necesita la key y el cer junto con la FEA, que sigue despues?.

Desde ya, gracias por sus aportes!
Casi, pero en otro orden.

0. Procesas el Certificado que te da el SAT, de ahi obtienes la vigencia y el numero de serie

1. Generas el XML, con los datos de tu empresa, del cliente, de los productos o servicios y con el numero de serie del certificado y un monton de datos mas

2. A partir del XML generas la "Cadena Original"

3. La Cadena Original la digieres con MD5

4. La Digestion MD5 te arroja una cadena de caracteres hexadecimales, esta cadena la firmas usando la Llave Privada. Existen algunas librerias que hacen el paso 3 y 4 en una sola instruccion.

5. Normalmente la firma es binaria, tienes que convertirla a Base64

6. Ese sello se lo pegas al XML que generaste en el paso 1
voila....tienes tu factura digital (expresado en XML)

Facil no? je je je

Ya en serio, estos son los pasos, como ves si son un poco laboriosos y "obscuros". Yo ya tengo la solucion en Delphi 7. Si quieres mandame un mensaje a patrick2000@prodigy.net.mx para ver como te puedo ayudar mas.
Responder Con Cita
  #4  
Antiguo 10-06-2010
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Gracias DADO por la respuesta estaba buscando algo asi que me orientara por donde comenzar, si tengo problemas te enviare un correo o preguntare en el foro que tanto me a ayudado, gracias a una gran parte de este foro he logrado formar un ERP.
Responder Con Cita
  #5  
Antiguo 09-07-2010
Avatar de LordRiper
LordRiper LordRiper is offline
Miembro
 
Registrado: mar 2007
Posts: 22
Poder: 0
LordRiper Va por buen camino
AccesViolation

Saludos gente.. primero que nada muchisimas gracias por compartir sus conocimientos. Stoy muuuy cerca, pero aun tengo la bronca con Sello.pas, estoy usando Delphi6 y siempre truena, nomas no he podido encontrar el porque, ¿alguien tendra alguna pista? y otra: alguien tendra el sello correcto para los certificados de prueba y la cadena de prueba (la que el emisor es CONTRIBUYENTE PRUEBASEIS PATERNOSEIS MATERNOSEIS o Industrias del Sur Poniente, S.A. de C.V.)
__________________
-- Salim Giacoman --
Torreon, Coahuila, Mx
giacoman_salim@hotmail.com


“Entre más aprendo, más quiero saber.
Entre más sé, más quiero aprender"

Última edición por LordRiper fecha: 09-07-2010 a las 00:27:46.
Responder Con Cita
  #6  
Antiguo 10-07-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Validador de Facturas Electronicas

Ya esta listo !!

En www.validacfd.com publique la version 0.1 del ValidaCFD, programa para validar Comprobantes Fiscales.

Los invito (y hasta los reto) a que verifiquen sus CFD tanto los que han programado como los que reciben "dia a dia" de sus compras habituales.

Otra noticia, debido al gran numero de preguntas que me han hecho por correo electronico he decidido crear ahi mismo (en www.validacfd.com ) un foro dedicado exclusivamente para factura electronica.

Se que en este foro de Club Delphi se pueden encontrar muchas respuestas, pero como saben este es un foro de PROGRAMACION y muchas veces me preguntan cosas como ¿como tramito los folios? que no tiene nada que ver con Delphi.

Asi que por alla los espero..Saludos.
Responder Con Cita
  #7  
Antiguo 15-07-2010
Avatar de LordRiper
LordRiper LordRiper is offline
Miembro
 
Registrado: mar 2007
Posts: 22
Poder: 0
LordRiper Va por buen camino
Saludos...

Pues ya quedo, mi CFD pasa la validacion, bueno, la de dado si me marca algunos errores, pero la del SAT sale perdecta. Ahora solo resta la integracion al ERP que debera ser painless .

Solo comentarles que estaba intentando sacar la cadena original como debe ser, haciendo una transformacion con el xslt que proporciona el SAT, y nomas no me daba bien el sello. tube que sacar la cadena original a manita, y ya comparando ambas cadenas me di cuenta que faltaba al principio un pipe y al final el pipe doble, CREO que eso es un error del XSLT que da el SAT ¿no?

muchas gracias a todos ustedes (y a Fernando Ortiz por supuesto) por los aportes, sin los cuales hubiera sido imposible lograrlo... GRACIAS
__________________
-- Salim Giacoman --
Torreon, Coahuila, Mx
giacoman_salim@hotmail.com


“Entre más aprendo, más quiero saber.
Entre más sé, más quiero aprender"
Responder Con Cita
  #8  
Antiguo 15-07-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Cita:
Empezado por LordRiper Ver Mensaje
Saludos...

Pues ya quedo, mi CFD pasa la validacion, bueno, la de dado si me marca algunos errores, pero la del SAT sale perdecta. Ahora solo resta la integracion al ERP que debera ser painless .

Solo comentarles que estaba intentando sacar la cadena original como debe ser, haciendo una transformacion con el xslt que proporciona el SAT, y nomas no me daba bien el sello. tube que sacar la cadena original a manita, y ya comparando ambas cadenas me di cuenta que faltaba al principio un pipe y al final el pipe doble, CREO que eso es un error del XSLT que da el SAT ¿no?

muchas gracias a todos ustedes (y a Fernando Ortiz por supuesto) por los aportes, sin los cuales hubiera sido imposible lograrlo... GRACIAS
Que bien! me interesaria muchisimo si me pudieras mandar la factura que mencionas, en donde hay diferencia entre mi validador y el del SAT, ya que con una muestra como la que me mandarias es la unica forma de descubrir en donde falla mi validador....

De antemano muchas gracias.

Saludos,
cubo@validacfd.com
Responder Con Cita
  #9  
Antiguo 09-06-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Cita:
Empezado por mesquivelh Ver Mensaje
Estoy usando el código publicado aquí con Delphi 2007, todo estaba bien hasta que intenté agragar una addenda a mi documento XML.

Lo hize de éste modo:

CFD.Addenda := 'CADENA|ADDENDA';

Y delphi me devuelve un error:

[DCC Error] Main.pas(767): E2129 Cannot assign to a read-only property

Entonces lo hize de éste modo:

CFD:Addenda.Text := 'CADENA|ADDENDA';

y delphi me lo genera bien, pero al validar en el SAT obtengo éste error:

El sello del comprobante es válido:
Se presentaron los siguientes errores al validar la estructura del comprobante \Bin\FacturaSello.xml
Error: cvc-complex-type.2.3: Element 'Addenda' cannot have character [children], because the type's content type is element-only.

¿Alguién me puede orientar sobre cómo agregar la addenda sin obtener errores?
Basicamente lo que te dice la validacion es que no esta bien formada la Addenda.

Yo tengo la "Addenda AMIS", es la que usan las empresas de Seguros como Mapfre, Zurich, Qualitas, etc etc

Para que empresa estas tratando de implementar la Addenda?, hay decenas, Chedraui, Soriana, Chrysler, AMECE, Liverpool, etc etc y mas etc
Responder Con Cita
  #10  
Antiguo 11-06-2010
mesquivelh mesquivelh is offline
Registrado
 
Registrado: may 2006
Posts: 7
Poder: 0
mesquivelh Va por buen camino
Cita:
Empezado por dado Ver Mensaje
Basicamente lo que te dice la validacion es que no esta bien formada la Addenda.

Yo tengo la "Addenda AMIS", es la que usan las empresas de Seguros como Mapfre, Zurich, Qualitas, etc etc

Para que empresa estas tratando de implementar la Addenda?, hay decenas, Chedraui, Soriana, Chrysler, AMECE, Liverpool, etc etc y mas etc
Es para PEMEX
Responder Con Cita
  #11  
Antiguo 11-06-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Cita:
Empezado por mesquivelh Ver Mensaje
Es para PEMEX
Buscando la definicion de la addenda para PEMEX me encontre este documento

Y lo que alcanzo a ver es que esta Addenda, ES LA MAS FACIL que haya visto jamas (bueno, no he visto muchas, pero esta si es facil)

Hay un ejemplo de la addenda :

<Addenda>0047|2009|90309|T|137|GTT-0047|2009</Addenda>

Asi que lo que estas haciendo es correcto :

Código Delphi [-]
CFD.Addenda.Text := '0047|2009|90309|T|137|GTT-0047|2009'

Despues de todo los datos en el XML aparecen como deben ser y en la posicion que debe ser.

Entonces mi teoria es que el validador del SAT "no sabe" interpretar esta Addenda y por eso marca error.

Es mas, me atrevo a decir que el validador del SAT NO DEBERIA marcar error en NINGUNA ADDENDA, la misma ley dice que los datos de la addenda no son regulados por el SAT y son de formato libre.

Lo que creo que esta pasando es que necesitas agregar el "namespace" de la Addenda Pemex.

El namespace es la direccion donde se supone deberia estar la definicion de la addenda.

Por ejemplo el namespace de la factura digital es : xmlns="http://www.sat.gob.mx/cfd/2" junto con otras dos que por ahi aparecen.

Alguien del foro tendra una factura "real" de Pemex que haya pasado la validacion?

Por cierto !!! www.validacfd.com.mx ya valio!!!!
Responder Con Cita
  #12  
Antiguo 11-06-2010
mesquivelh mesquivelh is offline
Registrado
 
Registrado: may 2006
Posts: 7
Poder: 0
mesquivelh Va por buen camino
Muchas gracias dado, espero que tu suposición sea correcta.
Responder Con Cita
  #13  
Antiguo 14-06-2010
dado dado is offline
Miembro
 
Registrado: may 2010
Posts: 76
Poder: 15
dado Va por buen camino
Si, parece que el validador de Hacienda falla al validar las Addendas, estoy trabajando en una Addenda para Mapfre y un colega me proporciono una factura hecha por el prestigiado programa de Aspel.

Recalco lo de "prestigiado" ya que aunque no son una autoridad considero que emplearon muchos recursos para desarrollar un buen producto.

Al tratar de validar dicha factura me muestra los siguientes datos:

Código:
El sello del comprobante es válido:
Se presentaron los siguientes errores al validar la estructura del comprobante C:\Users\Desktop\Addenda_Amis (Aspel).xml
Error: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ECFD'.

Realizando validación del sello con un certificado interno
Certificado usado : 00001000000001924752
El comprobante incluye un certificado codificado
Cadena original:
||blah|blah||
Digestión MD5 de cadena como HEX:
c876a849de4b1a6cfe4d9becd5f6970e
El sello del comprobante es válido
Asi que aunque no es una prueba "de fuego" si es una muestra de que el validador de hacienda se hace bolas con las addendas
Responder Con Cita
  #14  
Antiguo 18-06-2010
nejamube nejamube is offline
Miembro
 
Registrado: nov 2009
Ubicación: Buenos Aires
Posts: 65
Poder: 15
nejamube Va por buen camino
Exclamation Las reglas cambian [big brother]

Pues como en big brother, las reglas cambian para factura electronica.

http://elempresario.mx/centro-soluci...ra-electronica
Responder Con Cita
  #15  
Antiguo 25-08-2011
ronco88 ronco88 is offline
Registrado
NULL
 
Registrado: ago 2011
Posts: 1
Poder: 0
ronco88 Va por buen camino
Addenda de Qualitas

Alguien me puede ayudar con la Addenda de Qualitas, debido a que cuando la genero me marca un Error: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ECFD y quisiera ver que es lo que tengo mal

PD mesquivelh tu haces mencion de que tienes la Addenda AMIS, me podrias ayudar
Responder Con Cita
  #16  
Antiguo 22-05-2012
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
Cita:
Empezado por ronco88 Ver Mensaje
Alguien me puede ayudar con la Addenda de Qualitas, debido a que cuando la genero me marca un Error: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ECFD y quisiera ver que es lo que tengo mal

PD mesquivelh tu haces mencion de que tienes la Addenda AMIS, me podrias ayudar
Si quieres, envíame tu CFD y te indico que es lo que está mal. Yo manejo esa addenda. Si quieres por MP
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #17  
Antiguo 24-07-2012
aigartua aigartua is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 1
Poder: 0
aigartua Va por buen camino
aportando algo mas

Bueno me he leido todo el hilo, yo programo en Lazarus, y hace unos años realicé esta solución, es algo muy parecido a lo que han dicho por aqui, solo les paso la función que utilicé para realizar la digestion completa tanto en md5 o sha1 y pasarla a base64, parametro msg la cadena orginal, tipo es para indicar el tipo de digestion MD5 o SHA1, la llave esta en formato DER:
Código Delphi [-]
// Función para obtener el sello del documento según los requerimientos
// y especificaciones del SAT
// Equivale a:
// openssl dgst -md5 -sign llave.pem cadenaoriginal.txt | openssl base64 -A > sello.txt
function TFinterfaz.sello(msg,tipo: widestring): string;
var
  Len: cardinal;
  mdctx: EVP_MD_CTX;
  inbuf, outbuf: array [0..4095] of char;
  key: puEVP_PKEY;
  bp: pBIO;
  pk: PuRSA;
  rkey: PuRSA;
  i: integer;
  s: string;

  // Función para encriptar a base64
  Function EncodeBase64(S : String) : String;
  Var
    S1,S2 : TStringStream;

  begin
    S1:=TStringStream.Create(S);
    Try
      S1.Position:=0;
      S2:=TStringStream.Create('');
      Try
        With TBase64EncodingStream.Create(S2) do
          Try
            CopyFrom(S1,S1.Size);
          Finally
            Free;
          end;
        Result:=S2.DataString;
      finally
        S2.Free;
      end;
   finally
     S1.Free;
   end;
  end;

  function TipoError: string;
  var
    ErrMsg: array [0..160] of char;
  begin
    ERR_error_string(ERR_get_error, @ErrMsg);
    result := StrPas(@ErrMsg);
  end;

begin
  // Inicializa la libreria de OpenSSL
  OpenSSL_add_all_algorithms;
  OpenSSL_add_all_ciphers;
  OpenSSL_add_all_digests;
  ERR_load_crypto_strings;
  // Leer la llave privada en formato DER con contraseña
  bp := BIO_new(BIO_s_file());
  BIO_read_filename(bp, Pchar(ruta+nomarchivo));
  pk := nil;
  rkey := PEM_read_bio_RSAPrivateKey(bp, pk, nil, PChar(passw));
  if rkey = nil then
    raise Exception.Create('Error en llave privada.' + TipoError);
  key := EVP_PKEY_new;
  EVP_PKEY_assign(key, EVP_PKEY_RSA, rkey);
  StrPCopy(inbuf, msg);
  if tipo = 'MD5' then
    // MD5
    EVP_SignInit(@mdctx, EVP_md5());
  if tipo = 'SHA1' then
    // SHA1
    EVP_SignInit(@mdctx, EVP_sha1());
  EVP_SignUpdate(@mdctx, @inbuf, StrLen(inbuf));
  EVP_SignFinal(@mdctx, @outbuf, Len, key);
  // Cierra la libreria y libera la memoria
  EVP_cleanup;
  // este procediemiento quita un byte porque regresaba el caracter final, quizá un #13 o #10 o \n
  // dado que el dll esta hecho en c pero por las prisas en su momento asi se quedó
  s:='';
  for i:=0 to len-1 do
    s:=s+outbuf[i];
  result:=EncodeBase64(S)
end;

espero que a alguien le sirva como a mi

Última edición por Casimiro Notevi fecha: 24-07-2012 a las 18:28:58. Razón: Poner etiquetas [delphi] [/delphi]
Responder Con Cita
  #18  
Antiguo 24-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
Respuesta



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
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


La franja horaria es GMT +2. Ahora son las 16:40:50.


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