Jump to content

dev botao

Cce List Index Out Of Bounds(0)


Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 3829 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Posted

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
Posted

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
Posted (edited)

//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

Edited by EMBarbosa
  • Consultores
Posted

   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
Posted

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
Posted

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
Posted

    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
Posted

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.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...