Ir para conteúdo
  • Cadastre-se

dev botao

Erro Ocorre No Ambiente De Produção E Não Em Homologação


  • Este tópico foi criado há 3919 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Caros amigos,

 

Desde a ultima sexta-feira, dia 28 de junho, estamos com um problema sério na envio da NFe 

para a SEFAZ-PE, no ambiente de homologação ocorre tudo sem problema, no entanto no

ambiente de produção gera o erro: list index out of bound (0)

 

PS: Importante, trouxe a base do cliente para minha máquina e emiti NFe sem problema

      tanto em produção como homologação. 

 

alguém sabe o que está gerando esse erro e como consertar ?

 

Grato

Joselito Nascimento

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

  • Moderadores

Sem ver seu código é impossível saber o problema, este erro ocorre quando vc tenta acessar o objeto de uma lista que não existe, pode ser no componente, em algum código do seu programa relacionado ao componente ou em algo totalmente fora do ACBrNFe. Vc consegue reproduzir o problema com o demo? Ou tem algum log gerado no computador que ocorre o problema?

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Caro André, 

 

Aí é que a porca torce o rabo, não consegui simular o erro na máquina de desenvolvimento, pelo contrário

aqui a NF-e é enviada tanto em ambiente de produção como em ambiente de homologação.  Mas acredito 

que seja algo com relação ao sistema operacional, pois em outra máquina do mesmo cliente, conseguimos 

enviar ontem, já em uma outra máquina dele, conseguia enviar em ambiente de homologação mas dava o erro 

no ambiente de produção. Para desencargo de consciência, registramos novamente a capicom.dll, a versão 

que trabalhamos é a 2.1.0.2. o windows do nosso cliente é o XP, com a atualização automática desativada

e nada.

 

Com relação ao nosso programa, fazemos apenas o café com leite, como segue abaixo:

 

01) Selecionamos os dados da NFe;

02) Alimentamos os atributos do TACBrNFe com os dados da seleção;

03) Executamos como segue abaixo:

            msgEnvio := msgInicio + ' Gerando NFe...';
            Dm1.NFe.NotasFiscais.GerarNFe;
            msgEnvio := msgInicio + ' Assinando NFe...';
            Dm1.NFe.NotasFiscais.Assinar;
            msgEnvio := msgInicio + ' Validando NFe...';
            Dm1.NFe.NotasFiscais.Valida;
            msgEnvio := msgInicio + ' Enviando NFe...';
            //Dm1.NFe.WebServices.Envia(0);
            Dm1.NFe.Enviar(0,false,false);
04) Tratamos o retorno.

 

PS) O erro ocorre quando se tenta enviar para fazenda, haja visto que ocorre após a mensagem 

      "Enviando NFe..." ser mostrada.

       Trocamos o Dm1.NFe.WebServices.Envia(0) por Dm1.NFe.Enviar(0,false,false), mesmo assim

       continuou com erro.

 

Isso é o que eu tenho por enquanto.

Grato

Joselito Nascimento

Link para o comentário
Compartilhar em outros sites

Vou editar alguma coisa pra não ficar muito grande OK ? os UPDATES foram editados.

 

 

 msgEnvio := msgInicio + ' Preenchendo dados pós envio...';
 with Dm1.QyAuxiliar do
 begin
    Close;
    if copy(CBoxTpMov.Text,1,1) = '1' then   // Saida
    begin
       Sql.Text := 'UPDATE TbSaidaFiscal ...
    end
    else
    begin
       Sql.Text := 'UPDATE TbEntradaFiscal ...
    end;
    Parameters.ParamByName('NUMERONFISCAL').Value    := Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.nNF;
    Parameters.ParamByName('SERIENFISCAL').Value     := IntToStr(Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.serie);
    Parameters.ParamByName('FLGNFE').Value           := 'E';
    Parameters.ParamByName('PLACAVEICULO').Value     := EdPlaca.Text;
    Parameters.ParamByName('UFPLACA').Value          := EdUf.Text;
    Parameters.ParamByName('IDTRANSPORTADORA').Value := TbTransportadoraIDTransp.AsString;
    Parameters.ParamByName('DATASAIDA').Value        := DatSai.Date;
    Parameters.ParamByName('CHAVENFE').Value         := Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].chNFe;
    Parameters.ParamByName('PROTOCOLONFE').Value  :=  m1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].nProt;
    Parameters.ParamByName('NUMRECEBIMENTONFE').Value:= Dm1.NFe.WebServices.Retorno.NFeRetorno.nRec;
    Parameters.ParamByName('TIPOEMISSAONFE').Value   := Dm1.sTipoEmissaoNFE;
    Parameters.ParamByName('DATAEMISSAO').Value      := DatEmi.Date;
    ExecSQL;
 end;
 // seta canhoto da nfe
Dm1.danfeRL.ExibirResumoCanhoto_Texto := 'EMISSÃO: ' + FormatDateTime('DD/MM/YYYY',                 Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.dEmi) + '  -  ' +
                                                                            'DEST. / REM.: ' +   Dm1.NFe.NotasFiscais.Items[0].NFe.Dest.xNome + '  -  ' +
                                                                            'PEDIDO: ' + Dm1.QyGeral.FieldByName('IDPEDIDO').AsString + '  -  ' +
                                                                            'VALOR TOTAL: R$ ' + FormatFloat('###,###,###,##0.00',
Dm1.NFe.NotasFiscais.Items[0].NFe.Total.ICMSTot.vNF);
Dm1.NFe.NotasFiscais.Imprimir;
end;
except
   on e: exception do
   begin
      // em caso de nota fiscal denegada, registra a ocorrencia
      if (Dm1.NFe.WebServices.Retorno.cStat = 110)
      or (Dm1.NFe.WebServices.Retorno.cStat = 301)
      or (Dm1.NFe.WebServices.Retorno.cStat = 302) then
      begin
         if      (Dm1.NFe.WebServices.Retorno.cStat = 110) then
                  ObsDeneg := '110-NFE DENEGADA'
         else if (Dm1.NFe.WebServices.Retorno.cStat = 301) then
                  ObsDeneg := '301-NFE DENEGADA-IRREGULARIDADE FISCAL DO EMITENTE'
         else if (Dm1.NFe.WebServices.Retorno.cStat = 302) then
                  ObsDeneg := '302-NFE DENEGADA-IRREGULARIDADE FISCAL DO DESTINATARIO';
         with Dm1.QyAuxiliar do
         begin
            Close;
            Sql.Text := 'UPDATE TbSaidaFiscal ....
            Parameters.ParamByName('FlgNFE').Value       := 'E';
            Parameters.ParamByName('ChaveNFe').Value  := Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].chNFe;
            Parameters.ParamByName('PROTOCOLONFE').Value := Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].nProt;
            Parameters.ParamByName('Observacao1').Value     := ObsDeneg;
            Parameters.ParamByName('SituacaoNFiscal').Value := 'D';
            Parameters.ParamByName('NumeroNFiscal').Value   := Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.nNF;
            Parameters.ParamByName('SERIENFISCAL').Value    := EdSerieNF.Text;
            Parameters.ParamByName('DataEmissao').Value     := DatEmi.Date;
            ExecSQL;
         end;
         // atualiza o pedido com o numero da NF
         with Dm1.QyAuxiliar do
         begin
            Close;
            Sql.Text := 'UPDATE TbPedido SET NFEmitida = ''N'',             ' +
                              'NFNumero = Null, NFSerie = NULL                    ' +
                              'WHERE NFNumero = :NFNumero AND NFSerie = :NFSerie  ' ;
            Parameters.ParamByName('NFNumero').Value := Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.nNF;
            Parameters.ParamByName('NFSerie').Value  := EdSerieNF.Text;
            ExecSQL;
         end;
      end
      else
      begin
         with Dm1.QyAuxiliar do
         begin
            Close;
            Sql.Text := 'UPDATE TbSaidaFiscal SET DataEmissao = :DataEmissao,' +
                              'ChaveNFe = :ChaveNFe                                ' +
                              'WHERE NumeroNFiscal = :NumeroNFiscal                ' +
                              'AND SERIENFISCAL = :SERIENFISCAL                    ' ;
            Parameters.ParamByName('NumeroNFiscal').Value := Dm1.NFe.NotasFiscais.Items[0].NFe.Ide.nNF;
            Parameters.ParamByName('SERIENFISCAL').Value := EdSerieNF.Text;
            Parameters.ParamByName('DataEmissao').Value := DatEmi.Date;
            Parameters.ParamByName('ChaveNFe').Value := Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].chNFe;
            ExecSQL;
         end;
         // Em caso de erro, não vem o numero do protocolo, aqui tentamos pegar novamente
         Dm1.NFe.WebServices.Consulta.NFeChave := Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].chNFe;
         //
         try
            Application.ProcessMessages;
            Dm1.NFe.WebServices.Consulta.Executar;
            with Dm1.QyAuxiliar do
            begin
               Close;
               Sql.Text := 'UPDATE TBSAIDAFISCAL SET PROTOCOLONFE =                                     ' +
                                 QuotedStr(Dm1.NFe.WebServices.Consulta.Protocolo) + '                        ' +
                                 'WHERE CHAVENFE =                                                            ' +
                                 QuotedStr(Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0].chNFe) + ' ' ;
               ExecSQL;
            end;
         finally
            Cursor := crDefault;
         end;
      end;
      if trim(Dm1.NFe.WebServices.Retorno.Msg) = '' then
      begin
         MessageDlg(e.Message,mtError,[mbOK],0);
      end
      else
      begin
         if (Dm1.NFe.WebServices.Retorno.cStat = 110)
         or (Dm1.NFe.WebServices.Retorno.cStat = 301)
         or (Dm1.NFe.WebServices.Retorno.cStat = 302) then
         begin
            MessageDlg(Dm1.NFe.WebServices.Retorno.Msg     +
            'CHAVE: ' + Dm1.NFe.WebServices.Retorno.ChaveNFe + chr(13) +
            'O Pedido Está Liberado Para Gerar Nova Nota Fiscal',mtError,[mbOK],0);
         end
         else
         begin
            MessageDlg(Dm1.NFe.WebServices.Retorno.Msg + chr(13) +
            'CHAVE: ' + Dm1.NFe.WebServices.Retorno.ChaveNFe + chr(13) +
            'Ocorreu Um Erro no Retorno do XML. Verifique Necessidade de Cancelar a NF-e',mtError,[mbOK],0);
         end;
      end;
   exit;
end;
 
end;   // 0-fim
Link para o comentário
Compartilhar em outros sites

  • Moderadores

O problema pode estar nas linhas que começam com "Dm1.NFe.WebServices.Retorno.NFeRetorno.ProtNFe.Items[0]", se por algum motivo a nota não foi autorizada(erros de validação, problemas na conexão, etc) essa lista não vai existir, e vai dar o erro citado no começo do tópico.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

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