Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
Puede que tengas razon. Mi opinion, hoy es esta:

Para crear exenciones esta el array de exenciones que creo podria cubrir los casos manualmente desde el ERP sin mas tratamiento.

Ahora bien, quisiera incluir el caso mas comun de envio a canarias, que por cierto NO se encuentra descrito en ese documento del SII, que ya lei.

Si no hay una respuesta, anulare la opcion y ya. ¿que le vamos a hacer?

Saludos !
¿Donde se encuentra el array de exenciones para darle un vistazo o te refieres a los datos tal y como aparecen en la hoja excel y que el erp puede enviar?

Yo no anularía nada y se va viendo. Por el momento pueden haber algunas lagunas, que se irán adaptando o dejando que el erp envíe la información.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #2  
Antiguo 01-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por ramherfer Ver Mensaje
¿Donde se encuentra el array de exenciones para darle un vistazo o te refieres a los datos tal y como aparecen en la hoja excel y que el erp puede enviar?

Yo no anularía nada y se va viendo. Por el momento pueden haber algunas lagunas, que se irán adaptando o dejando que el erp envíe la información.

donde esta el del iva:


Código:
  TRegistroFacturaExentas=record
          tipoExenta           :string[2];
          calificacionOperacion:string[2];
          claveRegimen         :string[2];

          baseImp   :currency;
  end;

En TRegistroFactura=record

        nexentas            :integer;
        exenta              :array[0..maxivas] of TRegistroFacturaExentas;
Que por cierto,tenemos que comprobar que su planteamiento sea correcto y que funcione ok.
  #3  
Antiguo 01-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
por ahorrarme tiempo,

¿cuando una factura NO pasa por algun error, se interrumpe el envio de las siguientes? yo en las pruebas si he visto que se interrumpia el envio del resto, pero ahora no estoy seguro.

lo digo por no perder el encadenamiento.

saludos !
  #4  
Antiguo 03-03-2025
CarlosMz CarlosMz is offline
Miembro
 
Registrado: jul 2020
Posts: 140
Poder: 6
CarlosMz Va por buen camino
Buenos días
¿No se devuelve el array de resultados con las aceptadas, aceptadas con errores y rechazadas ?
  #5  
Antiguo 03-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por CarlosMz Ver Mensaje
Buenos días
¿No se devuelve el array de resultados con las aceptadas, aceptadas con errores y rechazadas ?
Si, tal cual lo devuelve la AEAT sin procesar, solo trasladando los datos al record

slds
  #6  
Antiguo 03-03-2025
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 44
Poder: 0
Quim Herrera Va por buen camino
No sé si ya lo habéis detectado, creo que hay un error en uVerifactuFuncs.pas en TEventosWebNode.WebNodeBeforePost al validar un NIF con P12 o PFX en la asignación del nombre del archivo y password:

Código Delphi [-]
 if sesion=-1 then // viene de un validador de nif
  begin
      pass:=nifValidator;
      cert:=nifValidatorPass;
  end
  else     // viene de un objeto verifactu

deberia ser:

Código Delphi [-]
  if sesion=-1 then // viene de un validador de nif
  begin
      cert:=nifValidator;
      pass:=nifValidatorPass;
  end
  else     // viene de un objeto verifactu
Saludos
  #7  
Antiguo 04-03-2025
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 130
Poder: 22
elguille Va por buen camino
Pfx

Hola, muchas gracias por iluminar el camino. Tengo un problema al cargar directamente un certificado PFX, no me funciona el procedimiento
Código Delphi [-]
cargaCertificado(Data: Pointer; cert, pass: string)
que está en uverifactufuncs.pas, la siguiente linea no carga el certificado correctamente
Código Delphi [-]
InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT))
lo he modificado para saber cual es el error
Código Delphi [-]
   if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT)) then
   BEGIN
      LastError := GetLastError();
      raise Exception.CreateFmt('Error en InternetSetOption. Código: %d', [LastError]);
   END;
recibo el código de error 6 . He importado el certificado al almacen de windows y desde ahi funciona perfectamente ¿alguien ha probado de cargar un certificado desde el fichero PFX directamente?
Gracias anticipadas.
  #8  
Antiguo 05-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por Quim Herrera Ver Mensaje
No sé si ya lo habéis detectado, creo que hay un error en uVerifactuFuncs.pas en TEventosWebNode.WebNodeBeforePost al validar un NIF con P12 o PFX en la asignación del nombre del archivo y password:

Código Delphi [-]
 if sesion=-1 then // viene de un validador de nif
  begin
      pass:=nifValidator;
      cert:=nifValidatorPass;
  end
  else     // viene de un objeto verifactu

deberia ser:

Código Delphi [-]
  if sesion=-1 then // viene de un validador de nif
  begin
      cert:=nifValidator;
      pass:=nifValidatorPass;
  end
  else     // viene de un objeto verifactu
Saludos
gracias, añado la correccion.
  #9  
Antiguo 04-03-2025
Avatar de DarkDudae
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 177
Poder: 21
DarkDudae Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
por ahorrarme tiempo,

¿cuando una factura NO pasa por algun error, se interrumpe el envio de las siguientes? yo en las pruebas si he visto que se interrumpia el envio del resto, pero ahora no estoy seguro.

lo digo por no perder el encadenamiento.

saludos !
No, no se interrumpe.

He probado a hacer un envío con 4 facturas. La segunda de ellas con el NIF incorrecto. Las otras 3 se envían sin problemas.
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro.
  #10  
Antiguo 05-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por DarkDudae Ver Mensaje
No, no se interrumpe.

He probado a hacer un envío con 4 facturas. La segunda de ellas con el NIF incorrecto. Las otras 3 se envían sin problemas.
aparentemente la huella, seria la misma para la siguiente ¿no? entiendo que no habria problema de encadenamiento, al enviar la que falta, subsanado el error.


los datos de huella son ciertos, ocurra el fallo que ocurra:

Código:
  CadenaTemporalHuella:= 'IDEmisorFactura='+         alta.IDFactura.IDEmisorFactura+'&'+
                           'NumSerieFactura='+         alta.IDFactura.NumSerieFactura+'&'+
                           'FechaExpedicionFactura='+  alta.IDFactura.FechaExpedicionFactura+'&'+
                           'TipoFactura='+             TipoFacturaVerifactuToString( alta.TipoFactura )+'&'+
                           'CuotaTotal='+              alta.CuotaTotal+'&'+
                           'ImporteTotal='+            alta.ImporteTotal+'&'+
                           'Huella='+                  huellaAnterior+'&'+
                           'FechaHoraHusoGenRegistro='+alta.FechaHoraHusoGenRegistro.NativeToXS;
Saludos !


La carga del certificado PFX o P12 no tengo ni idea, hay algun usuario que le funcionó (podeis revisar el hilo). Lamentablemente mas alla de eso no tengo tiempo para comprobar, pero mirare un poco por google. El codigo es copy-paste de uno que supuestamente funcionaba.

( ¿has aplicado la correccion de Quim Herrera ? )

Saludos !
  #11  
Antiguo 05-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
El usuario garada tiene un codigo ligeramente distinto en:

https://www.clubdelphi.com/foros/showthread.php?t=95356

dale una mirada al hilo.

Este es el codigo, señalo en rojo, lo que puede ser distinto. la carga del pfx la deja libre, sin determinar.

Código:
procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);

  procedure CheckError(Puntero: Pointer);
  begin
    if not Assigned(Puntero) then
      RaiseLastOSError;
  end;

const
  INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
  Pass = 'LaContraseña';
var
  pStore: HCERTSTORE;
  pCert: PCERT_CONTEXT;
  DataBlob: CRYPT_DATA_BLOB;
  PFX: AnsiString;
begin
  pStore := nil;
  pCert := nil;

  PFX := FuncionQueLeaElFicheroPFX;

  try
    DataBlob.cbData := Length(PFX);
    DataBlob.pbData := @PFX[1];

    // Almacen temporal con el contenido del PFX
    pStore := PFXImportCertStore(DataBlob, PWideChar(Pass), {PKCS12_NO_PERSIST_KEY + }PKCS12_INCLUDE_EXTENDED_PROPERTIES);
    CheckError(pStore);

    // Buscar un certificado con clave privada
    // Solo debería haber uno
    pCert := CertFindCertificateInStore(pStore,
                                        X509_ASN_ENCODING,
                                        0,
                                        CERT_FIND_HAS_PRIVATE_KEY, //CERT_FIND_ANY,
                                        nil,
                                        nil);
    CheckError(pCert);

    // Pasarlo al servicio
    InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT));
  finally
    if Assigned(pCert) then
      CertFreeCertificateContext(pCert);

    if Assigned(pStore) then
      CertCloseStore(pStore, 0);
  end;
end;
  #12  
Antiguo 05-03-2025
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 130
Poder: 22
elguille Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
El usuario garada tiene un codigo ligeramente distinto en:

https://www.clubdelphi.com/foros/showthread.php?t=95356

dale una mirada al hilo.

Este es el codigo, señalo en rojo, lo que puede ser distinto. la carga del pfx la deja libre, sin determinar.

Código:
procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);

  procedure CheckError(Puntero: Pointer);
  begin
    if not Assigned(Puntero) then
      RaiseLastOSError;
  end;

const
  INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
  Pass = 'LaContraseña';
var
  pStore: HCERTSTORE;
  pCert: PCERT_CONTEXT;
  DataBlob: CRYPT_DATA_BLOB;
  PFX: AnsiString;
begin
  pStore := nil;
  pCert := nil;

  PFX := FuncionQueLeaElFicheroPFX;

  try
    DataBlob.cbData := Length(PFX);
    DataBlob.pbData := @PFX[1];

    // Almacen temporal con el contenido del PFX
    pStore := PFXImportCertStore(DataBlob, PWideChar(Pass), {PKCS12_NO_PERSIST_KEY + }PKCS12_INCLUDE_EXTENDED_PROPERTIES);
    CheckError(pStore);

    // Buscar un certificado con clave privada
    // Solo debería haber uno
    pCert := CertFindCertificateInStore(pStore,
                                        X509_ASN_ENCODING,
                                        0,
                                        CERT_FIND_HAS_PRIVATE_KEY, //CERT_FIND_ANY,
                                        nil,
                                        nil);
    CheckError(pCert);

    // Pasarlo al servicio
    InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT));
  finally
    if Assigned(pCert) then
      CertFreeCertificateContext(pCert);

    if Assigned(pStore) then
      CertCloseStore(pStore, 0);
  end;
end;
Ese codigo en delphi 10.3 me da error aqui
Código Delphi [-]
    pStore := PFXImportCertStore(DataBlob, PWideChar(widestring(pass)), PKCS12_INCLUDE_EXTENDED_PROPERTIES);
debido a que cambia
Código Delphi [-]
DataBlob.pbData := @PFX[1];
si lo dejo en
Código Delphi [-]
DataBlob.pbData := @PFX[0];
va bien pero en la linea internetsetoption recibo el mismo error que al principio, "codigo error 6"
  #13  
Antiguo 05-03-2025
Avatar de DarkDudae
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 177
Poder: 21
DarkDudae Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
aparentemente la huella, seria la misma para la siguiente ¿no? entiendo que no habria problema de encadenamiento, al enviar la que falta, subsanado el error.
Cada registro de facturación tiene que tener su huella y su encadenamiento, independientemente de que la AEAT lo haya rechazado por, por ejemplo, un NIF incorrecto.
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro.
Tema Cerrado



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
Verifactu o por requerimiento (no-verifactu) ¿decisión del usuario? Maska10 Temas legales 2 07-12-2024 12:34:47
Demo de una applicación para una estación de enfermera con RAD Studio AgustinOrtu La Taberna 1 21-07-2015 17:41:35
Demo Delphi, EMail Caral Internet 1 19-12-2006 00:37:56
Demo de delphi 2005 mazinger Varios 2 18-12-2004 09:23:09
El Rave que viene con Delphi es una Demo? apicito Impresión 0 04-06-2003 11:33:36


La franja horaria es GMT +2. Ahora son las 05:18:08.


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