Ir para conteúdo
  • Cadastre-se

dev botao

Rotina Envio Evento Epec


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

Recommended Posts

Postado

Boa tarde pessoal,

 

Segue resumo da minha rotina de envio de evento EPEC:

ACBrCTe1.Configuracoes.Geral.Salvar          := True;
ACBrCTe1.Configuracoes.Arquivos.Salvar       := True;
ACBrCTe1.Configuracoes.Geral.FormaEmissao    := teDPEC;
ACBrCTe1.Configuracoes.WebServices.UF        := 'MG';   // Minha UF de origem
ACBrCTe1.Configuracoes.WebServices.Ambiente  := StrToTpAmb(Ok,'2');
...
...
with ACBrCTe1.Conhecimentos.Add.CTe do // Gera Xml do CT-e para obter a chave de acesso
 begin
  ...
  Ide.cUF    := 'MG'; // Minha UF de origem
  Ide.tpEmis := teDPEC;
  ...		
 end;
ACBrCTe1.Conhecimentos.SaveToFile();
ACBrCTe1.Conhecimentos.Valida;
...
...
ACBrCTe1.EventoCTe.Evento.Clear;
with ACBrCTe1.EventoCTe.Evento.Add do
begin
 InfEvento.cOrgao            := 31; // aqui é a UF do estado de origem ou a UF do SVCSP/SVCRS?
 InfEvento.CNPJ              := Sistema.CNPJUsr;
 InfEvento.chCTe             := Copy(ACBrCTe1.Conhecimentos.Items[0].CTe.infCTe.ID,4, 44);
 InfEvento.dhEvento          := Now;
 InfEvento.tpEvento          := teEPEC;
 InfEvento.nSeqEvento        := 1;
 InfEvento.detEvento.xJust   := 'Sefaz de origem inoperante.';
 InfEvento.detEvento.vICMS   := 10.00;
 InfEvento.detEvento.vTPrest := 100.00;
 InfEvento.detEvento.vCarga  := 1000.00;
 InfEvento.detEvento.toma    := Tomador;
 InfEvento.detEvento.UF      := UFTomador;
 InfEvento.detEvento.CNPJCPF := CNPJTomador;
 InfEvento.detEvento.IE      := IETomador;
 InfEvento.detEvento.modal   := Modal;
 InfEvento.detEvento.UFIni   := UFIni;
 InfEvento.detEvento.UFFim   := UFFim;
end;

ACBrCTe1.EventoCTe.GerarXML;
if ACBrCTe1.EnviarEventoCTe(idLote) then
 // trata retorno...	
else
 // Trata Retorno...	

Ao enviar o evento, sempre retorna mensagem que a tag xJust está vazia. Gostaria de confirmar se a sequencia acima está correta e se alguém sabe me falar o porquê de retornar erro da tag xJust sendo que a mesma foi informada.

 

Agradeço a atenção.

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Bom dia,

 

Alguém pode me dar uma luz com a questão acima?

 

Eu estou tentando gerar o XML do CT-e para pegar a chave de acesso, porém pelo fato de eu estar informando a propriedade tpEmiss como teDPEC, que é o correto, ao salvar ele já está gerando o evento do EPEC, automaticamente pela rotina:  

TWebServicesBase.DoCTeEnvEvento; //ACBrCTeWebServices.pas

Com isso está dando erro na validação dos dados, pois as propriedades da rotina do EPEC não estão sendo preenchidas.

 

 

Como contornar o problema? Qual a forma certa de gerar o EPEC?

 

1 - Gerar o XML do CT-e | Gerar e enviar o EPEC | posteriormente enviar o XML do CT-e.

 

2 - Gerar o XML do CT-e e deixar o componente enviar o EPEC automaticamente | posteriormente enviar o XML do CT-e.

 

 

 

 

Grato a todos...

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

  • Consultores
Postado

Boa tarde Vinício,

 

Leia a NT 2013/008 são 2 páginas e trata sobre o uso do EPEC.

 

Muito estranho isso que você postou "ao salvar ele já está gerando o evento do EPEC, automaticamente".

 

Se você alimentar o componente e informar o tipo de emissão teEPEC e mandar executar o comando:

 

ACBrCTe1.Conhecimentos.Valida;
 

Isso já é o suficiente para que o componente gere o XML, Assina e valida o mesmo.

Mas não é para ocorrer o envio do evento ou gerar o XML do evento.

 

De qualquer forma fiz uma ateração na unit ACBrCTeUtil, por favor atualize os fontes, leia a NT mencionada acima e realize novos testes.

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

Boa tarde,

 

Italo, a atualização do componente deu certinho.

 

Porém agora ao enviar o evento, ele somente me retorna "Rejeição: 226 - Código da UF do Emitente diverge da UF autorizadora", independente da UF que coloco.

 

Segue anexo os XMLs do CT-e e do evento.

 

Grato pela atenção.

 

 

31130802421499000136570010000000434000000435-cte.xml

292803999-ped-evento.xml

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

  • Consultores
Postado

Boa tarde Vinício,

 

Vamos as correções:

 

Ao gerar o Evento:

 

1. em cOrgao informar o código 35 uma vez que você vai utilizar o SVC-SP, correto?

2. em vTPrest informar o valor total da prestação que no seu teste o CT-e é 1000 e foi informado zero no EPEC;

3. em vCarga informar o valor da carga que no seu teste o CT-e é 100 e foi informado zero no EPEC;

4. em UFIni informar a UF Inicial que no seu teste o CT-e é MG e não foi informado no EPEC;

5. em UFFim informar a UF Final que no seu teste o CT-e é MG e não foi informado no EPEC;

 

E aproveitando de uma lida na NT 2013/004 do CT-e, mais precisamente o item 2, que contem uma orientação de preenchimento do  EPEC.

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

Boa tarde Ítalo,

 

Com relação á propriedade cOrgao, falha nossa... hehehe.

 

Com relação as demais propriedades elas estão sendo passadas conforme o exemplo do primeiro post deste tópico, inclusive eu as pego diretamente do componente através do bloco "ACBrCTe1.Conhecimentos.Items[n].CTe..." entretanto o arquivo XML de evento de está sendo gerado com informações padrões do componente quando ele da um create no evento.

 

 

Atenciosamente:

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Bom dia Ítalo,

 

Obrigado pela paciência...

 

 

 

Verifique se realmente as variáveis que você esta utilizando para alimentar o componente para gerar o evento contem os respectivos valores.

 

Sim, debuguei a rotina e todos os valores estão sendo passados, assim como consta no primeiro post do tópico.

 

Resumindo faço a seguinte rotina:

ACBrCTe1.Configuracoes.Geral.Salvar          := True;
ACBrCTe1.Configuracoes.Arquivos.Salvar       := True;
ACBrCTe1.Configuracoes.Geral.FormaEmissao    := teDPEC;
ACBrCTe1.Configuracoes.WebServices.UF        := 'MG';   // Minha UF de origem
ACBrCTe1.Configuracoes.WebServices.Ambiente  := StrToTpAmb(Ok,'2');
...
...
with ACBrCTe1.Conhecimentos.Add.CTe do // Gera Xml do CT-e para obter a chave de acesso
 begin
  ...
  Ide.cUF    := 'MG'; // Minha UF de origem
  Ide.tpEmis := teDPEC;
  ...		
 end;
ACBrCTe1.Conhecimentos.SaveToFile();
ACBrCTe1.Conhecimentos.Valida;
...
...
ACBrCTe1.EventoCTe.Evento.Clear;
with ACBrCTe1.EventoCTe.Evento.Add do
begin
 InfEvento.tpAmb             := taHomologacao;
 if RetornaSVCNacional(StrToInt(Sistema.CT_Codigo_UF)) = teSVCSP then
  InfEvento.cOrgao           := 35  // 35 - SVC São Paulo
 else
  InfEvento.cOrgao           := 43; // 43 - SVC Rio Grande do Sul}
 InfEvento.CNPJ              := Sistema.CNPJUsr;
 InfEvento.chCTe             := Copy(ACBrCTe1.Conhecimentos.Items[0].CTe.infCTe.ID,4, 44);
 InfEvento.dhEvento          := Now;
 InfEvento.tpEvento          := teEPEC;
 InfEvento.nSeqEvento        := 1;
 InfEvento.detEvento.xJust   := 'Sefaz de origem inoperante.';
 InfEvento.detEvento.vICMS   := VlrICMS;
 InfEvento.detEvento.vTPrest := ACBrCTe1.Conhecimentos.Items[0].CTe.vPrest.vTPrest;
 InfEvento.detEvento.vCarga  := ACBrCTe1.Conhecimentos.Items[0].CTe.infCarga.vCarga;
 InfEvento.detEvento.toma    := ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.Toma03.Toma;
 if ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.Toma03.Toma = tmRemetente then
  begin
   InfEvento.detEvento.UF      := ACBrCTe1.Conhecimentos.Items[0].CTe.Rem.enderReme.UF;
   InfEvento.detEvento.CNPJCPF := ACBrCTe1.Conhecimentos.Items[0].CTe.Rem.CNPJCPF;
   InfEvento.detEvento.IE      := ACBrCTe1.Conhecimentos.Items[0].CTe.Rem.IE;
  end
 else if ...
  begin
   ...
 end;
 InfEvento.detEvento.modal   := ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.modal;
 InfEvento.detEvento.UFIni   := ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.UFIni;
 InfEvento.detEvento.UFFim   := ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.UFFim;
end;

ACBrCTe1.EventoCTe.GerarXML;
if ACBrCTe1.EnviarEventoCTe(idLote) then
 // trata retorno...	
else
 // Trata Retorno...

Grato pela Atenção.

 

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Boa noite,

 

Ainda não Ítalo.

 

Acabei de atualizar os fontes e agora ele tá dando erro de validação acusando que a propriedade xJust está vazia, mas este erro é conseqüência de não estar gerando o arquivo com os dados passados e sim que ele ta gerando o arquivo com dados padrões do componente.

 

O erro acontece na procedure TWebServicesBase.DoCTeEnvEvento da unit ACBrCTeWebServices.

 

Grato pela atenção.

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Boa noite,

 

Tomei a iniciativa de alterar a procedure TWebServicesBase.DoCTeEnvEvento da unit ACBrCTeWebServices. Gerou o XML de Evento com todos os dados, exceto a tag cOrgao.

Ao invéz de preencher com os códigos 35 ou 43 como descrito no manual, ele está preenchendo com o código da UF de origem, no meu caso 31 - MG. Com isso o webservice retorna rejeição.

 

Agradeço a atenção e aguardo comentários do que podemos fazer...

EventoCTe        := TEventoCTe.Create;
  EventoCTe.idLote := TCTeEnvEvento(Self).idLote;

  for i := 0 to TCTeEnvEvento(Self).FEvento.Evento.Count-1 do
   begin
     with EventoCTe.Evento.Add do
      begin
        infEvento.tpAmb      := TpcnTipoAmbiente(FConfiguracoes.WebServices.AmbienteCodigo-1);
        infEvento.CNPJ       := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.CNPJ;
        infEvento.chCTe      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.chCTe;
        infEvento.dhEvento   := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.dhEvento;
        infEvento.tpEvento   := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.tpEvento;
        infEvento.nSeqEvento := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.nSeqEvento;

        case InfEvento.tpEvento of
          teCancelamento:
          begin
            infEvento.detEvento.nProt := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.nProt;
            infEvento.detEvento.xJust := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.xJust;
          end;
          teEncerramento:
          begin
          (*
            infEvento.detEvento.nProt := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.nProt;
            infEvento.detEvento.dtEnc := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.dtEnc;
            infEvento.detEvento.cUF   := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.cUF;
            infEvento.detEvento.cMun  := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.cMun;
          *)
          end;
          teEPEC:
          begin
           //InfEvento.versaoEvento        := '1.04';
           // InfEvento.TipoEvento         := '';
            infEvento.detEvento.descEvento := 'EPEC';
            InfEvento.cOrgao               := 35;//TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.cOrgao;
            infEvento.detEvento.nProt      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.nProt;
            infEvento.detEvento.xJust      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.xJust;
            InfEvento.detEvento.vICMS      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.vICMS;
            InfEvento.detEvento.vTPrest    := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.vTPrest;
            InfEvento.detEvento.vCarga     := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.vCarga;
            InfEvento.detEvento.toma       := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.toma;
            InfEvento.detEvento.UF         := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.UF;
            InfEvento.detEvento.CNPJCPF    := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.CNPJCPF;
            InfEvento.detEvento.IE         := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.IE;
            InfEvento.detEvento.modal      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.modal;
            InfEvento.detEvento.UFIni      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.UFIni;
            InfEvento.detEvento.UFFim      := TCTeEnvEvento(Self).FEvento.Evento[i].InfEvento.detEvento.UFFim;
          end;
        end;
      end;
   end;

  EventoCTe.GerarXML;

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Bom dia,

 

Ítalo, notei que você atualizou os fontes do componente. Agora ele gera os valores das tag's tudo corretamente, exceto a tag cOrgao, ainda está informando o código da UF de Origem, no meu caso 31 - MG, sendo que deveria-se informar o código da UF do SVC que atende o estado de origem, no meu caso 35 - SP.

 

Segue anexo o XML de evento para apreciação.

 

Grato pela atenção.

 

Atenciosamente:

887045655-ped-evento.xml

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

Postado

Boa tarde, 

 

Ítalo, deu tudo certo cara. Ainda não testei o retorno pelo componente de dentro da minha aplicação mas pelo XML de retorno deu pra ver que o evento foi registrado com sucesso.

 

Qualquer coisa te reporto.

 

Muito obrigado pela atenção.

 

Atenciosamente:

Vinício Rocha

Analista de Sistemas

Logus Soluções

Formiga – MG

þeficazerp.com.br

 

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