O problema se encontra na rotina ACBrNFSe.Configuracoes.Certificados.GetCertificado;
Copiei a rotina da função do ACBrNFe.Configuracoes.Certificados.GetCertificado e colei no ACBrNFSe.Configuracoes.Certificados.GetCertificado e realizei as alterações necessárias de compatibilidade e funcionou perfeitamente agora....
Bom, vamos lá. Pelo que entendi do comentário o Juliomar é que por utilizar thread tenho que criar, configurar e destruir o componente a cada vez que for fazer uso do mesmo. Ex:
TNFSe = class(TThread)
ACBrNFSe: TACBrNFSe;
ACBrNFSeDANFSeRL: TACBrNFSeDANFSeRL;
procedure Execute; override;
public
constructor Create; overload;
destructor Destroy; override;
end;
{ TNFSe }
constructor TNFSe.Create;
begin
inherited Create(True);
FreeOnTerminate := True;
Priority := tpNormal;
ACBrNFSe := TACBrNFSe.Create(nil);
ACBrNFSeDANFSeRL := TACBrNFSeDANFSeRL.Create(ACBrNFSe);
ACBrNFSe.DANFSE := ACBrNFSeDANFSeRL;
ACBrNFSe.Configuracoes.Geral.Salvar := True;
ACBrNFSe.Configuracoes.WebServices.Salvar := True;
ACBrNFSe.Configuracoes.Geral.PathSalvar := PathSalvar;
ACBrNFSe.Configuracoes.Certificados.NumeroSerie := NumeroSerie;
ACBrNFSe.Configuracoes.Certificados.Senha := SenhaCertificado;
ACBrNFSe.Configuracoes.Geral.PathSchemas := ExtractFilePath
(Application.ExeName) + 'Schemas';
ACBrNFSe.Configuracoes.WebServices.CodigoMunicipio := CódigoMunicípio;
ACBrNFSe.Configuracoes.WebServices.SetConfigMunicipio;
if ACBrNFSe.DANFSE <> nil then
begin
if FileExists(ExtractFilePath(Application.ExeName)
+ 'Imagens\' + ACBrNFSe.Configuracoes.WebServices.xProvedor + '.jpg')
then
ACBrNFSe.DANFSE.Logo := ExtractFilePath(Application.ExeName)
+ 'Imagens\' + ACBrNFSe.Configuracoes.WebServices.xProvedor +
'.jpg';
ACBrNFSe.DANFSE.ExpandirLogoMarca := False;
// Path para salvar os arquivos PDF
ACBrNFSe.DANFSE.PathPDF := ACBrNFSe.Configuracoes.Geral.PathSalvar;
ACBrNFSe.DANFSE.Sistema := Sistema;
end;
ACBrNFSe.Configuracoes.Geral.PathSchemas := ExtractFilePath
(Application.ExeName) + 'Schemas\' +
ACBrNFSe.Configuracoes.WebServices.xProvedor;
Synchronize(Resume);
end;
destructor TNFSe.Destroy;
begin
ACBrNFSe.Free;
inherited;
end;
procedure TNFSe.Execute;
begin
inherited;
try
CoInitialize(nil);
// Cria e envia a NFSe!
finally
CoUninitialize;
end;
end;
Tipo, se for isso, já realizava isso todas as vezes, pois utilizo a thread para não travar a aplicação.
Realizando vários testes aqui, verifiquei que o problema não está no uso da thread não e sim na configuração: ACBrNFSe.Configuracoes.Certificados.Senha := SenhaCertificado;
Na primeira vez que crio o componente, seja vcl ou runtime, somente posso passar a propriedade ACBrNFSe.Configuracoes.Certificados.Senha na primeira vez, caso contrário, começa a dar o erro da criação do tópico e vários outros erros!
Sendo assim, somente passei esta propriedade na primeira criação da thread e funcionou perfeitamente.
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.