Ir para conteúdo
  • Cadastre-se

dev botao

Ler Xml De Cte Gerado.


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

Recommended Posts

Postado

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]

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

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]

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

  • Solution
Postado

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]

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

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]

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

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]

Postado

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]

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

  • 2 semanas depois ...
  • 4 semanas depois ...
Postado

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
 

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