Ir para conteúdo
  • Cadastre-se

dev botao

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


Ver Solução Respondido por Victor H. Gonzales - Panda,
  • Este tópico foi criado há 2662 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
Postado

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"

  • Consultores
Postado

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"

  • Moderadores
Postado

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;

 

  • Obrigado 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

  • Consultores
Postado

@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"

  • Consultores
  • Solution
Postado

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"

  • Moderadores
Postado
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

  • 2 semanas depois ...
Postado

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?

Postado

O que fiz para resolver meu problema momentaneamente foi transferir a function GetPathPDF: String; da unit ACBrNFeDANFEClass para a seção public. Quando preciso utilizar o arquivo gerado invoco está function.

  • Este tópico foi criado há 2662 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.