Ir para conteúdo
  • Cadastre-se

dev botao

PDF NF-e, gerar em diretório igual ao NF-e


  • Este tópico foi criado há 2471 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia.

Utilizo o ACBRMonitorPlus para autorizar a NFe.

Nas configurações utilizei as opções para "Salvar Arquivos em Pastas Separadas" e "Criar Pasta Mensal".

Porém estas opções não são utilizadas na hora de criar o PDF do DANFE, nesta situação tive uma ocorrência com mais de 30 mil arquivos no diretório do PDF, neste caso o acesso a este diretório apresentava uma lentidão pela quantidade de arquivos.

Realizei uma implementação para criar os diretórios utilizando o mesmo processo para gerar o arquivo do XML, também realizei os teste marcando as outras opções no Monitor.

Aguardo avaliação da equipe ACBR.

ACBrNFeDANFeRLClass.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom dia

a sugestão é válida mas foi feito somente para um tipo de situação.

consegue conferir pois tem mais ali e continuaria a gerar nesse outro tipo no mesmo lugar

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Tenho uma sugestão para remover um warning apresento nesse commit;

No código original abaixo a variavel dhEmissao não foi utilizada:

Citar

function TACBrNFeDANFEClass.GetPathPDF: String;
var
   dhEmissao: TDateTime;
   DescricaoModelo:String;
   vAux:TNFe;
begin
  if Trim(FPathPDF) <> '' then
    Result := IncludeTrailingPathDelimiter(FPathPDF)
  else
    Result := Trim(FPathPDF);
  //Criar diretório conforme configurado para NF-e
  if TACBrNFe(ACBrNFe).NotasFiscais.Count > 0 then
  begin
    vAux := TACBrNFe(ACBrNFe).NotasFiscais.Items[0].NFe;
    if TACBrNFe(ACBrNFe).Configuracoes.Arquivos.EmissaoPathNFe then
      dhEmissao := vAux.Ide.dEmi
    else
      dhEmissao := Now;
    case vAux.Ide.modelo of
      0: DescricaoModelo := TACBrNFe(FACBrNFe).GetNomeModeloDFe;
      55: DescricaoModelo := 'NFe';
      65: DescricaoModelo := 'NFCe';
    end;
    Result := PathWithDelim(TACBrNFe(FACBrNFe).Configuracoes.Arquivos.GetPath(
                           Result
                          ,DescricaoModelo
                          ,vAux.Emit.CNPJCPF
                          ,vAux.Ide.dEmi
                          ,DescricaoModelo
                          ));
  end;
end;

 Acredito que o código correto seria:

 

function TACBrNFeDANFEClass.GetPathPDF: String;
var
   dhEmissao: TDateTime;
   DescricaoModelo:String;
   vAux:TNFe;
begin
  if Trim(FPathPDF) <> '' then
    Result := IncludeTrailingPathDelimiter(FPathPDF)
  else
    Result := Trim(FPathPDF);
  //Criar diretório conforme configurado para NF-e
  if TACBrNFe(ACBrNFe).NotasFiscais.Count > 0 then
  begin
    vAux := TACBrNFe(ACBrNFe).NotasFiscais.Items[0].NFe;
    if TACBrNFe(ACBrNFe).Configuracoes.Arquivos.EmissaoPathNFe then
      dhEmissao := vAux.Ide.dEmi
    else
      dhEmissao := Now;
    case vAux.Ide.modelo of
      0: DescricaoModelo := TACBrNFe(FACBrNFe).GetNomeModeloDFe;
      55: DescricaoModelo := 'NFe';
      65: DescricaoModelo := 'NFCe';
    end;
    Result := PathWithDelim(TACBrNFe(FACBrNFe).Configuracoes.Arquivos.GetPath(
                           Result
                          ,DescricaoModelo
                          ,vAux.Emit.CNPJCPF
                          ,dhEmissao
                          ,DescricaoModelo
                          ));
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
2 horas atrás, RODRIGO_APOIOSIS disse:

A variável foi criada para esta finalidade mas não foi utilizada...

Boa observação.

ACBrNFeDANFEClass.pas

No svn!

só uma situação que estou a testar!

é a quebra de compatibilidade com esse código.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

@Juliomar Marchetti

No código original : 

Citar

 if Trim(FPathPDF) <> '' then
    Result := IncludeTrailingPathDelimiter(FPathPDF)
  else
    Result := Trim(FPathPDF);

Para manter a compatibilidade poderia apenas nesse trecho acima adicionar um exit como exemplifico abaixo:

Citar

if Trim(FPathPDF) <> '' then
begin
  Result := IncludeTrailingPathDelimiter(FPathPDF);
  Exit;
end
  else
    Result := Trim(FPathPDF);

 Dessa forma sempre respeita o caminho informado pelo usuário.

Link para o comentário
Compartilhar em outros sites

Bom dia, senhores!

Ontem fiz a atualização via SVN e precisei conferir algumas propriedades do componente ACBrNFeDANFeESCPOS. Ao tentar acessar qualquer propriedade do componente ocorre um "Access Violation". Em alguns momentos também ocorre "Abstract Error". Verifiquei que todos os componentes que possuem referência com a classe "ACBrNFeDANFEClass.pas" apresentam o erro. E todos apontam para o método "GetPathPDF" conforme imagem. Acessei a classe e comentei as alterações, recompilei e parou de ocorrer o erro. Alguém poderia fazer o mesmo teste e verificar se esta tudo ok?

Obrigado!
Douglas A R Lima
 

AV.png

Unit ACBrNFeDANFEClass.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores
54 minutos atrás, douglasarlima disse:

Bom dia, senhores!

Ontem fiz a atualização via SVN e precisei conferir algumas propriedades do componente ACBrNFeDANFeESCPOS. Ao tentar acessar qualquer propriedade do componente ocorre um "Access Violation". Em alguns momentos também ocorre "Abstract Error". Verifiquei que todos os componentes que possuem referência com a classe "ACBrNFeDANFEClass.pas" apresentam o erro. E todos apontam para o método "GetPathPDF" conforme imagem. Acessei a classe e comentei as alterações, recompilei e parou de ocorrer o erro. Alguém poderia fazer o mesmo teste e verificar se esta tudo ok?

Obrigado!
Douglas A R Lima
 

AV.png

Unit ACBrNFeDANFEClass.png

Correção enviada ao SVN revisão 13567.

  • Curtir 2
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Boa Tarde

A correção enviada para o SVN, resolveu o problema identificado pela douglasarlima.

Também foi adicionado o comando abaixo, Waldir Paim

Citar

if Trim(FPathPDF) <> '' then
begin
  Result := IncludeTrailingPathDelimiter(FPathPDF);
  Exit;
end
  else
    Result := Trim(FPathPDF);

Então para testar, deixei o FPathPDF = vazio (estou utilizando o ACBRMonitorPlus, e configurei no "Salvar arquivos PDF em:" sem nenhum caminho).

Nesta situação, o AcbrMonitorPlus retornou a mensagem "ERRO: Cannot create empty directory", exigindo que informe o local do PDF.

Acredito que deveria deixar sem o exit, e nas configurações do componente, não marcar as opções de "Criar pastas mensalmente", "Separar arqs pelo Modelo", etc, para funcionar como era antes. A ideia era se foi marcado para criar pastas mensais para o XML, também criar para os PDF, se marcado para criar pasta por modelo de documento para o XML, também criar para o PDF, e assim por diante.

Testei retirando esta exigência de preencher o caminho do PDF, porém ao fazer isso o PDF foi criado no diretório "ACBrNFe1.Configuracoes.Arquivos.PathSalvar" ou se não informado, foi criado no diretório do executável ACBRMonitorPlus/Docs/.

Aguardo avaliação da equipe.

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Apliquei uma revisão do método GetPathPDF, e enviei modificações para o SVN...  Não estava sendo considerado, que esse método pode ser chamado pelo ObjectInspector, em tempo de Design...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2471 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

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.

The popup will be closed in 10 segundos...