Ir para conteúdo
  • Cadastre-se

dev botao

Demo_ACBrCTe - Imprimir PDF evento


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

Recommended Posts

Access violation at address 00769ECE

Acho que é neste ponto

      if ACTe <> nil then
        FCTe := ACTe;

      with RLPDFFilter1.DocumentInfo do
      begin
        Title := ACBrStr('DACTE - Conhecimento nº ') +
          FormatFloat('000,000,000', FCTe.Ide.nCT);
        KeyWords := ACBrStr('Número:') + FormatFloat('000,000,000', FCTe.Ide.nCT) +
          ACBrStr('; Data de emissão: ') + FormatDateTime('dd/mm/yyyy', FCTe.Ide.dhEmi) +
          ACBrStr('; Destinatário: ') + FCTe.Dest.xNome +
          '; CNPJ: ' + FCTe.Dest.CNPJCPF;
      end;
 

Por que o imprimir EVENTO manda abrir duas vezes o OPENDIALOG e carrega em conhecimento, depois em evento?

Eu só preciso carregar o evento, certo?

 

  OpenDialog1.Title := 'Selecione o CTe';
  OpenDialog1.DefaultExt := '*-cte.xml';
  OpenDialog1.Filter := 'Arquivos CTe (*-cte.xml)|*-cte.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
  OpenDialog1.InitialDir := ACBrCTe1.Configuracoes.Arquivos.PathSalvar;

  ACBrCTe1.Conhecimentos.Clear;
  if OpenDialog1.Execute then
  begin
    ACBrCTe1.Conhecimentos.LoadFromFile(OpenDialog1.FileName);
  end;

  OpenDialog1.Title := 'Selecione o Evento';
  OpenDialog1.DefaultExt := '*-procEventoCTe.xml';
  OpenDialog1.Filter := 'Arquivos Evento (*-procEventoCTe.xml)|*-procEventoCTe.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
  OpenDialog1.InitialDir := ACBrCTe1.Configuracoes.Arquivos.PathSalvar;

  if OpenDialog1.Execute then
  begin
    ACBrCTe1.EventoCTe.Evento.Clear;
    ACBrCTe1.EventoCTe.LerXML(OpenDialog1.FileName);
    ACBrCTe1.ImprimirEvento;
  end;
 

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Sérgio,

O correto é carregar o XML do CT-e e depois o XML do Evento, por fim executar o método Imprimir ou ImprimirPDF.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo, na Unit ACBrCTeDAEventoRL.pas colocando comentário como abaixo funciona sem dar erro.

//      with RLPDFFilter1.DocumentInfo do
//      begin
//        Title := ACBrStr('DACTE - Conhecimento nº ') +
//          FormatFloat('000,000,000', FCTe.Ide.nCT);
//        KeyWords := ACBrStr('Número:') + FormatFloat('000,000,000', FCTe.Ide.nCT) +
//          ACBrStr('; Data de emissão: ') + FormatDateTime('dd/mm/yyyy', FCTe.Ide.dhEmi) +
//          ACBrStr('; Destinatário: ') + FCTe.Dest.xNome +
//          '; CNPJ: ' + FCTe.Dest.CNPJCPF;
//      end;
 

Se carregar o CTe antes do evento, irá imprimir PDF igual a opção de imprimir com preview. 

Verifique por favor.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Sérgio,

No meu entendimento devemos sempre carregar o XML do CT-e e depois do evento e por fim imprimir ou gerar o seu PDF.

Caso contrario teremos somente os dados do evento e desta forma não saberemos qual CT-e o evento esta vinculado. 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

No caso de evento de inutilização é diferente.  Em parte concordo contigo, mas a impressão com CTe e sem CTe, ambas saem iguais em imprimir PDF e imprimir para  a impressora no DEMO, o que faz estas linhas que comentei não serem necessárias no PDF.  É o que gerou o erro.

Faça o teste.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Sergio,

Inutilização não é evento.

Você não inutiliza um CT-e e sim um numero ou uma faixa de números.

Cancelamento é um evento pelo simples fato do CT-e existir.

A inutilização não é evento, como dito, você esta informando a SEFAZ que o numero ou uma faixa de números não se referem a nenhum CT-e, pois ocorreu uma falha no sistema e não existe nenhum CT-e com o numero informado ou pertencente a faixa informada.

Temos os seguintes métodos de impressão:

Para o CT-e temos Imprimir e ImprimirPDF;

Para Eventos temos ImprimirEvento e ImprimirEventoPDF;

Para Inutilização temos ImprmirInutilizacao e ImprimirInutilizacaoPDF.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Sérgio,

Os testes que você fez foram somente com o Fortes Report, correto?

Não realizou nenhum teste usando o Fast Report?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo, boa tarde, desculpe não ter lido antes e ter respondido.

Fiz somente como FORTES REPORT, pois o FAST Report não está embutido, tenho que enviar os arquivos de report junto.

Tem mais uma questão, com relação ao nome do PDF gerado do evento.  Não  dá para manter a mesma grafia do nome do XML?

Veja o exemplo abaixo:

110111-35160420252460000114570010000000011000000010-1-procEventoCte.xml  nome do Evento

1101113516042025246000011457001000000001100000001001-procEventoCTe.pdf  nome do PDF

 

 

 

Link para o comentário
Compartilhar em outros sites

Ítalo, a linha que muda o nome do PDF do evento é esta.

      sFile := TACBrCTe(ACBrCTe).DACTE.PathPDF +
               OnlyNumber(TACBrCTe(ACBrCTe).EventoCTe.Evento.Items.InfEvento.Id) + 
               '-procEventoCTe.pdf';
Tirando a função OnlyNumber, manterá o mesmo nome.

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Sergio,

O arquivo *-procEventoCTe.xml é salvo automaticamente pelo componente ou é a sua aplicação que salva ele?

Pois a rotina que defini o nome do arquivo esta da seguinte forma:

 if FPConfiguracoesCTe.Arquivos.Salvar then
            begin
              NomeArq := OnlyNumber(FEvento.Evento.Items[ I ].InfEvento.Id) + '-procEventoCTe.xml';

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo, eu estou importando XML exportados do emissor gratuito.  Foi ele que gerou estes nomes.

Fiz um teste carregando o CTe e o respectivo evento e o PDF gerado foi assim.

1101113516092025246000011457001000000184100000184501-procEventoCTe.pdf

Tem alguma variável que eu possa usar para recuperar o nome do PDF gerado pela rotina ImprimeEventoPDF.  Acredito que isto resolve o problema.

Obrigado pelo atenção

Sérgio 

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Sérgio,

Se tratando do arquivo *-procEventoCTe.xml não existe nenhuma recomendação por parte do ENCAT a respeito do nome como ele deve ser formatado.

O que fizemos foi o seguinte:

No caso do arquivo *-cte.xml a recomendação é que se utilize o ID sem o prefixo "CTe", resumindo: <chave do CT-e> + '-cte.xml'

Para o evento adotamos a mesma regra, ou seja, utilizamos o ID sem o prefixo "ID", resumindo: <código do evento> + <chave do CT-e> + <sequencial com 2 digitos> + '-procEventoCTe.xml'

A formatação acima é adotada pelo componente ACBrCTe para todos os tipos de eventos tanto para o arquivo XML quanto para o PDF.

Lembrando que no caso do CT-e temos os eventos: Cancelamento, EPEC (ambos por serem únicos o sequencial sempre será 01) e a carta de correção que não é única, logo o sequencial poderá ser: 01, 02, etc.

Não vejo necessidade de ter uma função que retorno o nome do XML ou PDF, uma vez que sabendo a formatação você consegue montar, ou você pode muito bem guardar no banco de dados o ID do evento sem o prefixo que também resolve o seu problema.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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