Jump to content

Ler Xml De Cte Gerado.


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

Recommended Posts

Boa tarde. Diante de uma necessidade, estou fazendo carregando o XML de CTe gerado há vários meses atrás. Como foi alterado a forma de Gerar Chave pela PL_104, Acredito ser desnecessário a chamada da função "GerarCTe;" dentro da função LoadFromStream da unit ACBrCTeConhecimentos. Essa chamada, faz com que a Chave seja gerada novamente, e o digito acaba não sendo igual, ou seja, a chave é gerada com numeração diferente. Abs.

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

  • Consultores

Boa tarde,

 

Você quiz dizer que esta carregando XML de CTe gerados há muito tempo atrás, visto que a versão 1.04 teve inicio a 02/05/2012.

 

E qual é o objetivo em carregar o XML via o comando LoadFromFile do componente?

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

Link to comment
Share on other sites

Italo,

 

Isso mesmo, estou carregando um arquivo emitido no mês 01/2012. 

Não cheguei a verificar o LoadFromFile ainda, mas, após ler seu comentário verifiquei que nessa rotina também possúi o GerarCTe após a leitura do XML.

 

Existindo as 2 funções no componente LoadFromFile e LoadFromStream, acredito que ambas devam ter a mesma finalidade, e por consequência funcionarem da mesma forma.

 

Se a função GerarCTe for chamada, ela vai acabar atualizando a Chave do CTe "Importado", oque não seria o correto na minha opinião, pois o documento estaria diferente do XML gerado.

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

  • Consultores

AmericaSoft,

 

Em ambas as rotinas: LoadFromFile e LoadFromStream, executam o GerarCTe e consequentemente se o XML se for da versão antiga a chave vai ser alterada, principalmente o Digito Verificador.

 

Se você comparar essas rotinas com as do componente ACBrNFe, notará que são semelhantes.

 

A solução que vejo seria acrescentar um parametro booleano que se o seu valor for True executa o GerarCTe caso contrario não.

 

E para manter a compatibilidade por padrão o valor desse parametro seria True.

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

Link to comment
Share on other sites

  • Solution

Sim,

 

Criando esse parâmetro acredito que resolveria sim. Analisei apenas superficialmente, mas, para saber se essa rotina realmente é necessária após o LoadFromFile ou LoadFromStream teria que fazer uma analise mais profunda pra então mante-la ou retirar não é? 

 

Bom não é nada que seja extremamente grave, aliás, talvez ninguém esteja utilizando as rotinas, haja vista que não encontrei outros questionamentos.

 

 

Obrigado pela atenção.

 

 

--

Thiago Filiano

11 98507-1103

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

  • Consultores

AmericaSoft,

 

Analisando melhor a rotina acredito que isso não seja possível.

 

Pois ao ler o XML o seu conteudo é armazenado em uma variavel local, que no final do processo ela é destruida.

 

O GerarCTe se encarrega de transferir o conteudo da variavel local para as propriedades do componente, mas ao realizar esse processo a chave é gerada novamente.

 

Lhe pergunto qual é a finalidade de carregar um CTe da versão 1.03 ?

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

Link to comment
Share on other sites

Italo,

 

Nessa situação apenas para gerar o PDF novamente a partir do documento.

 

Pelo que vi da rotina, ao ler o XML seja por stream ou pelo arquivo, o componente alimenta todas as propriedades do componente, apenas a propriedade de XML não eh preenchida, por ser destruída na leitura.

 

 

O componente estando totalmente preenchido, quando eu solicitar que seja salvo em arquivo, ele vai provavelmente entrar novamente em GerarCTe pra então atualizar as propriedades. não seria isso?

 

 

Thiago

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

  • Consultores

Boa noite Thiago,

 

Realize um teste, comente a linha que contem o GerarCTe na function LoadFromFile.

 

Depois tente ler o arquivo XML da versão 1.03 com o LoadFromFile e em seguida manda executar o ImprimirPDF.

 

O ImprimirPDF vai gerar o arquivo PDF, ai basta abrir-lo e ver o seu conteudo.

 

Se estiver todos os dados corretos inclusive a chave, então podemos acrescentar o parametro que anteriormente eu tinha proposto.

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

Link to comment
Share on other sites

  • Consultores

Bom dia Thiago,

 

Inclui o parametro conforme dito anteriormente.

 

As function alterados e suas novas sintaxes:

 

    function LoadFromFile(CaminhoArquivo: string; AGerarCTe: Boolean = True): boolean;
    function LoadFromStream(Stream: TStringStream; AGerarCTe: Boolean = True): boolean;
    function LoadFromString(AString: String; AGerarCTe: Boolean = True): boolean;
 

Note que o parametro AGerarCTe possui o valor True como padrão.

 

Exemplos de utilização:

 

   ACBrCTe1.Conhecimentos.LoadFromFile(OpenDialog1.FileName);

   ou
   ACBrCTe1.Conhecimentos.LoadFromFile(OpenDialog1.FileName, True);

 

===> Carrega o conteudo do XML e executa o GerarCTe


   ACBrCTe1.Conhecimentos.LoadFromFile(OpenDialog1.FileName, False);
 

===> Carrega o conteudo do XML e não executa o GerarCTe

 

Favor atualizar os fontes e testar.
 

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

Link to comment
Share on other sites

Italo,

 

Atualizado e funcionando perfeitamente.

 

Tenho 2 outras sugestões se possível:

1. Haver um parâmetro para que quando o CTe ser impresso, independente de enviar e-mail ou não, ou PDF ser salvo em uma pasta. (Hoje, ele só salva pdf, quando marcado pra enviar e-mail e anexar o pdf. Eu posso fazer isso na aplicação, chamando o método imprimirPDF, mas um parâmetro, acredito que seria interessante também)

2. Parâmetro para definir se o e-mail será enviado em formato HTML ou Texto. Por padrão o ACBR envia apenas Texto. Eu alterei a ACBrConhecimentos (antes) e agora ACBrCTe para enviar, então toda atualização, eu tenho o cuidado de manter minha "adaptação" pra HTML

 

 

Thiago

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

Coloquei a sugestão de forma errada, o correto seria: Independente de selecionar: Enviar pdf por email ou não, salvar o pdf.

 

Então resumindo, o pdf poderia ser gerado mediante ao parâmetro em 2 situações: 1. durante o Envio de Email ou 2. Após de Impressão do DACTe.

--

Desenvolvimento 

Americasoft Informática

11 3019-3819
[email protected]

Link to comment
Share on other sites

  • Consultores

Boa tarde Thiago,

 

Hoje temos os seguintes comandos:

 

Enviar => Gera o XML, Assina, Valida, Envia o lote para a SEFAZ, Consulta a Situação do Lote, Se processado com sucesso atualiza o XML adicionando o protrocolo de autorização e imprimi o DACTE se o segundo paramentro do comando for omitido ou for True.

 

Imprimir => Imprimi o DACTE do CTe previamente carregado no componente.

 

ImprimirPDF => Gera e Salva em disco o PDF do CTe previamente carregado no componente. 

 

EnviarEmail => Envia o XML do CTe previamente carregado no componente e se o parametro EnviarPDF estiver com o valor True será gerado o PDF do DACTE e o mesmo será anexado junto com o XML.

 

Exemplo:

 

   ACBrCTe1.Enviar(Lote);
   ACBrCTe1.Conhecimentos.ImprimirPDF;
 

Neste caso temos o Enviar cujo segundo parametro foi omitido sendo assim no final de todo o processo o DACTE será impresso.

E o ImprimirPDF como dito anterior mente vai gerar e salvar em disco o PDF do DACTE.

 

Desculpe, ainda não consegui ver neste caso a vantagem de implementar um parametro que gere ou não o PDF segundo o seu valor.

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

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 weeks later...

Italo

 

Estou passando os dados conforme seu Arquivo texto e quando compilo meu aplicativo, esta gerando erro nas rotinas abaixo

 

       If DMBase.IBDts_CtrcCIFFOB.Value = '1' then // 0 = CIF ; 1= FOB
            Ide.forPag := fpPago else Ide.forPag := fpApagar;

 

    Mensagem de erro --- > ( Indentifier Undeclared )



           Ide.modelo := '57'; // Tipo Conhecimento ------ ok
           Ide.serie  := 0; ok
           Ide.nCT    := DMBase.IBDts_CtrcCONHEC.Value; ok
           Ide.dhEmi  := DMBase.IBDts_CtrcDATA.Value; ok
           Ide.tpImp  := tiRetrato; erro
 

Link to comment
Share on other sites

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