Ir para conteúdo
  • Cadastre-se

dev botao

Retorno do Lote após envio p/ atualizar BD


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

Recommended Posts

  • Moderadores
ACBrNFSe1.NotasFiscais.Clear;
TRY
  qryNotas.First;
  While not qryNotas.Eof do
  begin
    AlimentaComponente(sAux, vNumLote);
    qryNotas.Next;
  end;
  ACBrNFSe1.Enviar(vNumLote);
EXCEPT ON E:EXCEPTION DO
  begin
    MostraErro;
    Exit;
  end;
END;

-----atualizar dados nas notas fiscais do lote----

após o comando ACBrNFSe1.Enviar(vNumLote), se não houve nenhum erro, qual o comando correto para capturar os dados de retorno do provedor para atualizar o banco de dados de todas as notas contidas no lote?

Para cada NFSe tenho que atualizar: Data de Autorização, Protocolo de Autorização, Nome do Arquivo, Codigo de Verificação, Situação da nota (autorizada,cancelada), Motivo do cancelamento, Motivo da Rejeição, etc.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Graça,

Veja este exemplo:

  ACBrNFSe1.Enviar(vNumLote);

  for x := 0 to iQtde - 1 do
  begin
    MemoDados.Lines.Add('Nome XML: ' + ACBrNFSe1.NotasFiscais.Items[ x ].NomeArq);
    MemoDados.Lines.Add('Nota Numero: ' + ACBrNFSe1.NotasFiscais.Items[ x ].NFSe.Numero);
    MemoDados.Lines.Add('Código de Verificação: ' + ACBrNFSe1.NotasFiscais.Items[ x ].NFSe.CodigoVerificacao);
  end;
 

  • 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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
  • Solution

Olá @Gr@c@

Aqui fazemos +/- da seguinte forma:

Após o envio, fazemos uma consulta da situação do lote, para ver se o lote foi recebido com sucesso.

Depois fazemos a consulta do lote e atualizamos o status de cada NFSe do lote.

Segue o trecho de código pra você analisar.

              if not ( ACBrNFSe1.WebServices.ConsultaSituacao( sProtocolo, IntToStr(iLote) ) ) then
                raise Exception.Create('Erro na consulta do lote de NFSe. Aguarde alguns instantes e tente novamente.');

              // Se a situação do lote for igual a 1-Lote não recebido
              // Ou 2-Lote não processado, aguarda o processamento
              slSituacaoLote := StrToSituacaoLoteRPS(bOk, ACBrNFSe1.WebServices.ConsSitLoteRPS.Situacao );
              if ( slSituacaoLote in [slrNaoRecibo, slrNaoProcessado] ) then
              begin
                raise Exception.Create('Lote ainda não processado.'+#13#10+
                                        ACBrNFSe1.WebServices.ConsSitLoteRPS.aMsg);
              end;
            except
              on E:Exception do
              begin
                raise Exception.Create('Lote não processado: '+E.Message);
              end;
            end;
          end;
        end);


        // Se o lote foi processado com sucesso ou com erro,
        // Faz a consulta do Lote para receber os resultados de processamento
        if ( slSituacaoLote in [slrProcessadoErro, slrProcessadoSucesso] ) then
        begin
          if not ( ACBrNFSe1.ConsultarLoteRps( IntToStr(iLote), sProtocolo ) ) then
            raise Exception.Create('Erro na consulta do lote de NFSe. Aguarde alguns instantes e tente novamente.');
        end;

        // verifica o retorno
        sNFEsComErro := '';
        for i:= 0 to ACBrNFSe1.NotasFiscais.Count - 1 do
        begin
          // salvar status do pedido e o novo XML
          db := TDB.Create(SQLConnection);
          try
            try
              db.CodigoSQL := 'update PEDIDOS P set '+
                              'P.NFE_CSTAT = :pStat ';
              db.LimpaParametros;
              // SE A NFE FOI AUTORIZADA
              if ( ACBrNFSe1.NotasFiscais.Items[i].Confirmada ) then
              begin
                bNotasAutorizadas := True;

                db.AddParametro(100,ftInteger);
                // pega o Link da NFSe
                sLinkNFSe := '';
                NFSe := ACBrNFSe1.NotasFiscais.Items[i].NFSe;

                sLinkNFSe := ACBrNFSe1.LinkNFSe(StrToIntDef(NFSe.Numero,0),
                             NFSe.CodigoVerificacao );
                db.CodigoSQL := db.CodigoSQL +
                                ',P.NFSE_XML = :pXML, '+
                                'P.NFE_PROTOCOLO = :pProtocolo, '+
                                'P.NUMERO_NF_PED = :pNumero_NF_Ped, '+
                                'P.NFSE_LINK = :pNFSe_Link ';

                ss := TStringStream.Create(ACBrNFSe1.NotasFiscais.Items[i].XMLNFSe, TEncoding.UTF8);
                try
                  db.AddParametro(ss, ftBlob);
                finally
                  ss.Free;
                end;
                db.AddParametro(ACBrNFSe1.NotasFiscais.Items[i].NFSe.CodigoVerificacao,ftString);
                db.AddParametro(ACBrNFSe1.NotasFiscais.Items[i].NFSe.Numero,ftString);
                db.AddParametro(sLinkNFSe,ftString);
              end
              else
              begin
                db.AddParametro(0,ftInteger);
                if ( sNFEsComErro = '' ) then
                  sNFEsComErro := 'Nota(s) fiscal(is) não confirmada(s):';
                sNFEsComErro := sNFEsComErro + #13+#10+'RPS Nº '+
                  ACBrNFSe1.NotasFiscais.Items[i].NFSe.IdentificacaoRps.Numero;
              end;
              db.CodigoSQL := db.CodigoSQL +
                             'where ( P.EMPRESA_PED = :pEmpresa_Ped ) '+
                             'and ( P.SERIE_NF_PED = :pSerie_NF_Ped ) '+
                             'and ( P.NFSE_RPS_NUMERO = :pNFSe_RPS_Numero )';

              db.AddParametro(iEmpresa,ftInteger);
              db.AddParametro(sSerie_NF,ftString);
              db.AddParametro(StrToIntDef(ACBrNFSe1.NotasFiscais.Items[i].NFSe.IdentificacaoRps.Numero,0),ftInteger);
              db.Executar;

 

  • Curtir 1

Gilson do Carmo
WindSoft Sistemas

Link para o comentário
Compartilhar em outros sites

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