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á 3825 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.