Ir para conteúdo
  • Cadastre-se

dev botao

Cce List Index Out Of Bounds(0)


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

Recommended Posts

  • Membros Pro
Postado

Quando executa

Result := WebServices.EnvEvento.Executar;

Da este erro

List index out of bounds(0)

 

quando faço uma cc-e

 

com este comando , sabendo que a 2 dias atrás tava tudo ok

 

 

 OpenDialog1.Title := 'Selecione o CTe';
 OpenDialog1.DefaultExt := '*-cte.xml';
 OpenDialog1.Filter := 'Arquivos CTe (*-cte.xml)|*-cte.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
 OpenDialog1.InitialDir := ACBrCTe1.Configuracoes.Geral.PathSalvar;

 if OpenDialog1.Execute then
  begin
   chave:= Copy(  ExtractFileName( OpenDialog1.FileName ) , 0 , 44);


      ACBrCTe1.EventoCTe.idLote := StrToInt( '1' );

      ACBrCTe1.EventoCTe.Evento.Clear;
      With ACBrCTe1.EventoCTe.Evento.Add Do
      Begin
         InfEvento.chCTe                 := chave;
         infEvento.cOrgao                := StrToInt( edtCodUF.Text );
         infEvento.CNPJ                  := edtEmitCNPJ.Text;
         infEvento.tpEvento              := teCCe;
         infEvento.nSeqEvento            := 1;
         infEvento.dhEvento              := Now;
         //infEvento.detEvento.xCondUso    := '';
         //infEvento.detEvento.nProt       :='';


         
         numero:=0;

         infEvento.detEvento.infCorrecao.Clear;

         ClientDataSet1.First;
         while not ClientDataSet1.Eof do
         begin


             With infEvento.detEvento.infCorrecao.Add Do
             Begin

                numero:= numero + 1;

                //grupoAlterado := 'compl';
                //campoAlterado := 'xObs';
                //valorAlterado := 'TESTANDO OBS OK';

                grupoAlterado := CCeCampos(1, ClientDataSet1Campo.Text );
                campoAlterado := CCeCampos(2, ClientDataSet1Campo.Text );
                valorAlterado := ClientDataSet1Valor.Text;
                nroItemAlterado := numero;


             End;



            ClientDataSet1.Next;
         end;



      End;


      memoLog.Text:='';

      IF MessagemSimouNao(4,'Confirma ( '+chave+' ) ?')=True then
      ACBrCTe1.EnviarEventoCTe( 1 );

 

 

--------------------------------------------------------------------------------------------------

 

 

function TACBrCTe.EnviarEventoCTe(idLote: Integer): Boolean;
var
  i: integer;
begin
  if EventoCTe.Evento.Count <= 0 then
   begin
      if Assigned(Self.OnGerarLog) then
         Self.OnGerarLog('ERRO: Nenhum Evento adicionado ao Lote');
      raise EACBrCTeException.Create('ERRO: Nenhum Evento adicionado ao Lote');
     exit;
   end;

  if EventoCTe.Evento.Count > 1 then
   begin
      if Assigned(Self.OnGerarLog) then
         Self.OnGerarLog('ERRO: Conjunto de Eventos transmitidos (máximo de 1) excedido. Quantidade atual: '+IntToStr(EventoCTe.Evento.Count));
      raise EACBrCTeException.Create('ERRO: Conjunto de Eventos transmitidos (máximo de 1) excedido. Quantidade atual: '+IntToStr(EventoCTe.Evento.Count));
     exit;
   end;

  WebServices.EnvEvento.idLote := idLote;

  {Atribuir nSeqEvento, CNPJ, Chave e/ou Protocolo quando não especificar}
  for i:= 0 to EventoCTe.Evento.Count -1 do
  begin
    try
      if EventoCTe.Evento.Items.InfEvento.nSeqEvento = 0 then
        EventoCTe.Evento.Items.infEvento.nSeqEvento := 1;
      if trim(EventoCTe.Evento.Items.InfEvento.CNPJ) = '' then
        EventoCTe.Evento.Items.InfEvento.CNPJ := self.Conhecimentos.Items.CTe.Emit.CNPJ;
      if trim(EventoCTe.Evento.Items.InfEvento.chCTe) = '' then
        EventoCTe.Evento.Items.InfEvento.chCTe := copy(self.Conhecimentos.Items.CTe.infCTe.ID, (length(self.Conhecimentos.Items.CTe.infCTe.ID)-44)+1, 44);
      if trim(EventoCTe.Evento.Items.infEvento.detEvento.nProt) = '' then
      begin
        if EventoCTe.Evento.Items.infEvento.tpEvento = teCancelamento then
          EventoCTe.Evento.Items.infEvento.detEvento.nProt := self.Conhecimentos.Items.CTe.procCTe.nProt;
      end;
    except
    end;
  end;
  {**}

  Result := WebServices.EnvEvento.Executar;
  if not Result then
  begin
    if Assigned(Self.OnGerarLog) then
      Self.OnGerarLog(WebServices.EnvEvento.Msg);
    if WebServices.EnvEvento.Msg <> ''
     then raise EACBrCTeException.Create(WebServices.EnvEvento.Msg)
     else raise EACBrCTeException.Create('Erro Desconhecido ao Enviar Evento de CT-e!')
  end;
end;

  • Consultores
Postado

Tem como você durante o debug apertar o F7 nesta linha para ver onde exatamente acontece o erro?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Membros Pro
Postado (editado)

//Essa linha

 

TACBrCTe( FACBrCTe ).SetStatus( stCTeIdle );
    aMsg := 'Ambiente : '+TpAmbToStr(EventoRetorno.retEvento.Items[0].RetInfEvento.tpAmb)+LineBreak+
            'Versão Aplicativo : '+EventoRetorno.retEvento.Items[0].RetInfEvento.verAplic+LineBreak+
            'Status Código : '+IntToStr(EventoRetorno.retEvento.Items[0].RetInfEvento.cStat)+LineBreak+
            'Status Descrição : '+EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo+LineBreak;

 

 

Analizando o conteudo

RetInfEvento.verAplic estar vazio

RetInfEvento.xMotivo estar vazio

 

function TCTeEnvEvento.Executar: Boolean;
var
  aMsg, NomeArq: string;
  Texto : String;
  Acao  : TStringList;
  Stream: TMemoryStream;
  StrStream: TStringStream;
  i, j : integer;
  Leitor : TLeitor;
  {$IFDEF ACBrCTeOpenSSL}
     HTTP: THTTPSend;
  {$ELSE}
     ReqResp: THTTPReqResp;
  {$ENDIF}
begin
  FEvento.idLote := idLote;
  if Assigned(FEventoRetorno) then
     FEventoRetorno.Free;

  inherited Executar;

  Acao   := TStringList.Create;
  Stream := TMemoryStream.Create;
  FcStat := 0;

  Texto := '<?xml version="1.0" encoding="utf-8"?>';
  Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
  Texto := Texto +   '<soap12:Header>';
  Texto := Texto +     '<cteCabecMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento">';
  Texto := Texto +       '<cUF>'+IntToStr(FConfiguracoes.WebServices.UFCodigo)+'</cUF>';
  Texto := Texto +       '<versaoDados>'+CTeEventoCTe+'</versaoDados>';
  Texto := Texto +     '</cteCabecMsg>';
  Texto := Texto +   '</soap12:Header>';
  Texto := Texto +   '<soap12:Body>';
  Texto := Texto +     '<cteDadosMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento">';
  Texto := Texto +       FDadosMsg;
  Texto := Texto +     '</cteDadosMsg>';
  Texto := Texto +   '</soap12:Body>';
  Texto := Texto +'</soap12:Envelope>';

  Acao.Text := Texto;

   {$IFDEF ACBrCTeOpenSSL}
     Acao.SaveToStream(Stream);
     HTTP := THTTPSend.Create;
  {$ELSE}
     ReqResp := THTTPReqResp.Create(nil);
     ConfiguraReqResp( ReqResp );
     ReqResp.URL := FURL;
     ReqResp.UseUTF8InHeader := True;
     ReqResp.SoapAction := 'http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento/cteRecepcaoEvento';
  {$ENDIF}

  try
    TACBrCTe( FACBrCTe ).SetStatus( stCTeEvento );

    FPathArqEnv := IntToStr(FEvento.idLote)+'-ped-evento.xml';

    if FConfiguracoes.Geral.Salvar then
      FConfiguracoes.Geral.Save(FPathArqEnv, FDadosMsg);

    if FConfiguracoes.Arquivos.Salvar then
     begin
       if (FEvento.Evento.Items[0].InfEvento.tpEvento = teCCe) and not FConfiguracoes.Arquivos.SalvarCCeCanEvento then
          FConfiguracoes.Geral.Save(FPathArqEnv, FDadosMsg, FConfiguracoes.Arquivos.GetPathCCe)
       else if (FEvento.Evento.Items[0].InfEvento.tpEvento = teCancelamento) and not FConfiguracoes.Arquivos.SalvarCCeCanEvento then
          FConfiguracoes.Geral.Save(FPathArqEnv, FDadosMsg, FConfiguracoes.Arquivos.GetPathCan)
       else
          FConfiguracoes.Geral.Save(FPathArqEnv, FDadosMsg, FConfiguracoes.Arquivos.GetPathEvento(FEvento.Evento.Items[0].InfEvento.tpEvento));
     end;

    {$IFDEF ACBrCTeOpenSSL}
       HTTP.Document.LoadFromStream(Stream);
       ConfiguraHTTP(HTTP,'SOAPAction: "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento/cteRecepcaoEvento"');
       HTTP.HTTPMethod('POST', FURL);

       StrStream := TStringStream.Create('');
       StrStream.CopyFrom(HTTP.Document, 0);
       FRetornoWS := TiraAcentos(ParseText(StrStream.DataString, True));
       FRetWS := SeparaDados( FRetornoWS,'cteRecepcaoEventoResult');
       StrStream.Free;
    {$ELSE}
       ReqResp.Execute(Acao.Text, Stream);
       StrStream := TStringStream.Create('');
       StrStream.CopyFrom(Stream, 0);
       FRetornoWS := TiraAcentos(ParseText(StrStream.DataString, True));
       FRetWS := SeparaDados( FRetornoWS,'cteRecepcaoEventoResult');
       StrStream.Free;
    {$ENDIF}

    FPathArqResp := IntToStr(FEvento.idLote) + '-eve.xml';

    if FConfiguracoes.Geral.Salvar then
      FConfiguracoes.Geral.Save(FPathArqResp, FRetWS);

    FEventoRetorno                := TRetEventoCTe.Create;
    FEventoRetorno.Leitor.Arquivo := FRetWS;
    FEventoRetorno.LerXml;

    TACBrCTe( FACBrCTe ).SetStatus( stCTeIdle );
    aMsg := 'Ambiente : '+TpAmbToStr(EventoRetorno.retEvento.Items[0].RetInfEvento.tpAmb)+LineBreak+
            'Versão Aplicativo : '+EventoRetorno.retEvento.Items[0].RetInfEvento.verAplic+LineBreak+
            'Status Código : '+IntToStr(EventoRetorno.retEvento.Items[0].RetInfEvento.cStat)+LineBreak+
            'Status Descrição : '+EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo+LineBreak;

brigado pela atenção.
 

post-4970-0-53893800-1402315514_thumb.jp

Editado por EMBarbosa
  • Consultores
Postado

   Pelo visto o erro está no fato de não haver nenhum item no EventoRetorno.retEvento.Items. Creio que se você ligar inspecionar o valor de EventoRetorno.retEvento.Items.Count vai ser zero.

 

   Esse componente não é o que eu estou mais familiarizado mas, se eu entendi o código bem, parece que o problema está no arquivo de retorno. Veja essa parte do código logo antes do exception. Ela zera justamente esses objetos e daí lê do arquivo xml:

    FEventoRetorno                := TRetEventoCTe.Create;
    FEventoRetorno.Leitor.Arquivo := FRetWS;
    FEventoRetorno.LerXml;

  Isso me leva a crer que é um problema na leitura do xml.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado

Sim, você pode.

Pode tentar verificar se minha teoria está correta e o arquivo xml está sendo carregado. Se o valor de EventoRetorno.retEvento.Items.Count é mesmo zero. Talvez possa entrar dentro do código do LerXml e talvez lá você consiga pegar algum erro de retorno.

Também poderia verificar se há outras pessoas do seu estado tendo problemas.

 

Além disso, podemos pedir para o Ítalo ou outro programador tentar verificar mais a fundo.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado

Boa tarde a todos,

 

Heto Andrade, por favor realize a seguinte alteração na rotina que você postou.

 

if FConfiguracoes.Geral.Salvar then
      FConfiguracoes.Geral.Save(FPathArqResp, FRetWS);

 

altere para

 

if FConfiguracoes.Geral.Salvar then

      FConfiguracoes.Geral.Save(FPathArqResp, FRetornoWS);

 

Isso faz com que o componente salve o retorno da SEFAZ sem separar os dados.

Se o XML de retorno da SEFAZ estiver com problemas será possível detecta-lo desta forma.

 

Altere a rotina e teste mais uma vez, e poste como anexo o XML salvo.

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

  • Membros Pro
Postado

    if FConfiguracoes.Geral.Salvar then
      //FConfiguracoes.Geral.Save(FPathArqResp, FRetWS);
      FConfiguracoes.Geral.Save(FPathArqResp, FRetornoWS);
 

 

 

mais o mesmo erro,

 

e nao sei dizer que a sefaz faz 3 dias com este erro.

post-4970-0-80788100-1402351040_thumb.jp

  • Consultores
Postado

Boa noite Heto Andrade,

 

O erro não iria mudar com a alteração que lhe propus.

 

O que muda é o conteúdo do arquivo salvo.

 

Por favor post como anexo o arquivo de retorno para que possamos analisar.

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

Como disse antes, não é bem minha área, mas veja aí o arquivo 1-eve.xml. O retorno parece ser um erro, não concorda Ítalo?

Abaixo, parte do arquivo:

<soapenv:Fault>
   <soapenv:Code xmlns:ns1="http://xml.apache.org/axis/">
    <soapenv:Value>ns1:Server.NoService</soapenv:Value>
   </soapenv:Code>
   <soapenv:Reason>
    <soapenv:Text xml:lang="en">The AXIS engine could not find a target service to invoke!  targetService is cteRecepcaoEvento</soapenv:Text>
   </soapenv:Reason>
   <soapenv:Detail>
    <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">tapajos12.sefaz.mt.gov.br</ns2:hostname>
   </soapenv:Detail>
  </soapenv:Fault>

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
×
×
  • 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...
The popup will be closed in 10 segundos...