Ir para conteúdo
  • Cadastre-se

dev botao

dmDanfe tornado privado quebrou meu código


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

Recommended Posts

Prezados,

Precisei de atualizar o emissor de NFe para incluir a tag indIntermed e, consequentemente foi preciso atualizar a biblioteca. Como não o fazia há muito pela mais absoluta falta de necessidade, vários erros de compilação surgiram que, exceto por um, consegui resolver a tempo pesquisando no fórum. A exclusão da propriedade 'dmDanfe', tornando-o privado, entretanto, não consegui resolver. Como se trata de uma modificação a ser publicada hoje à noite, alterei o fonte relevante reintroduzindo a propriedade de forma a tornar possível a compilação.

Esta, entretanto, é uma solução longe da ideal, portanto recorro à sua preciosa ajuda em como reescrever o trecho de código abaixo, eliminando a dependência desta propriedade.

procedure T_ACBr_EnviarDM.GravarEventoPDF(const AArqvPDF: TFileName);
const
  STituloPDF = 'Eventos Nota Fiscal Eletrônica';
begin

  frx_Danfe.dmDanfe.frxReport.LoadFromFile(frx_Danfe.FastFileEvento);
  frx_Danfe.dmDanfe.frxReport.PrintOptions.Copies := 1;
  frx_Danfe.dmDanfe.Evento := TACBrNFe(frx_Danfe.ACBrNFe).EventoNFe;
  frx_Danfe.dmDanfe.CarregaDadosEventos();

  if TACBrNFe(frx_Danfe.ACBrNFe).NotasFiscais.Count > 0 then
  begin
    frx_Danfe.dmDanfe.frxReport.Variables['PossuiNFe'] := QuotedStr('S');
    frx_Danfe.dmDanfe.NFe := TACBrNFe(frx_Danfe.ACBrNFe).NotasFiscais.Items[0].NFe;
    frx_Danfe.dmDanfe.CarregaDadosNFe;
  end;

  frx_Danfe.dmDanfe.frxReport.PrepareReport();

  frx_Danfe.dmDanfe.frxPDFExport.Author     := SNomeSistema;
  frx_Danfe.dmDanfe.frxPDFExport.Creator    := SNomeSistema;
  frx_Danfe.dmDanfe.frxPDFExport.Producer   := SNomeSistema;
  frx_Danfe.dmDanfe.frxPDFExport.Title      := STituloPDF;
  frx_Danfe.dmDanfe.frxPDFExport.Subject    := STituloPDF;
  frx_Danfe.dmDanfe.frxPDFExport.Keywords   := STituloPDF;
  frx_Danfe.dmDanfe.frxPDFExport.ShowDialog := False;

  frx_Danfe.dmDanfe.frxPDFExport.FileName := AArqvPDF;
  frx_Danfe.dmDanfe.frxReport.Export(frx_Danfe.dmDanfe.frxPDFExport);

end;

Agradeço antecipadamente a todos.

--
Cordialmente,
Carlos Tré

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde,

Por que você precisa acessar o datamodule do danfe diretamente ?
Por que não usar os metodos e propriedades para alimentar essas mesmas informações que você está passando?

 

Não vi nenhuma rotina que não tenha métodos para executar isto, por exemplo ImprimirPDF.

Explique melhor a sua necessidade da manipulação destes arquivos

  • Curtir 1
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 para o comentário
Compartilhar em outros sites

15 minutos atrás, Victor H. Gonzales - Panda disse:

Boa tarde,

Por que você precisa acessar o datamodule do danfe diretamente ?
Por que não usar os metodos e propriedades para alimentar essas mesmas informações que você está passando?

 

Não vi nenhuma rotina que não tenha métodos para executar isto, por exemplo ImprimirPDF.

Explique melhor a sua necessidade da manipulação destes arquivos

Olá Victor, muito obrigado pela atenção.

Este código é muito antigo, não me lembro mais do motivo de ter sido escrito desta forma, só me lembro de que todo o programa foi desenvolvido com base em exemplos disponíveis neste fórum  na época em que optei por usar o ACBr, nunca mais foi tocado. Tentei até mesmo localizar os exemplos em que me baseei, certamente devo tê-los em algum lugar, para ver se via alguma coisa que pudesse ser feita, mas não tive sucesso, devem estar em algum arquivo bem antigo. Uma ou outra coisa foi tirada também do exemplo que acompanha a biblioteca, mas a maior parte, me lembro claramente, foram publicações disponíveis no fórum.

O motivo de fazer a gambiarra foi a exiguidade do tempo para ficar experimentando e descobrir onde foram parar as propriedades e possivelmente novos nomes (MostrarPreview -> MostraPreview).

Sobre generalização das units o @Italo Giurizzato Junior publicou um artigo delineando as alterações necessárias, o que as tornou fáceis e rápidas de resolver. Não encontrei documentação equivalente que me possibilitasse, apenas por exemplo, localizar  como  chamar o equivalente a frx_Danfe.dmDanfe.CarregaDadosEventos(). Por que eu preciso desta chamada? Não faço a menor ideia, só sei que não saiu do nada, foi certamente do exemplo que encontrei no fórum.

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

bom dia,

Sugiro a refatoração do seu código o mais breve possível;

mas por exemplo para imprimir um evento de uma nfe é bem mais simples do que a forma aplicada atualmente por você, com 5 linhas você resolve isso pelo o que entendi.

 

<ACBrNFe>.NotasFiscais.Clear; //limpar o componente se houver nfe já carregados
<ACBrNFe>.NotasFiscais.LoadFromString(xXMLNFe); // para carregar os dados da NFe, usar LoadFromString para pegar do banco de dados e passar a string como por exemplo usado a variavel xXMLNFe, ou se for arquivo usar o metodo LoadFromFile;
<ACBrNFe>.EventoNFe.Evento.Clear; //limpar o componente se houver eventos já carregados
<ACBrNFe>.EventoNFe.LerXMLFromString(xXMLEventoNFe); // para carregar os dados do evento da NFe, usar LoadFromString para pegar do banco de dados e passar a string como por exemplo usado a variavel xXMLEventoNFe, ou se for arquivo usar o metodo LoadFromFile;

<ACBrNFe>.ImprimirEventoPDF; //imprimir em PDF
//ou
<ACBrNFe>.ImprimirEvento; //imprimir normalmente na impressora

Abraços

  • Curtir 1
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 para o comentário
Compartilhar em outros sites

2 horas atrás, Victor H. Gonzales - Panda disse:

bom dia,

Sugiro a refatoração do seu código o mais breve possível;

mas por exemplo para imprimir um evento de uma nfe é bem mais simples do que a forma aplicada atualmente por você, com 5 linhas você resolve isso pelo o que entendi.

 

<ACBrNFe>.NotasFiscais.Clear; //limpar o componente se houver nfe já carregados
<ACBrNFe>.NotasFiscais.LoadFromString(xXMLNFe); // para carregar os dados da NFe, usar LoadFromString para pegar do banco de dados e passar a string como por exemplo usado a variavel xXMLNFe, ou se for arquivo usar o metodo LoadFromFile;
<ACBrNFe>.EventoNFe.Evento.Clear; //limpar o componente se houver eventos já carregados
<ACBrNFe>.EventoNFe.LerXMLFromString(xXMLEventoNFe); // para carregar os dados do evento da NFe, usar LoadFromString para pegar do banco de dados e passar a string como por exemplo usado a variavel xXMLEventoNFe, ou se for arquivo usar o metodo LoadFromFile;

<ACBrNFe>.ImprimirEventoPDF; //imprimir em PDF
//ou
<ACBrNFe>.ImprimirEvento; //imprimir normalmente na impressora

Abraços

 

Bom dia, Victor. Uma vez mais muito obrigado pela sua atenção.

Infelizmente reescrever o código não é uma tarefa trivial, e demandará recursos, atualmente escassos, para estudar e pesquisar onde e como processar as demais informações do código original que, conforme lhe disse foi escrito há muito e parte da documentação se perdeu. Além disto o trecho acima é apenas um dos que precisariam ser reescritos.

Agora a demanda do pessoal do escritório é saber porque os campos do DANFE estão desalinhados, então mudo a pergunta: qual o problema que o remendo feito por mim, publicar a propriedade dmDanfe, pode causar além de ser perdida em uma próxima atualização?

Abraços.

Link para o comentário
Compartilhar em outros sites

  • Consultores

nada impede que você pode ter um branch local do componente com implementações suas, ou até mesmo estender o componente,

os merges será necessário ser realizados por ti e compatibilizações com demais implementações.

Caso você perca esse branch atual e baixe a versão do SVN, você terá que reimplementar essas mudanças;

 

Referente a desalinhamentos, pode ser questão de margens, você teria que debugar o seu código.

  • Curtir 1
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 para o comentário
Compartilhar em outros sites

×
×
  • 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.