Ver Mensaje Individual
  #11  
Antiguo 18-02-2025
Avatar de DarkDudae
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 177
Reputación: 21
DarkDudae Va por buen camino
He encontrado un bug en el componente si el evento OnRegFac no está asignado antes de hacer un envío (lo cual causa una excepción).
En la demo este error no se muestra debido a que creamos el componente VeriFactuD7 en runtime, así como le asignamos dicha propiedad.

Para solucionarlo, debemos cambiar el código del componente (uVerifacu):

Debemos cambiar este código:

Código Delphi [-]
procedure _callbackRF(filehandleMap:longint);   stdcall;
var
  callback_RF_info:TFileHandledRecordCall;
begin
    try
      loadFileMappingData(@callback_RF_info, sizeof(callback_RF_info), filehandleMap);
      callBacksVeriFactus[callback_RF_info.sesion].FOnRegFac(callBacksVeriFactus[callback_RF_info.sesion]  ,callback_RF_info.numSerieFactura, callback_RF_info.streamXML );
   except
    ON E:Exception do
    begin
      ShowMessage('Error excepcion: '+E.Message);
    end;
   end;
end;

Por este otro en el que nos aseguramos que el evento esté asignado:
Código Delphi [-]
procedure _callbackRF(filehandleMap: longint); stdcall;
var
  callback_RF_info: TFileHandledRecordCall;
  callbackObj: TVeriFactu;
begin
  try
    loadFileMappingData(@callback_RF_info, sizeof(callback_RF_info), filehandleMap);
    
    callbackObj := callBacksVeriFactus[callback_RF_info.sesion];

    if Assigned(callbackObj) then
    begin
      // Verificar si el evento FOnRegFac está asignado antes de llamarlo
      if Assigned(callbackObj.FOnRegFac) then
        callbackObj.FOnRegFac(callbackObj, callback_RF_info.numSerieFactura, callback_RF_info.streamXML)
      else
        OutputDebugString(PAnsiChar('Advertencia: El evento FOnRegFac no está asignado.'));
    end
    else
      OutputDebugString(PAnsiChar('Error: callBacksVeriFactus[' + IntToStr(callback_RF_info.sesion) + '] es nil.'));
    
  except
    on E: Exception do
      ShowMessage('Error excepción en _callbackRF: ' + E.Message);
  end;
end;

Es posible que tengáis que desinstalar y volver a instalar el componente tras el cambio.

Un saludo
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro.

Última edición por DarkDudae fecha: 18-02-2025 a las 17:27:51.