Ir para conteúdo
  • Cadastre-se

dev botao

Não encontrei o atributo: id


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

Recommended Posts

Postado

Boa tarde a todos,

 

Migrei hoje o componente do ACBr para o trunk2 e estou testando o CTe.

Ao tentar consultar um CT-e (que ainda não foi transmitido, isso é certeza) em ambiente de homologação tenho o seguinte erro:

Não encontrei o atributo: id.

Segue em anexo os XMLs.

O erro ocorre no comando Executar da Unit ACBrDFeWebServices na linha Result := TratarResposta;

 

Att, Marcos

35151164144330000214570010000027881195194004-ped-sit.xml

35151164144330000214570010000027881195194004-cte.xml

Marcos Gerene

[email protected]

Postado

Bom dia Ítalo,

 

Segue o trecho do código.

procedure ConsultaConhecimento(Chave : String);
var
Arquivo:String;
begin
Arquivo := ExtractFilePath(Application.ExeName)+'CTe\'+FormatFloat('0000',FrmPrincipal.QryEmpresaAtiva.FieldByName('EMP_CODIGO').AsInteger)+'\XML\'+Chave+'-cte.XML';
FrmPrincipal.Protocolo := '';
FrmPrincipal.StatusCTE := '';
if FileExists(Arquivo) then
   begin
   CTE.Conhecimentos.Clear;
   CTE.Conhecimentos.LoadFromFile(Arquivo);
   CTE.Consultar;

   FrmPrincipal.Protocolo := CTE.WebServices.Consulta.Protocolo;
   FrmPrincipal.StatusCTE := CTE.WebServices.Consulta.XMotivo;
   end;

Close;
end;

 

Marcos Gerene

[email protected]

Postado

Boa tarde Ítalo,

Eu já havia debugado, mas fiz o que pediu e o erro ocorre em Cte.Consultar;
 

Em 17/11/2015 16:03:47, Marcos Gerene disse:

Boa tarde a todos,

 

Migrei hoje o componente do ACBr para o trunk2 e estou testando o CTe.

Ao tentar consultar um CT-e (que ainda não foi transmitido, isso é certeza) em ambiente de homologação tenho o seguinte erro:

Não encontrei o atributo: id.

Segue em anexo os XMLs.

O erro ocorre no comando Executar da Unit ACBrDFeWebServices na linha Result := TratarResposta;

 

Att, Marcos

35151164144330000214570010000027881195194004-ped-sit.xml

35151164144330000214570010000027881195194004-cte.xml

 E se debugar no CTE.Consultar ocorre em TratarResposta dentro de ACBrCTeWebServices mais precisamente nesta linha:

              XML := AProcCTe.Gerador.ArquivoFormatoXML;

E o erro disparado vem de LerXml em pcteCTeR logo no segundo IF...

function TCTeR.LerXml: Boolean;
var
  ok: Boolean;
  i, j, i01, i02, i03, i04: Integer;
  sCST, Aspas: String;
begin
  Leitor.Grupo := Leitor.Arquivo;

  if Pos('versao="', Leitor.Arquivo) <> 0 then
    Aspas := '"'
   else
    Aspas := '''';

  CTe.infCTe.Id := Leitor.rAtributo('Id=');

  if OnlyNumber(CTe.infCTe.Id) = '' then
    raise Exception.Create('Não encontrei o atributo: Id');  //-> dispara esse exception

.....

Isto só ocorre com XMLs que acabei de gerar e não transmiti, se fizer com um XML já transmitido o erro não ocorre.

Xml em questão: 35151164144330000214570010000027891824512321-cte.xml

Marcos Gerene

[email protected]

Postado (editado)
2 horas atrás, Italo Jurisato Junior disse:

Bom dia Marcos,

Você não anexou o *-sit-soap.xml (retorno) somente o *-ped-sit-soap.xml (envio).

Me desculpa Ítalo, mas não está na pasta esse arquivo que você pediu....

tenho somente estes:

-cte.xml, -ped-sit.xml e -ped-sit-soap.xml

pasta.png.588f92f2ea072c9c391d0c4a3bb387

Editado por Marcos Gerene

Marcos Gerene

[email protected]

  • Consultores
Postado

Boa tarde Marcos,

O problema que o componente executa primeiro a Function TratarResposta e depois a Procedure SalvarResposta.

Como ocorreu um erro no TratarResposta não ocorre a gravação em disco do arquivo de retorno.

Em ACBrDFeWebServices temos a Function Executar e nesta o seguinte código:

      EnviarDados;
      Result := TratarResposta;
      FazerLog(GerarMsgLog, True);
      SalvarResposta;
faça a seguinte alteração:

      EnviarDados;

      SalvarResposta; <== inclua esta linha 

      Result := TratarResposta;
      FazerLog(GerarMsgLog, True);
      SalvarResposta;
 

Desta forma ele vai salvar o retorno antes de trata-lo.

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

Boa tarde Marcos,

No arquivo *-sit-soap.xml temos a rejeição 217, ou seja, o CT-e não consta na base de dados da SEFAZ.

Sendo assim o componente não deve tentar atualizar o XML, ou seja, incluir o grupo de informações sobre o protocolo.

Fiz uma alteração no componente a fim de só realizar essa atualização caso o CT-e conste da base de dados da SEFAZ.

Favor atualizar os fontes e testar novamente.

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

Bom dia Ítalo,

Tentei novamente e tive esse retorno

falha.png.1df84ed201af52fd31caca037d368b

Porém ao tentar novamente (apertei o mesmo botão de novo) não tive nenhum problema, e o retorno veio certo...

ok.png.dd3e9a0c4370d44434a5b432aac1fcf2.

 

Fechei o sistema, fechei o Delphi abri de novo exclui o executável recompilei... e o primeiro erro não aconteceu novamente, em 4 pesquisas todas retornaram ok (segunda imagem). Tomei como decisão ignorar o erro (primeira imagem) por não conseguir reproduzir ele novamente.

Muito obrigado,

Marcos

Marcos Gerene

[email protected]

Postado

Na verdade, acontece isso sempre, basta debugar (Meu cenário Rad Studio XE2).

Não sei todos aqui tem o habito de antes de iniciar o envio de um lote de consultar se existe o recibo para a chave. Pois o envio no meu caso só vai se retornar 217 no status da consulta. É justamente nesse momento que ocorre o erro.

  • Consultores
Postado

Bom dia,

Tome muito cuidado com consultas, pois isso pode levar a SEFAZ a bloquear o contribuinte por Consumo Indevido do Web Services.

Não entendo o porque de consultar a situação de um documento que nem sequer foi enviado para SEFAZ.

No meu entendimento a sua aplicação tem que ter um controle efetivo do que foi:

gerado e não enviado;

gerado, enviado e processado com sucesso;

gerado, enviado e sem retorno da SEFAZ (somente neste caso é que devemos realizar a consulta para saber se foi processado com sucesso ou não).

Não se deve também consultar o Status do Serviço antes do envio pela mesma razão acima (Consumo Indevido) e o segundo motivo, existe uma vontade muito grande da SEFAZ acabar com esse Web Service.

Reveja o seu fluxo de execução para não ter dor de cabeça futura.

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
6 minutos atrás, Italo Jurisato Junior disse:

Bom dia,

Tome muito cuidado com consultas, pois isso pode levar a SEFAZ a bloquear o contribuinte por Consumo Indevido do Web Services.

Não entendo o porque de consultar a situação de um documento que nem sequer foi enviado para SEFAZ.

No meu entendimento a sua aplicação tem que ter um controle efetivo do que foi:

gerado e não enviado;

gerado, enviado e processado com sucesso;

gerado, enviado e sem retorno da SEFAZ (somente neste caso é que devemos realizar a consulta para saber se foi processado com sucesso ou não).

Não se deve também consultar o Status do Serviço antes do envio pela mesma razão acima (Consumo Indevido) e o segundo motivo, existe uma vontade muito grande da SEFAZ acabar com esse Web Service.

Reveja o seu fluxo de execução para não ter dor de cabeça futura.

"existe uma vontade muito grande da SEFAZ acabar com esse Web Service."

Webservice do CTe? Vai ser unificado com o NFe? aonde posso ler mais sobre essa informaçao?

Marcos Gerene

[email protected]

  • Consultores
Postado

Bom dia Marcos,

Não, a SEFAZ quer acabar com o Web Services de consultar o status de Serviço, que diz que o serviço esta em operação ou não.

No meu entendimento um Web Service que não serve para nada, pois me diga qual é o serviço que esta em operação?

É o de Recepção, Retorno de Recepção, Consultar a Situação Atual de um Documento, Envio de Evento, Inutilização de Numeração ?

Se esse Web Service retornasse a situação de todos os Web Services, ai sim saberíamos quais serviços estão em operação e os que não estão.

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

Boa noite Marcos,

Alem de manter todos os fontes de todos os componentes atualizados diariamente eu visito os Portais Nacionais da NF-e / CT-e e MDF-e em busca de algum manual, nota técnica ou pacote de schemas novos.

Tenho também acesso a informações bem antes delas serem colocadas em pratica e serem publicadas em manuais e notas técnicas.

  • Curtir 1
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
12 horas atrás, Italo Jurisato Junior disse:

Bom dia,

Tome muito cuidado com consultas, pois isso pode levar a SEFAZ a bloquear o contribuinte por Consumo Indevido do Web Services.

Não entendo o porque de consultar a situação de um documento que nem sequer foi enviado para SEFAZ.

No meu entendimento a sua aplicação tem que ter um controle efetivo do que foi:

gerado e não enviado;

gerado, enviado e processado com sucesso;

gerado, enviado e sem retorno da SEFAZ (somente neste caso é que devemos realizar a consulta para saber se foi processado com sucesso ou não).

Não se deve também consultar o Status do Serviço antes do envio pela mesma razão acima (Consumo Indevido) e o segundo motivo, existe uma vontade muito grande da SEFAZ acabar com esse Web Service.

Reveja o seu fluxo de execução para não ter dor de cabeça futura.

é justamente por isso ítalo, não sei quando o usuário cancelou um processo, ou computador desligou no ato da transmissão, ou pior, se ele foi no pacote de ida e não voltou, seja por motivo do mais simples, como a internet perder conexão na hora, então, ao tentar transmitir sempre verifico, se tem ele já ativo na sefaz, simplesmente gravo o protocolo e finalizo o processo ali mesmo, caso contrário aciono o envio do lote.

é tudo uma questão de não confiar no usuário - trem danado para zicar as coisas.

Lembre-se, ainda estou enebriado de internet ruim aqui.

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