Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde, eu não sei o qual o erro no meu código...funcionando 100% até essa ultima alteração no MD-e...agora as vezes está faltando NF-e na consulta...tipo tem 8 nota emitida naquele período ai traz 5 e falta 2....não é nota antiga com mais de 90 dias....é nota do mês atual mesmo....eu achei estranho....na minha consulta só tinha 6 notas....consultei pelo monitor de nota do fsist tinha 10 nota.....fiquei sem entender...no meu codigo já tem os tratamentos para consultar de 1 hora em pra não entrar no uso e consumo indevido....mais estou com esse problema. Alguém aqui no forum já passou por isso?

  • Consultores
Postado

Boa noite,

Confirma na sua rotina se não tem nenhuma situação quê esteja desconsiderando algum documento.

Para validar, verifique os NSUs recebidos, nos arquivos *-dist-dfe.xml, se existe algum que não processou.

Postado

Renato Rubinho Já debuguei e os aqruivos *-dist-dfe.xml e todos os arquivos que venho está gravando no banco de dados. Vou postar meu código de consultar notas e gravar notas.

//-------------Código de consultar notas------------------------------------------

procedure TF_nfe_destinda.ConsultarNotas;
var
CUF, j,  i, HOTA_ULTIMO_NSU : Integer;
CNPJ , UNSU, CHAVE, NR_NFE, EMITENTE, STATUS, CONSULTAR_ULTIMO_NSU : String;
DATA, DATA_HORA : TDateTime;
var VALOR_NFE : Currency;
begin
    CNPJ_NFE:='';
    //---------Preenchimento das Variáveis--------------------------------------
    CUF       := UFtoCUF(DM.sUF);
    CNPJ      := DM.sCNPJ;
    UNSU      :=DM.ULTIMO_NSU_COMPLETO;
    try
      //-----Consulta de NF-e por Ultimo NSU------------------------------------
      HOTA_ULTIMO_NSU :=0;
      HOTA_ULTIMO_NSU :=DM.conecta.ExecSQLScalar('SELECT IFNULL(TIMESTAMPDIFF (HOUR,Data_Ultimo_NSU,NOW()),0) AS QTD_Horas FROM empresa WHERE CodLoja =:COD_LOJA', [DM.COD_LOJA]);
      if HOTA_ULTIMO_NSU < 1 then
      begin
         Mensagem('Atenção! consulta de NF-e realizada em menos de 1 hora. Aguarde', mtInformation, [mbOK], 0);
         exit;
      end;
      DM.ACBrNFE1.DistribuicaoDFePorUltNSU(CUF,CNPJ,UNSU);
    except
      begin
        if intToStr(DM.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat) = '137' then
        begin
          DM.conecta.ExecSQL('update empresa set Data_Ultimo_NSU = NOW() where CodLoja =:COD_LOJA', [DM.COD_LOJA]);
          Mensagem('137 - Retorno: Não existe NF-e para ser consultada na Sefaz. Aguarde 1 hora' + #13+
                   'para realizar uma nova consulta e evitar Consumo Indevido (Bloqueio no DF-e)', mtInformation, [mbOK], 0);
          exit;
        end;

        if intToStr(DM.ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat) = '656' then
        begin
          DM.conecta.ExecSQL('update empresa set Data_Ultimo_NSU = NOW() where CodLoja =:COD_LOJA', [DM.COD_LOJA]);
          Mensagem('656 - Rejeição: Consumo Indevido. Aguarde 1 hora para realizar nova consulta', mtInformation, [mbOK], 0);
          exit;
        end
        else
        begin
          Mensagem('Atenção! problema no DF-e da sefaz aguarde alguns minutos', mtInformation, [mbOK], 0);
          Abort;
        end;
      end;
    end;
   //----------Vai gravar no banco o último NSU---------------------------------
    UNSU := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU;
    GravaUltimaOperacao(StrToInt(UNSU));

   //------Vai listar as chaves e Gravar no banco-------------------------------
    j := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count -1;
    if J = -1 then
    begin
      DM.conecta.ExecSQL('update empresa set Data_Ultimo_NSU = NOW() where CodLoja =:COD_LOJA', [DM.COD_LOJA]);
      if Application.MessageBox('Atenção..não exsite registro de NF-e nessa consulta','SYSPDV', MB_OK) = IDOK then
      exit;
    end;

    for i := 0 to j do
    begin
        Application.ProcessMessages;
        VALOR_NFE := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.vNF;
        CHAVE := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.chDFe;
        NR_NFE := RemoveZeros(Copy(CHAVE, 26, 9));
        CNPJ_NFE:= DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.CNPJCPF;
        EMITENTE := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.xNome;
        DATA := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.dhEmi;
        DATA_HORA := DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.dhEmi;
        case DM.ACBrNFE1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].resDFe.cSitDFe of
          snAutorizado : STATUS := 'AUTORIZADA';
          snDenegado   : STATUS := 'DENEGADA';
          snCancelado  : STATUS := 'CANCELADA';
        end;
        if CHAVE <> '' then
        GravaNotaBanco(CHAVE, STATUS, EMITENTE, NR_NFE, VALOR_NFE, DATA, DATA_HORA);
    end;
    gridResult.Font.Color := clWhite;
end;

//---------------Gravo as notas no banco--------------------------------------------------------------------------

procedure TF_nfe_destinda.GravaNotaBanco(ChNFE, StNota, sEMITENTE, sNR_NFE : String; sVALOR : Currency; DtNota : TDateTime; DtNota_Hora :TDateTime);
begin
    //--------Verifica se a nota já está no banco ou não------------------------
    with QryVerificaNFe do
    begin
      close;
      sql.clear;
      sql.add('SELECT Chave_NFe FROM nfe_destinada');
      sql.add('where CodLoja_NFe_Destinada =:COD_LOJA');
      sql.add('AND CHAVE_NFe =:CHAVE_NFE');
      ParamByName('COD_LOJA').AsInteger  := DM.COD_LOJA;
      ParamByName('CHAVE_NFE').AsString := ChNFE;
      Open;
    end;
    if QryVerificaNFeChave_NFe.AsString <> ChNFE then
    begin
      QryNotas.Insert;
      QryNotas.FieldByName('CODIGO_NOTA').AsString            := sNR_NFE;
      QryNotas.FieldByName('CHAVE_NFe').AsString              := ChNFE;
      QryNotas.FieldByName('VALOR').AsFloat                   := sVALOR;
      QryNotas.FieldByName('Nome_Emitente').AsString          := sEMITENTE;
      QryNotas.FieldByName('DATA_EMISSAO').AsDateTime         := DtNota;
      QryNotas.FieldByName('Ja_Baixada').AsString             := 'SIM';
      QryNotas.FieldByName('STATUS_NFe').AsString             := StNota;
      QryNotas.FieldByName('CodLoja_NFe_Destinada').AsInteger := DM.COD_LOJA;
      QryNotas.FieldByName('CPF_CNPJ_NFe').AsString           :=CNPJ_NFE;
      QryNotas.FieldByName('Data_Hora_Emissao').AsDateTime    :=DtNota_Hora;
      QryNotas.Post;
      DM.conecta.ExecSQL('UPDATE nfe_destinada n INNER JOIN entradas e ON e.NumeroNota = n.Codigo_NOTA SET n.NFe_Ja_Lancada = "SIM" WHERE e.CPF_CNPJ_For_Entrada = n.CPF_CNPJ_NFe AND N.Codigo_NOTA =:NFE AND n.CPF_CNPJ_NFe =:CNPJ_CPF AND e.CodLoja_Entrada =:COD_LOJA', [sNR_NFE, CNPJ_NFE, DM.COD_LOJA]);
    end;

    with QryAux do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT IdNF_Dest, NFe_Ja_Lancada, Codigo_NOTA, Nome_Emitente, Status_NFe, Chave_NFe, Data_Emissao, XML, Valor, Ja_Manifestada, NFe_Manifestada FROM NFE_DESTINADA');
      SQL.Add('where  cast(Data_Emissao As Date) BETWEEN :DataInicial AND :DataFinal');
      SQL.Add('and CodLoja_NFe_Destinada =:COD_LOJA');
      SQL.Add('ORDER BY Data_Emissao DESC');
      ParamByName('DataInicial').Value := FormatDateTime('yyyy-mm-dd', dataInicial.Date);
      ParamByName('DataFinal').Value := FormatDateTime('yyyy-mm-dd', dataFinal.Date);
      ParamByName('COD_LOJA').AsInteger :=DM.COD_LOJA;
      Open;
    end;
    gridResult.Font.Color := clWhite;
end;
 

  • Consultores
Postado

Aparentemente está baixando tudo, pois você armazena corretamente o ultNSU recebido, para utilizar na próxima consulta.

Não uso o fsist, ele faz a consulta também pelo webservice ou você consultou chave por chave? Se for chave por chave, ele pega do portal, que não é a mesma fonte e bastaria aguardar a distribuição disponibilizar o XML das outras 4 que faltam.

  • Moderadores
Postado
4 horas atrás, JHONLENON disse:

Boa tarde, eu não sei o qual o erro no meu código...funcionando 100% até essa ultima alteração no MD-e...agora as vezes está faltando NF-e na consulta...tipo tem 8 nota emitida naquele período ai traz 5 e falta 2....não é nota antiga com mais de 90 dias....é nota do mês atual mesmo....eu achei estranho....na minha consulta só tinha 6 notas....consultei pelo monitor de nota do fsist tinha 10 nota.....fiquei sem entender...no meu codigo já tem os tratamentos para consultar de 1 hora em pra não entrar no uso e consumo indevido....mais estou com esse problema. Alguém aqui no forum já passou por isso?

Lembra da sincronização entre o estado e o nacional.

use o exemplo do svn e verifique se ocorre o mesmo.

esse fsist é por meio obscuros enão dá pra comparar.

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Moderadores
Postado

Lembre que o DistribuicaoDFe não retorna apenas XML de notas, também retorna os resumos, eventos, resumo de eventos... então cada chave pode ter N documentos retornados ao longo do tempo.

Em vez de condicionar a gravação pela chave (resDFe.chave) use a propriedade schema.

var
  I: Integer;  
  DFe: pcnRetDistDFeInt.TdocZipCollectionItem;
  XML: String;
begin
[...]
  ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor), CNPJ, ultNSU, ANSU);
  for I := 0 to ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1 do
  begin
    DFe := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[I];
    case DFe.schema of
      schprocNFe: XML := DFe.XML; // nfe completa
      schresNFe: ; // resumo da NFe  
      schresEvento: ; // resumo de evento
      schprocEvento: ; // evento 

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

Juliomar Marchetti Acontece a mesma coisa...testei....mais to começando a entender a situação....o escritório de contabilidade também está consultando as notas do cliente lá...ai  deve ser por isso o motivo do problema de não aparecer algumas notas...por exemplo fiz a consulta e estou com ultimo USN 400 ai contabilidade consulta também o ultimo USN ai vai para o 415 e econtrou nota nota nessa consulta...então quando eu vou consultar de novo já vai para o ultimo USN...mais por exemplo digamos que no USN 411 e 412 teve nota nessa consulta....então na minha consulta essas notas não vai aparecer. Existe outra questão..se voltar o sequencial do USN do cliente dá problema....mais se eu pegar um backup dele do banco de dados e colocar na minha maquina e eu voltar o sequencial do USN traz as notas que estão faltando. Acho Ambiente de consulta do MD-e deve gravar IP + NOME DA MAQUINA ou Enão o proprio MAC da Placa de Rede do computador que está consultando....fiz em 2 clientes e deu certo. Acho que o fsist deve ter algo pra não deixar acontecer isso...

  • Moderadores
Postado
16 minutos atrás, JHONLENON disse:

Juliomar Marchetti Acontece a mesma coisa...testei....mais to começando a entender a situação....o escritório de contabilidade também está consultando as notas do cliente lá...ai  deve ser por isso o motivo do problema de não aparecer algumas notas...por exemplo fiz a consulta e estou com ultimo USN 400 ai contabilidade consulta também o ultimo USN ai vai para o 415 e econtrou nota nota nessa consulta...então quando eu vou consultar de novo já vai para o ultimo USN...mais por exemplo digamos que no USN 411 e 412 teve nota nessa consulta....então na minha consulta essas notas não vai aparecer. Existe outra questão..se voltar o sequencial do USN do cliente dá problema....mais se eu pegar um backup dele do banco de dados e colocar na minha maquina e eu voltar o sequencial do USN traz as notas que estão faltando. Acho Ambiente de consulta do MD-e deve gravar IP + NOME DA MAQUINA ou Enão o proprio MAC da Placa de Rede do computador que está consultando....fiz em 2 clientes e deu certo. Acho que o fsist deve ter algo pra não deixar acontecer isso...

Ele está consultando por onde? lembrando que baixar o xml só um pode, se um baixar o outro já não baixa.

lembrando que como falei esse fsist não dá pra comparar e talvez nem use o que é legitimamente algo do sefaz

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
Em 14/05/2022 at 09:44, BigWings disse:

Lembre que o DistribuicaoDFe não retorna apenas XML de notas, também retorna os resumos, eventos, resumo de eventos... então cada chave pode ter N documentos retornados ao longo do tempo.

Em vez de condicionar a gravação pela chave (resDFe.chave) use a propriedade schema.

var
  I: Integer;  
  DFe: pcnRetDistDFeInt.TdocZipCollectionItem;
  XML: String;
begin
[...]
  ACBrNFe1.DistribuicaoDFe(StrToInt(cUFAutor), CNPJ, ultNSU, ANSU);
  for I := 0 to ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1 do
  begin
    DFe := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[I];
    case DFe.schema of
      schprocNFe: XML := DFe.XML; // nfe completa
      schresNFe: ; // resumo da NFe  
      schresEvento: ; // resumo de evento
      schprocEvento: ; // evento 

 

BigWings Boa tarde...não entendi muito bem esse código...queria testar ele....na consulta pego primeiro...CHAVE DE ACESSO, DATA EMISSÃO, RAZÃO SOCIAL, SITUAÇÃO (Autorizada, Cancelada ou Denegada) e VALOR..com tanta restrição no MD-e estamos usando só pra consulta as chave de acesso..já o donwload do xml  completo já uso outro metado baixando direto da sefaz com certificado digital do cliente....mais pra baixar preciso das chaves de acesso.

  • Consultores
Postado

Boa noite JHONLENON,

Veja a NT relacionada à distribuição, no item 3. Web Service – NFeDistribuicaoDFe 

A distribuição é muito mais do que baixar XML da NFe, ela distribui também resumos dos documentos, eventos, etc.

http://svn.code.sf.net/p/acbr/code/tools/DFe/NFeNFCe/NT/2014/NFe_NT2014_002 v1.12 WS DistribuicaoDFe.pdf 

Em 14/05/2022 at 09:57, JHONLENON disse:

fiz a consulta e estou com ultimo USN 400 ai contabilidade consulta também o ultimo USN ai vai para o 415

Com duas aplicações usando o serviço em paralelo realmente não tem o que fazer, conforme essa sua análise.

  • Moderadores
Postado
17 horas atrás, JHONLENON disse:

com tanta restrição no MD-e estamos usando só pra consulta as chave de acesso..já o donwload do xml

A consulta (DistribuicaoDFePorUltNSU) já baixa o XML...

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Moderadores
Postado
45 minutos atrás, JHONLENON disse:

Só se a NF-e já estiver manifestada...caso não esteja manifestado aí precisa manifestar antes

não. só será preciso se quem for baixar é o destinatario, agora se ele estiver no AutXML não é necessário.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

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