Ver Mensaje Individual
  #78  
Antiguo 01-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Reputación: 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.