Access Violation no Danfe FastReport

Olá, Levei a aplicação para emissão de nota para um servidor e emiti tudo tranquilo, porém na hora de gerar o Danfe usando Fast Report da um access violation, alguém pode me ajudar? sabe se precisa de alguma dll no executável ou algo assim?

O erro acontece na máquina de desenvolvimento também?
O erro acontece só na geração do FastReport ou em qualquer operação que envolva a SEFAZ?

Cara, eu testei localmente e deu certo. O problema ta mesmo na hora de quando usa no servidor, o erro acontece na hora que pede para exibir o DANFE e na hora que pede o pfd para baixar.
Caçei o erro no forum do ACBR e encontrei que para emitir o DANFE da NFCe tinha que trocar o componente TACBrNFeDANFEFR por TACBrNFeDANFCEFR, troquei, porém o erro continuou o mesmo.
Acredito que seja algum arquivo que esteja faltando estar com o executavel, porém, não faço menor ideia de qual.

Acho que seu problema e que no servidor não deve ter preview, status e outras msg, então desabilita tudo e só pode gerar o PDF e fazer o upload via stream para o cliente do PDF

1 Like

Cara, não entendi muito bem. Você ta dizendo que eu vou ter que gerar o pdf em outro executável e que não pode ser o mesmo que gera as notas ?

Não cara, to falando que tu tem que desabilitar as opções do componente ACBrNFeDANFeFR que mostra janelas de diálogos e também não pode usar o preview pois seu servidor vai estar na web, tu vai ter que gerar o pdf e mostrar ele, ou melhor renderizar/serializar/enviar para o cliente o pdf já pronto

@juliomar, mas acredito que ele esteja usando o fonte do emissor da Nuvem Fiscal, a princípio se tem um problema, seria bom corrigir pra todo mundo.
O emissor apenas instancia o componente sem setar nenhuma propriedade, e a emissão é praticamente as seguintes linhas:

    DANFE.PathPDF := TPath.GetTempPath;
    DANFE.ImprimirDANFEPDF(FACBrNFe.NotasFiscais.Items[0].NFe);

Isso pode mostrar janelas de diálogo? Porque preview não está sendo usado mesmo.

Talvez o problema dele seja mesmo dlls faltantes. Existe uma documentação consolidada do ACBr sobre quais DLLs devem ser disponibilizadas? Eu fui meio na tentativa e erro, usando alguns posts sortidos no fórum do ACBr pra funcionar.

@Joao_Batista, veja no repositório do ACBr, na pasta ACBr\DLLs, existem várias subpastas lá. Acredito que você pode tentar colocar, junto com seu servidor, as DLLs da pasta ACBR\DLLs\XMLSec\MinGW\32.

Sim Wagner talvez seja bom corrigir no código do emissor, para desabilitar as caixas de dialogs, outra coisa é que pode ser que ele faça uso do midas.dll e também se estiver usando as ultimas versões do ACBr precisa fazer a verificação se foi pego as últimas dll e colocadas pois foi adicionado o suporte a openssl 1.1 e superiores

@Joao_Batista, quando você diz : “Levei a aplicação para emissão de nota para um servidor e emiti tudo tranquilo” , esse seu servidor é uma VPS , uma máquina dedicada, usa qual Sistema Operacional ?

Coloquei as Dlls na pasta do executável e continuou o mesmo problema. E, ja verifiquei a versão do acbr e das dlls e estão todas atualizadas.

É um servidor na nuvem e o sistema operacional e o WindowsServer.

O erro aparentemente é na hora de criar o componente TACBrNFeDANFCEFR com o FastReport, o erro acontece no metodo CriarComponenteDANFE. Pelo que entendi ele não ta criando o Danfe e está dando AcessViolation na linha :
“Result.ACBrNFe := FACBrNFe;”
Justamente por que não cria o componente. Lembrando que na maquina local ta dando certo, esse problema acontece quando o projeto Servidor está na nuvem.

Acredito que você primeiro simule a operação em uma máquina local por exemplo com o windows 10 para ver se não existe erro. Não havendo o que pode estar criando dificuldades seja PERMISSÕES se o aplicativo funciona como um serviço pode ser que o usuário do serviço não tenhas as permissões necessárias ou que a parta do aplicativo seja liberado para acesso a qualquer usuário e operação.

Amigo, acredito que não seja isso, visto que muitas das coisas que você citou ai não condiz com os assuntos discutidos acima e o exemplo do projeto.

Então João, eu não sou profundo entendedor de ACBr, você fala que o problema é na criação do Danfe, com o FastReport, vc ja tentou usar o Fortes para ver se ocorre o mesmo ? O que citei anteriormente se baseia se por exemplo ao ser criado o componente cria algo em disco, mesmo que temporariamente e não haja permissão para fazê-lo.
Abraço

Testei agora com o fortes e deu tudo certo, porém, queria que funcionasse com o Fast também.

Você tentou entrar em contato com o fórum do ACBr? No emissor o código não tem nada de mais, é apenas criada uma classe do ACBr (no caso o emissor via FastReport). Eu rodo aqui o emissor num VPS Windows Server na Amazon e roda normal.
Até onde eu sei, o Fortes não é confiável para rodar no servidor pois ele não funciona bem em ambiente multi-thread.

Pessoal, eu estava com este mesmo problema, fiquei algum tempo debugando e consegui resolver adicionando a uses MidasLib no projeto, apesar de eu não fazer uso do DBExpress no meu projeto, mas lembrei que o componente do DANFE FAST REPORT utiliza TClientDataset para fazer o bind dos dados.
Espero que esta dica ajude quem passar pelo mesmo problema.

2 Likes