Ir para conteúdo
  • Cadastre-se

dev botao

CTE-OS - Como obter os dados do retorno após aprovação?


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

Recommended Posts

Bom dia pessoal, tudo bem?

Estou tendo problemas ao tratar o retorno da receita para a aprovação do CTe-OS (modelo 67). Questão: em qual propriedade do componente podemos encontrar os dados do retorno, após o envio?

O xml de retorno da receita é o seguinte:

  <?xml version="1.0" encoding="UTF-8" ?> 
- <retCTeOS xmlns="http://www.portalfiscal.inf.br/cte" versao="3.00">
  <tpAmb>2</tpAmb> 
  <cUF>43</cUF> 
  <verAplic>RS20170524123027</verAplic> 
  <cStat>104</cStat> 
  <xMotivo>Lote processado</xMotivo> 
- <protCTe versao="3.00" xmlns="http://www.portalfiscal.inf.br/cte">
- <infProt Id="CTe143170000069206">
  <tpAmb>2</tpAmb> 
  <verAplic>RS20170829094659</verAplic> 
  <chCTe>43100002080759000157070020000000221040004850</chCTe> 
  <dhRecbto>2017-09-22T09:03:22-03:00</dhRecbto> 
  <nProt>143170000669200</nProt> 
  <digVal>SCqHYRKjbBPT3F99/Wr3ZP0AFRk=</digVal> 
  <cStat>100</cStat> 
  <xMotivo>Autorizado o uso do CT-e</xMotivo> 
  </infProt>
  </protCTe>
  </retCTeOS>

 

Pelo que reparei, após a aprovação, as propriedades do componente ficam todas em branco ou zeradas, como ACBrCTe.WebServices.Retorno.* e ACBrCTe.WebServices.Retorno.CTeRetorno.*

 

Desde já agradeço a ajuda dos colegas,

Gabriel.

Editado por Gabriel Bonzanini
Alteração de informações sigilozas do cliente
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Gabriel,

Em vez de Retorno e CTeRetorno, tentou CTeRetornoOS?

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

Para o Envio fiz o seguinte processo.

 

           ACBrCTe1.Conhecimentos.Clear;
           if FileExists(Cmd.Params(0)) then
              ACBrCTe1.Conhecimentos.LoadFromFile(Cmd.Params(0))
           else
              raise Exception.Create('Arquivo '+Cmd.Params(0)+' não encontrado.');

           ACBrCTe1.Conhecimentos.GerarCTe;
           if Cmd.Params(2) <> '0' then
              ACBrCTe1.Conhecimentos.Assinar;

           ACBrCTe1.Conhecimentos.Validar;

           if ACBrCTe1.Conhecimentos.Items[0].CTe.Ide.modelo = 67 then
           begin
               FrmACBrMonitor.rdModeloDFCTe.ItemIndex := 1;
               ACBrCTe1.Configuracoes.Geral.ModeloDF := pcteConversaoCTe.moCTeOS;
           end
           else
           begin
               FrmACBrMonitor.rdModeloDFCTe.ItemIndex := 0;
               ACBrCTe1.Configuracoes.Geral.ModeloDF := pcteConversaoCTe.moCTe;
           end;


           if not(ACBrCTe1.WebServices.StatusServico.Executar) then
            raise Exception.Create(ACBrCTe1.WebServices.StatusServico.Msg);

           if Trim(OnlyNumber(Cmd.Params(1))) = '' then
              ACBrCTe1.WebServices.Enviar.Lote := '1'
           else
              ACBrCTe1.WebServices.Enviar.Lote := OnlyNumber(Cmd.Params(1)); //StrToIntDef( OnlyNumber(Cmd.Params(1)),1);

           ACBrCTe1.WebServices.Enviar.Executar;

Tem que mudar alguma coisa para obter os resultados ?

Link para o comentário
Compartilhar em outros sites

12 horas atrás, Italo Jurisato Junior disse:

Boa noite Gabriel,

Em vez de Retorno e CTeRetorno, tentou CTeRetornoOS?

Bom dia Italo!

Muito obrigado pelo retorno, sei como é a correria de vocês e como o tempo é escasso. Na verdade, reparei que existe, internamente, o objeto FCTeRetornoOS, porém o mesmo não foi publicado para acesso externo.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia a todos,

Lembrem-se que no caso do CT-e OS o envio é síncrono, ou seja, após o envio já temos o resultado do processamento do documento.

Tentem obter os dados que desejam a respeito do resultado do processamento da seguinte forma:

Protocolo := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.nProt;
Status := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.cStat; 
Motivo := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.xMotivo; 
 

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

Eu estou pegando o retorno dessa maneira e o mesmo não retorna nada;

           Resposta :=  Resposta+
                            ACBrCTe1.WebServices.Retorno.Msg+sLineBreak+
                            '[RETORNO]'+sLineBreak+
                            '<ret Versao>'+ACBrCTe1.WebServices.Retorno.verAplic+'</ret Versao>'+sLineBreak+
                            '<ret TpAmb>'+TpAmbToStr(ACBrCTe1.WebServices.Retorno.TpAmb)+'</ret TpAmb>'+sLineBreak+
                            '<ret VerAplic>'+ACBrCTe1.WebServices.Retorno.VerAplic+'</ret VerAplic>'+sLineBreak+
                            '<ret NRec>'+ACBrCTe1.WebServices.Retorno.CteRetorno.nRec+'</ret NRec>'+sLineBreak+
                            '<ret CStat>'+IntToStr(ACBrCTe1.WebServices.Retorno.CStat)+'</ret CStat>'+sLineBreak+
                            '<ret XMotivo>'+ACBrCTe1.WebServices.Retorno.XMotivo+'</ret XMotivo>'+sLineBreak+
                            '<ret CUF>'+IntToStr(ACBrCTe1.WebServices.Retorno.CUF)+'</ret CUF>'+sLineBreak;

           for I:= 0 to ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Count-1 do
            begin
              for J:= 0 to ACBrCTe1.Conhecimentos.Count-1 do
              begin
                if 'CTe'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.chCTe = ACBrCTe1.Conhecimentos.Items[j].CTe.infCTe.Id  then
                begin
                  Cmd.Resposta := Cmd.Resposta+
                             '[CTE'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+']'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' Versao>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.verAplic+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' Versao>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' TpAmb>'+TpAmbToStr(ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.tpAmb)+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' TpAmb>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' VerAplic>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.verAplic+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' VerAplic>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' CStat>'+IntToStr(ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.cStat)+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' CStat>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' XMotivo>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.xMotivo+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' XMotivo>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' CUF>'+IntToStr(ACBrCTe1.WebServices.Retorno.CteRetorno.cUF)+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' CUF>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' ChCTe>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.chCTe+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' ChCTe>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' DhRecbto>'+DateTimeToStr(ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.dhRecbto)+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' DhRecbto>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' NProt>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.nProt+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' NProt>'+sLineBreak+
                             '<cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' DigVal>'+ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.digVal+'</cte'+Trim(IntToStr(ACBrCTe1.Conhecimentos.Items[J].CTe.Ide.nCT))+' DigVal>'+sLineBreak;
                  break;
                end;
              end;

             
         end

 

E o Retorno apresentado é
[RETORNO]
<ret Versao>PR-v3_0_35</ret Versao>
<ret TpAmb>2</ret TpAmb>
<ret VerAplic>PR-v3_0_35</ret VerAplic>
<ret NRec></ret NRec>
<ret CStat>215</ret CStat>
<ret XMotivo>Falha no schema XML. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 94; cvc-pattern-valid: Value '' is not facet-valid with respect to pattern '[0-9]{15}' for type 'TRec'.</ret XMotivo>
<ret CUF>41</ret CUF>

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Italo Jurisato Junior disse:

Bom dia a todos,

Lembrem-se que no caso do CT-e OS o envio é síncrono, ou seja, após o envio já temos o resultado do processamento do documento.

Tentem obter os dados que desejam a respeito do resultado do processamento da seguinte forma:

Protocolo := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.nProt;
Status := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.cStat; 
Motivo := ACBrCTe.Conhecimentos.Items[ x ].CTe.procCTe.xMotivo; 
 

Utilizando o COMANDO acima o resultado foi
' Stat: '+IntToStr( ACBrCTe1.Conhecimentos.Items[0].CTe.procCTe.cStat )   RETORNOU '0'

' Motivo: '+ ACBrCTe1.Conhecimentos.Items[0].CTe.procCTe.xMotivo RETORNO VAZIO

 

Link para o comentário
Compartilhar em outros sites

Boa tarde pessoal.

A quem possa interessar, para sanar o problema de forma temporária, adicionei a propriedade 'CTeRetornoOS' para acesso externo:

 

image.thumb.png.4dab879763d880bf4234366abc5907b0.png

 

Após o envio do lote, para acessar os dados do retorno, basta acessar as propriedades ACBrCTe.WebServices.Enviar.CTeRetornoOS.* . Não sei se era a intenção inicial dos programadores do projeto, mas por enquanto pode "quebrar um galho" pra quem tenha urgência.

 

Abraço.

 

ACBrCTeWebServices.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Cleonir,

Sim, porque o envio do CT-e é assíncrono, logo precisa ser realizado uma consulta para pegar o resultado do processamento.

Já no CT-e OS o envio é síncrono, ou seja, o retorno do envio já é o resultado do processamento.

Tente algo do tipo:

ACBrCTe.WebServices.Enviar.RetWS;
 

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

Boa noite Cleonir

Este outro também fica vazio?

ACBrCTe.WebServices.Enviar.RetornoWS. 

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

Bom dia Cleonir

Configure o componente para salvar os arquivos Soap, faça um novo teste provocando a rejeição e anexe o arquivo soap de retorno.

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

Não esta salvando os Soap.

Não certo como funciona. A rejeição que forcei acontece na validação nos Schemas, não sei se mesmo assim  teria que salvar os Soap.

Coloquei um valor menor que permitido no campo NroRegEstadual.

Mas enfim não esta salvando os Soap.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Cleonir,

Então o problema não é pegar o retorno do envio e sim erro de validação.

O conteúdo do campo NroRegEstadual tem que ter obrigatoriamente 25 dígitos, preencher com zeros a esquerda se necessário.

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

Bom dia, ontem emite meu primeiro cliente com o CTe-Os, consegui os retornos assim:

      status    := dm.cte.Conhecimentos.Items[0].CTe.procCTe.cStat;
      protocolo := dm.cte.Conhecimentos.Items[0].CTe.procCTe.nProt;
      chave     := Copy(dm.cte.Conhecimentos.Items[0].CTe.infCTe.Id,4,44);


Funcionou legal, o unico detalhe foi da chave, que tive que "recortar" o CTe do começo da chave.

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
Em 25/09/2017 at 13:50, Gabriel Bonzanini disse:

Boa tarde pessoal.

A quem possa interessar, para sanar o problema de forma temporária, adicionei a propriedade 'CTeRetornoOS' para acesso externo:

 

image.thumb.png.4dab879763d880bf4234366abc5907b0.png

 

Após o envio do lote, para acessar os dados do retorno, basta acessar as propriedades ACBrCTe.WebServices.Enviar.CTeRetornoOS.* . Não sei se era a intenção inicial dos programadores do projeto, mas por enquanto pode "quebrar um galho" pra quem tenha urgência.

 

Abraço.

 

ACBrCTeWebServices.pas

Bom dia pessoal!

 

@Juliomar Marchetti, vocês acham que seria possível publicar esta propriedade, para que o objeto FCTeRetornoOS possa ser acessado externamente? Acredito que seja útil, pois todos os dados da aprovação estão contidos nele.

 

Abraço.

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...