Jump to content

IMPRIMIRPDF + PATHPDF -> FASTREPORT - ERRO NO CAMINHO QUE ESTÁ SALVANDO O ARQUIVO PDF


Go to solution Solved by Victor H. Gonzales - Panda,
  • Este tópico foi criado há 1825 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores

Bom dia,

Eu utilizo uma procedure para facilitar para o cliente salvar o xml + o pdf onde ele desejar.

Após a atualização que realizei na semana passada, o comportamento mudou.

já tentei setar nas <ACBr.NFe>.configuracoes.arquivos, todas as propertys como false e limpar os path, mas não consegui;

Quando eu não emiti nenhuma nota pelo sistema, a impressão do pdf é no caminho que eu defini <ACBr.NFe>.DANFE.PathPDF, mas após emitir qualquer NFe, ele cria no <ACBr.NFe>.DANFE.PathPDF a estrutura CNPJ + NFe+ chavexml-nfe.xml.

procedure salvaDocumentoFiscal(xXML : string);

var diretorioSelecionado : string;

begin

if SelectDirectory('Selecione a Pasta de Destino:', 'C:\', diretorioSelecionado, [sdNewUI, sdNewFolder]) then
        begin
            diretorioSelecionado := diretorioSelecionado;
        end;

with NFE.Configuracoes.Arquivos do
    begin
        PathNFe            := '';
        PathSalvar         := '';
        Salvar             := False;
        SepararPorMes      := False;
    SepararPorDia      := False;
    SepararPorAno      := False;
        SepararPorCNPJ     := False;
        SepararPorModelo   := False;
        AdicionarLiteral   := False;
        EmissaoPathNFe     := False;
        SalvarEvento       := False;
    end;    

    NFE.NotasFiscais.Clear;
    NFE.NotasFiscais.LoadFromString(xXML);

    NFE.DANFE.PathPDF := diretorioSelecionado;
    NFE.NotasFiscais.ImprimirPDF;
    NFE.NotasFiscais.GravarXML(diretorioSelecionado+'\'+OnlyNumber(NFE.NotasFiscais.Items[0].NFe.infNFe.ID)+'-nfe.xml');
end;

No envio utilizo a seguinte configuração::

        SepararPorMes      := True;
        AdicionarLiteral   := True;
        EmissaoPathNFe     := True;
        SalvarEvento       := True;
        SepararPorCNPJ     := True;
        SepararPorModelo   := False;

 

Como eu faço para resolver essa questão, preciso salvar tanto o xml como o pdf no diretório informado c:\Temp\PDF\, na procedure as informações / configurações do componente não deveriam ser re-escrita?

antes de emitir nfe e executar a procedure

c:\Temp\PDF\12345678901234567890123456789012345678901234-nfe.pdf

c:\Temp\PDF\12345678901234567890123456789012345678901234-nfe.xml

após emitir nfe e executar a procedure

c:\Temp\PDF\12123123123412\NFe\12345678901234567890123456789012345678901234-nfe.pdf

c:\Temp\PDF\12345678901234567890123456789012345678901234-nfe.xml

 

Delphi Seattle + ACBr 13653 (25/07/2017).

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link to comment
Share on other sites

  • Consultores

Boa tarde,

Consegui contornar o problema alterando o arquivo ACBrDanfeClass.pas

Na function abaixo o if (linha 400) não ficava verdadeiro, pois o retorno do ComponentState era csFreeNotification, alterei para como estava antes do commit 13574 para   if Trim(FPathPDF) <> '' then, minha aplicação voltou a se comportar como eu esperava, sem gerar as pastas de cnpj + nfe no pathpdf escolhido

function TACBrNFeDANFEClass.GetPathPDF: String;
var
   dhEmissao: TDateTime;
   DescricaoModelo: String;
   ANFe: TNFe;
begin
  if (csDesigning in ComponentState) then
  begin
    Result := FPathPDF;
    Exit;
  end;                        

ACBrNFeDANFEClass.pas

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link to comment
Share on other sites

  • Moderadores

Sua sugestão , de voltar ao código anterior, não será aceita.

Crie um procedimento para desligar as propriedades e seguir as suas regras. 

Segue, como exemplo,  minhas regras de impressão da danfe 

procedure TDanfe.ImprimeDanfe( sXmlNome : String ; iNumeroCopias: Integer; bPreview, bPdf: Boolean; sProtocolo: String );
Var
  iTanProtocolo : Integer;
begin
  iTanProtocolo := Length( sProtocolo );
  with GlobalValues do
  begin
    With OBjDmDanfe.ACBrNFe1 do
    begin
      Configuracoes.Arquivos.AdicionarLiteral := false;
      Configuracoes.Arquivos.Salvar           := false;
      Configuracoes.Arquivos.SepararPorAno    := false;
      Configuracoes.Arquivos.SepararPorCNPJ   := false;
      Configuracoes.Arquivos.SepararPorDia    := false;
      Configuracoes.Arquivos.SepararPorMes    := false;
      Configuracoes.Arquivos.SepararPorModelo := false;

      NotasFiscais.Clear;
      NotasFiscais.LoadFromFile( sXmlNome );
      OBjDmDanfe.ACBrNFeDANFEFR1.TributosFonte := 'IBTP';
      OBjDmDanfe.ACBrNFeDANFEFR1.ImprimirUnQtVlComercial  := iuComercial;
      OBjDmDanfe.ACBrNFeDANFEFR1.ImprimirTotalLiquido     := False;
      OBjDmDanfe.ACBrNFeDANFEFR1.ExibirTotalTributosItem  := False;
      OBjDmDanfe.ACBrNFeDANFEFR1.fastfile                 := ExtractFilePath( Application.ExeName) +'Dll\DANFeRetratonovo.fr3';
      OBjDmDanfe.ACBrNFeDANFEFR1.ShowDialog               := false;
      OBjDmDanfe.ACBrNFeDANFEFR1.ExibeCampoFatura         := (NotasFiscais.Items[0].NFe.Ide.indPag <> ipOutras);
      danfe := OBjDmDanfe.ACBrNFeDANFEFR1;
      with danfe do
      begin
        Logo          := LogoEmpresa.Logo.DataString;
        MostrarStatus := false;
        if ( iTanProtocolo > 5) then
        begin
          NFeCancelada := true;
          ProtocoloNFe := sProtocolo;
        end;
        Email           := Emissor.Email;
        Fax             := Emissor.EMI_FAX;
        Sistema         := 'Desenvolvido por [email protected]';
        Site            := Emissor.Site;

        PathPDF         := PastaTemp;
        MostrarPreview  := bPreview;
        if bPreview then
          NumCopias := 1
        else
          NumCopias := iNumeroCopias;
      end;
      if bPdf then
        NotasFiscais.ImprimirPDF
      else
        NotasFiscais.Imprimir;
    end;
  end;
end;

 

  • Thanks 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

Link to comment
Share on other sites

  • Consultores

@hleorj

mesmo com as propriedades "false" ele continua criando na estrutura cnpj + nfe.

o  if (csDesigning in ComponentState) then fica com valor csFreeNotification, e não gera aonde foi determinado no pathpdf.

não é para gerar na estrutura cnpj + tipoDocumento, e sim onde declarar o pathpdf, se as propriedades separar cnpj, tipo de documento estivessem true, ai concordo com sua afirmação, mas neste caso como no post inicial, você pode verificar que as propriedades estão como false, para separação de arquivos.

 

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link to comment
Share on other sites

  • Consultores
  • Solution

consegui usando a unit original sem a alteração o efeito desejado com a ajuda do @Régys Silveira

<ACBrNFe>.Configuracoes.Arquivos.OrdenacaoPath.Clear;

Obrigado

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link to comment
Share on other sites

  • Moderadores
1 hora atrás, Victor H disse:

consegui usando a unit original sem a alteração o efeito desejado com a ajuda do @Régys Silveira

<ACBrNFe>.Configuracoes.Arquivos.OrdenacaoPath.Clear;

Obrigado

Não funcionou em meu teste. Se houver alguma propriedade igual a verdadeiro.

      Configuracoes.Arquivos.AdicionarLiteral := false;
      Configuracoes.Arquivos.Salvar           := false;
      Configuracoes.Arquivos.SepararPorAno    := false;
      Configuracoes.Arquivos.SepararPorCNPJ   := false;
      Configuracoes.Arquivos.SepararPorDia    := false;
      Configuracoes.Arquivos.SepararPorMes    := false;
      Configuracoes.Arquivos.SepararPorModelo := false;

A devida rotina , se encontra em analise . @Victor H

Grato por reportar.

Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

Link to comment
Share on other sites

  • 2 weeks later...

Achei legal esta questão de separação por diretórios. Só gostaria de saber como obter o caminho do arquivo pdf depois de salvo.

Seto DANFERave.PathPDF:= 'c:\pdf' e mando ImprimirPDF. O arquivo é salvo em c:\pdf\201708\NFe.

Mas se preciso utilizar o arquivo e mandar procurar pelo arquivo DANFERave.PathPDF + ChaveXML não consigo pq ele só retorna o c:\pdf q eu setei originalmente. Como pego o caminho completo?

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.