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 Buscar Temas de Hoy Marcar Foros Como Leídos

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-02-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
buenos dias !

encantado ramherfer que el componente haya cumplido las expectativas, gracias por tu reconocimiento.

Todavía espero que habrá que corregir alguna cosa, me extrañaria mucho que estuviera muy bien. (de hecho acabo de ver un error, porque ahora siempre envia a pre-produccion, asi que en unos dias subire otra version)
(abajo pongo lo que hay que corregir, hoy asi rapido pero habrá alguna mejora mas).

ontisoft, la primera demo la puedes descartar, era una prueba temprana.

la segunda demo es la buena. En el programa que envia desde Excel, no olvidéis seleccionar un certificado del almacén valido e indicar vuestros datos en la pestaña Datos Sistema Informático.

Para los que quieran usar el componente sin D7, desde versiones B10 en adelante, pueden hacerlo directamente usando las funciones del servidor. No lo he probado, pero debería funcionar sin mas

Para ello, hay que hacer un uses tal que así:

uses uTiposVerifactu, uVerifactuFuncs;

Aumentar el stack size maximo a: 9048576 Project -> options->linker

Tendremos las siguientes funciones disponibles: Os recomiendo que mireis la llamada a esas funciones desde la unidad de componente para D7 a modo de consulta. en la unidad: uTVerifactu.pas

Código:
function  inicio_sesion( var crearSesion:TVeriFactuInicio ):integer; stdcall;
// con sesion:
function  anadeFactura(sesion:integer; var factura:TRegistroFacturas):integer; stdcall;
procedure envio(sesion:integer; var resultadoEnvio:TResultadoEnvio);  stdcall;
function  cierreSesion(sesion:integer; cierre:TCierreSesion):boolean;
function  resetSesion(sesion:integer; cierre:TCierreSesion):boolean;
function  consultar(sesion:integer; var resultado:TConsultaResultado):boolean;

// sin sesion:
procedure validarNIF(var nifvalidador:TValidadorNif);

// auxiliares
procedure clear_factura(afactura:TRegistroFactura);
procedure clear_sesion(sesion:integer);

// Certificados
procedure GetCertificados(var certificados:TCertificados);
procedure GetAliasCertificado(var certificados:TAliasCert);
function BUSCAR_CERTIFICADO_SERIAL(Nombre_Certificado: String): string;

Correccion para permitir el envio a otra url

Unidad uTVeriFactu

Reemplazar esta funcion, por este codigo:

Código:
//
// crear una sesion
//
function  TVerifactu.inicio:boolean;
var
    inicioVeriFactu    : TVeriFactuInicio;
    filemap,filehandle : longint;
begin
      checkAutoRun;

      serverHandle := FindWindow(nil, pchar(serverName) );
      if IsWindow( serverHandle ) then
      begin
          inicioVeriFactu.simular:=simular;
          inicioVeriFactu.emisor:=emisor;
          inicioVeriFactu.sistemaInformatico:=sistemaInformatico;
          inicioVeriFactu.nombreCertificado:=Certificado;
          inicioVeriFactu.passwordCertificado:=passwordCertificado;
          inicioVeriFactu.SaveXmlEnvio:=fSave;
          inicioVeriFactu.SaveXMLResultado:=fResp;
          inicioVeriFactu.incidencia:=false;

          inicioVeriFactu.resultadoSesion:=-1;
          if fEndPoint<>'' then
            inicioVeriFactu.direccion_envio:=fEndPoint
          else
            inicioVeriFactu.direccion_envio:='https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP';

          filemap:=saveNewFileMappingData(@inicioVeriFactu, sizeof(inicioVeriFactu), filehandle);

          SENDMESSAGE( serverHandle, WM_VERIFACTU_INICIO, 0, filemap );

          loadFileMappingData(@inicioVeriFactu, sizeof(inicioVeriFactu), filemap);
          closeFileMappingData(filehandle);

          if inicioVeriFactu.resultadoSesion<>0 then
          begin
              sesion:=inicioVeriFactu.resultadoSesion;
              result:=true;
          end
          else
          begin
              result:=false;
          end;
      end
      else
          result:=false;
end;

Última edición por seccion_31 fecha: 01-02-2025 a las 08:56:13.
  #2  
Antiguo 01-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
Bueno pues parece ser que me esta marcando todos los envíos como incidencia.
Las facturas las genero con la fecha del día actual y por defecto el tiempo máximo es de 60 segundos, controlado por timer que se resetea y actualizaal final del envio según el tiempo de espera que informe la AEAT en la respuesta del envio.
Desconozco si me pasa solo a mi.
Voy a ver si le doy un repaso a todo.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #3  
Antiguo 02-02-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
Lo acabo de probar con la demostración de excel y funciona correcto (he lanzado 3 facturas). No veo el campo incidencia en el XML ni en la web de la AEAT.

Asegurate que usas la compilacion que deje en el rar. MSG_BERLIN\Win32\Debug\msgverifactu.exe del 2 de enero (no creo que haya otra ahi dentro)

Despues del envio, puedes abrir el servidor verifactu de la barra de tareas, ir a la pestaña de la sesion y ver a partir de que factura se activa la incidencia. (de ahi en adelante todo va con incidencia)

Saludos

Cita:
Empezado por ramherfer Ver Mensaje
Bueno pues parece ser que me esta marcando todos los envíos como incidencia.
Las facturas las genero con la fecha del día actual y por defecto el tiempo máximo es de 60 segundos, controlado por timer que se resetea y actualizaal final del envio según el tiempo de espera que informe la AEAT en la respuesta del envio.
Desconozco si me pasa solo a mi.
Voy a ver si le doy un repaso a todo.
  #4  
Antiguo 02-02-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
Hay algunas cosas que me gustaria comentar

1) Alguien ha conseguido hacer funcionar el httprio desde una DLL ? si fuera asi, y tuviera el codigo, lo cambiaria a funcionamiento por DLL que me parece mas elegante.

2) ¿Alguien ha probado el componente, indicando en vez del nombre del certificado el nombre de un archivo.pfx y en passwordCertificado su contraseña?

Saludos !
  #5  
Antiguo 03-02-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
1) Alguien ha conseguido hacer funcionar el httprio desde una DLL ? si fuera asi, y tuviera el codigo, lo cambiaria a funcionamiento por DLL que me parece mas elegante.
¿Qué problema te da exactamente?
  #6  
Antiguo 03-02-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
¿Qué problema te da exactamente?
en la DLL error de proteccion general. justo al llamar la funcion de enviar. El mismo codigo en un ejecutable sin problemas.

googleando en algunos sitios lei que no se podia, pero siempre hay que asegurarse.
  #7  
Antiguo 05-02-2025
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 44
Poder: 0
Quim Herrera Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
Hay algunas cosas que me gustaria comentar

1) Alguien ha conseguido hacer funcionar el httprio desde una DLL ? si fuera asi, y tuviera el codigo, lo cambiaria a funcionamiento por DLL que me parece mas elegante.

2) ¿Alguien ha probado el componente, indicando en vez del nombre del certificado el nombre de un archivo.pfx y en passwordCertificado su contraseña?

Saludos !
Hola seccion_31 ,
El código del certificado para archivo pfx funciona perfectamente tanto para .pfx como para .p12.
Lo he probado en un servicio de windows que estoy haciendo en delphi 10.2.
Muchas gracias por el aporte!
Saludos,
  #8  
Antiguo 05-02-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
hola Quim Herrera !

¿estas seguro que funciona?

ahora mirando la funcion:
Código Delphi [-]
Funcion: procedure TEventosWebNode.WebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
Unidad: uVerifactuFuncs

Yo creo que esto fallara:

Código Delphi [-]
 PFX := TFile.ReadAllBytes('ArchivoDelCertificado.PFX');

Deberia ser:

Código Delphi [-]
  PFX := TFile.ReadAllBytes( cert );


He añadido la extension .P12 para reconocer el archivo

¿puedes confirmarlo por fa?

Slds !

Última edición por Neftali [Germán.Estévez] fecha: 05-02-2025 a las 12:39:55. Razón: añadir TAGs al mensaje
  #9  
Antiguo 05-02-2025
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 44
Poder: 0
Quim Herrera Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
hola Quim Herrera !

¿estas seguro que funciona?

ahora mirando la funcion:

Funcion: procedure TEventosWebNode.WebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
Unidad: uVerifactuFuncs


Yo creo que esto fallara:

PFX := TFile.ReadAllBytes('ArchivoDelCertificado.PFX');

Deberia ser:

PFX := TFile.ReadAllBytes( cert );


He añadido la extension .P12 para reconocer el archivo

¿puedes confirmarlo por fa?

Slds !

Exacto, hay que cambiar
Código Delphi [-]
PFX := TFile.ReadAllBytes('ArchivoDelCertificado.PFX' );
por
Código Delphi [-]
PFX := TFile.ReadAllBytes( cert );
y ya funciona.

Saludos,

Última edición por Neftali [Germán.Estévez] fecha: 05-02-2025 a las 12:44:53.
  #10  
Antiguo 02-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

Asegurate que usas la compilacion que deje en el rar. MSG_BERLIN\Win32\Debug\msgverifactu.exe del 2 de enero (no creo que haya otra ahi dentro)

Saludos
Si correcto estoy usando esa del 2 de enero de 2025 de las 12:46

Cita:
Empezado por seccion_31 Ver Mensaje

Despues del envio, puedes abrir el servidor verifactu de la barra de tareas, ir a la pestaña de la sesion y ver a partir de que factura se activa la incidencia. (de ahi en adelante todo va con incidencia)

Saludos
ok en la primera que he confeccionado hoy y enviado ya me sale incidencia activa.

https://drive.google.com/file/d/17qT...ew?usp=sharing

Voy a revisar mi código a ver si veo algo raro comparandolo con la demo y si no veo nada haré lo propio con el del servidor.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #11  
Antiguo 02-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 ramherfer Ver Mensaje
Si correcto estoy usando esa del 2 de enero de 2025 de las 12:46



ok en la primera que he confeccionado hoy y enviado ya me sale incidencia activa.

https://drive.google.com/file/d/17qT...ew?usp=sharing

Voy a revisar mi código a ver si veo algo raro comparandolo con la demo y si no veo nada haré lo propio con el del servidor.
encontrado el problema. Está en la unidad uVerifactuFuncs.pas en la comparación de fechas

Cita:
if factura.actual.fechaFactura<>datetostr(date) then
sesiones[sesion].inicio.incidencia:=true;
Lo he sacado a disco y está comparando esto
Cita:
FechaFactura: 02-02-2025
FechaSistema: 02/02/2025
Siempre son distintas.

la reemplazo por:

Cita:
if factura.actual.fechaFactura<>StringReplace(DateToStr(Date), '/', '-', [rfReplaceAll]) then
sesiones[sesion].inicio.incidencia:=true;
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.

Última edición por ramherfer fecha: 02-02-2025 a las 12:35:21.
  #12  
Antiguo 03-02-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
ramherfer

Creo que estas suministrando la fecha en el record factura.actual.fechaFactura con el formato 01-01-2025 cuando deberías simplemente cargar la fecha tal cual 01/01/2025 cuando se envía la función altafactura_F1_F2_R4_R5_verifactu realiza la conversión.

Ya me lo confirmaras.

Saludos !
  #13  
Antiguo 03-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
ramherfer

Creo que estas suministrando la fecha en el record factura.actual.fechaFactura con el formato 01-01-2025 cuando deberías simplemente cargar la fecha tal cual 01/01/2025 cuando se envía la función altafactura_F1_F2_R4_R5_verifactu realiza la conversión.

Ya me lo confirmaras.

Saludos !
Efectivamente. Al verlo en las hojas excel con formato dd-mm-aaaa pues pasaba la fecha con el mismo formato.
Ok, corrijo la modificación y realizada.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
Tema Cerrado


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
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 15:32:34.


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