Ir para conteúdo
  • Cadastre-se

dev botao

CTe OS - Não consigo obter o retorno


IvanGoncalves
  • 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

Olá pessoal, estou nos finalmentes da adaptação do nosso software para atender também o CT-e OS.

Minha dificuldade está em obter o retorno através do componente (obs.: o arquivo XML de retorno está sendo salvo no computador normalmente).

Bom, para o CT-e modelo 57, consigo (com o mesmo código fonte) obter o retorno, mas para o CT-e modelo 67 não consigo, pois os objetos não estão preenchidos.

Segue trecho do código fonte exemplificando como estou obtendo o retorno:

    for i:= 0 to objACBrCTe.Conhecimentos.Count - 1 do begin
      ...
      ...
      ...
      ParamByName('RECIBO').AsString       := objACBrCTe.WebServices.Retorno.CTeRetorno.nRec;
      ParamByName('CHAVE').AsString        := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].chCTe;
      ParamByName('STATUS').AsInteger      := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].cStat;
      ParamByName('MOTIVO').AsString       := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].xMotivo;
      ParamByName('PROTOCOLO').AsString    := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].nProt;
      ParamByName('DATA_HORA').AsDateTime  := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].dhRecbto;
      ParamByName('DIGEST_VALUE').AsString := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].digVal;
      ParamByName('VER_APLIC').AsString    := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].verAplic;
      ParamByName('XML').AsMemo            := UTF8ToString(objACBrCTe.Conhecimentos.Items[i].XML); // conteudo completo do arquivo XML
      ...
      ...
      ...
    end;

Se eu verificar a propriedade "objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Count", esta zerado.

Existe alguma outra forma que eu não saiba para obter estes campos?

Meus fontes estão atualizados.

Já estou "debugando" o componente para tentar entender o que pode estar acontecendo, mas até agora nada, agradeço se alguém puder ajudar.

Vou continuar a procura.

Obrigado.

Editado por rosemir
comentário incorreto
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rosemir,

Lembre-se que o envio do CT-e é assíncrono, ou seja, ao enviar o que temos como resposta é apenas o numero do Recibo, consequentemente devemos realizar uma consulta para obter o resultado do processamento.

Por outro lado o envio do CT-e OS é síncrono, ou seja, ao enviar o que temos como resposta já é o resultado do processamento.

Dito isso, em vez de: ParamByName('PROTOCOLO').AsString := objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items[ i ].nProt;

Faça dessa forma: ParamByName('PROTOCOLO').AsString := objACBrCTe.Conhecimentos.Items[ i ].CTe.procCTe.nProt;

  • Curtir 1
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

Olá @Italo Jurisato Junior

Muito obrigado pela resposta.

Realmente dessa forma consigo obter os valores, desde que ocorra de forma normal, sem erros.

Ai me deparei com o seguinte problema, o primeiro CT-e que enviei, foi autorizado, porém, não consegui obter o retorno. Tentando enviar novamente, ocorre o erro 204, duplicidade, normal nessa situação, porém, com o modo assíncrono, consigo mesmo assim obter o número do recibo (objACBrCTe.WebServices.Retorno.CTeRetorno.nRec), a chave de acesso (objACBrCTe.WebServices.Retorno.CTeRetorno.ProtCTe.Items.chCTe) e o conteúdo do arquivo XML autorizado (objACBrCTe.Conhecimentos.Items.XML).

Poderia fazer uma consulta, porém, não tenho o número do recibo ou a chave de acesso.

A questão toda é que tanto na NF-e quanto no CT-e, se ocorre erro de duplicidade, consigo fazer uma consulta e verificar se realmente é duplicidade ou se trata de um outro documento (verificando o digest value) e sigo a emissão normalmente, ficando transparente para o usuário.

Minha dúvida é, consigo obter essas informações enviando o CT-e OS? ou por se tratar de envio síncrono isso não é possível?

Detalhe: mesmo sendo síncrono, o ACBr salva o arquivo XML de retorno no computador (com o erro 204), apenas não estou conseguindo buscar as informações desse arquivo através dos objetos do componente.

Grato.

Editado por rosemir
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Rosemir,

Quando ocorre problemas e o XML fica sem o protocolo de autorização, já mais devemos enviar novamente.

E sim devemos carregar o XML em questão e executar o método Consultar.

Se o problema foi no retorno ao realizar a consulta teremos como resposta o protocolo e o XML será atualizado.

Por outro lado se o problema foi no envio teremos como resposta que o documento não consta da base de dados da SEFAZ, ai sim devemos realizar o envio novamente.

A dica acima deve ser aplicada para a NF-e, NFC-e, CT-e, CT-e OS e MDF-e.

Como você não tem a chave para realizar a consulta?

  • Curtir 1
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

@Italo Jurisato Junior

Referente ainda sobre o retorno, fiz as modificações. Porém, tenho o habito de gravar todos as respostas do WS no banco de dados.

Ai fiz um envio que retornou um erro lá do SEFAZ: "760 - Rejeição: INSS deve ser preenchido para tomador pessoa jurídica"

Você comentou sobre utilizar da seguinte forma: objACBrCTe.Conhecimentos.Items.CTe.procCTe.cStat

Funciona certinho desde que a resposta seja: 100 - Autorizado o uso do CT-e

Como eu faria para obter os valores quando há rejeição por parte do SEFAZ, pois nesse caso "objACBrCTe.Conhecimentos.Items.CTe.procCTe.cStat = 0".

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Rosemir,

Já tentou desta forma?

   sStat     := IntToStr(ACBrCTe.WebServices.Enviar.cStat);
 

  • Curtir 2
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

  • 2 meses depois ...

Pessoal boa noite,  aqui comigo ao enviar uma CTE, não consigo obter o recibo nem protocolo ambos vem sempre vazio, porem o cStat vem com o 100 e o Cte esta autorizado.

ACBrCTe.Enviar(1);

ACBrCTe.WebServices.Enviar.Recibo ( Vem vazio )

Como pegar o Protocolo de autorização ?

Recibo VAzio.png

Editado por tbalbinos

Thiago Balbino

Analista de Sistemas Programador

email: [email protected]

Muriaé - MG

 

Link para o comentário
Compartilhar em outros sites

Consegui pegar p Protocolo de autorização, só falta o recibo. Agora uma duvida parece que para CT-e OS não existe recibo, procede ?

Protocolo := ACBrCTe.Conhecimentos.Items[0].CTe.procCTe.nProt; // OK- Funcionou

Editado por tbalbinos

Thiago Balbino

Analista de Sistemas Programador

email: [email protected]

Muriaé - MG

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa noite, também estou com problema do retorno do Recibo, estou usando a mesma rotina do CTe para o CTeOS, ver abaixo:

       vACBrCTe.Enviar(vLote, False);  Se OK

      vACBrCTe.Consultar;

No CTe retorna todas as informações abaixo, mas no CTeOS não retorna o Recibo.

              FieldByName('ChaveCTe_Frete_Carga').AsString        := vACBrCTe.WebServices.Consulta.protCTe.chCTe;
              FieldByName('DTAutCTe_Frete_Carga').AsDateTime := vACBrCTe.WebServices.Consulta.dhRecbto;
              FieldByName('ProtocCTe_Frete_Carga').AsString       := vACBrCTe.WebServices.Consulta.protCTe.nProt;
              FieldByName('ReciboCTe_Frete_Carga').AsString      := vACBrCTe.WebServices.Enviar.Recibo;

Agradeço uma ajuda.

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Luiz,

Não temos o Recibo, pelo simples fato de que o envio do CT-e OS ser síncrono, ou seja, o retorno que temos ao enviar já é o resultado do processamento.

Logo você vai ter o retorno da seguinte forma:

Protocolo := ACBrCTe.Conhecimentos.Items[ 0 ].CTe.procCTe.nProt;

Os demais dados você consegue mudando o nProt pelas demais propriedades disponíveis.

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

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