Ir para conteúdo
  • Cadastre-se

dev botao

Nfe Travando Nos Processos Da Sefaz (Gera, Valida Ou Assina) Quando A Muitos Itens.


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

Recommended Posts

  • Moderadores

então e um processo demorado que para gerar o xml usamos o emissor gratuito e exportamos o xml, isso, para teste do monitor ou ACBR Demo, ok. No nosso sistema utiliza um processo de Txt igual ao do Sefaz, por que no começo a gente usava o software da sefaz, e lemos campo por campo, chave por chave gravando nas tag´s do ACBRNFe. entendeu.

O ACBrNFeMonitor também aceita o TXT no padrão do emissor SEFAZ/SP. 

Mas também estou com a mesma dúvida do Ítalo. Vocë comentou "para teste do monitor ou ACBR Demo".

Neste caso não entendi. Vc pretende usar o ACBrNFeMonitor ou o componente no Delphi?

 

Pelo ACBrNFeMonitor vc pode usar os comandos:

  • NFe.CriarNFeSefaz(cArqTXT,nRetornaXML)

        cArqTXT - Path para o arquivo TXT no formato do SEFAZ

     

  • NFe.CriarEnviarNFeSefaz(cArqTXT,nLote,nImprimeDANFE)    

Sendo que o segundo gera, assina, envia e imprime o DANFE.

Você  já viu estes comandos? Vai utilizar no modo monitor?


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Ok. No componente infelizmente eu não tenho condições de te ajudar, porque utilizo apenas o ACBrNFeMonitor. 

Quanto a quantidade de itens, aconteceu de uma vez um cliente fechar a empresa e foi necessário vender todos os produtos para outra empresa, com isto fizeram várias notas de 800 itens (pedi para ficar um pouco abaixo do limite máximo), mas não encontraram problema na emissão. Minha ajuda lá foi só fazer uma rotina (função) para escolher de 800 em 800 itens sem que ele incluísse um por um na NFe.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Bom Hoje Testei com o ACBRDemo coloquei mais um processo para o envio, segue  ....

 

procedure TForm1.Button1Click(Sender: TObject);
begin
  memoLog.Clear;
  MemoResp.Clear;
  memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Importar Txt');
  btnImportarXML.Click;
  memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Verfificando ACBR');
  if ACBrNFe1.NotasFiscais.Count > 0 then
  begin
 
    memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Gerar NFe');
    ACBrNFe1.NotasFiscais.GerarNFe;
    memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Assinar NFe');
    ACBrNFe1.NotasFiscais.Assinar;
    memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Validar NFe');
    ACBrNFe1.NotasFiscais.Valida;
    memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Enviar NFe');
    if ACBrNFe1.Enviar(1,True) then
    begin
      memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Retorno NFe');
      MemoResp.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.Retorno.RetWS);
      memoRespWS.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.Retorno.RetornoWS);
    end;
    memoLog.Lines.Add(FormatDateTime('HH:MM:SS', Now)+' :: Fim NFe');
 
  end;
 
end;
 
e mesmo assim houve uma demora considerável de tempo nos processos .... veja os Txt´s. 
Pensei em varias coisas e uma delas que seria na performance de rede, mais mesmo assim não mudou em nada de uma rede para outra e muito menos sendo executado pelo Rad ou Não.
 
1Envio_ACBRDemo.Txt - Enviado em modo de Debug em uma Rede Wirelles
2Envio_ACBRDemo.Txt - Enviado com o executável gerado (Obs. Sem o RadStudio) em uma Rede Cabeada.
 
Estou enviando tambem o arquivo (035725_TESTE.TXT) para testes, ok.
Obs. Esta sem o emitente e sem o destinatario.

1Envio_ACBRDemo.txt

2Envio_ACBRDemo.txt

035725_TESTE.TXT

Editado por Rogério Teixeira_2055
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Pelo componente não consigo te ajudar. Mas fiz um teste no ACBrNFeMonitor usando o teu arquivo 035725_TESTE.TXT (alterando apenas os campos do emitente e destinatário).

Usei o comando Nfe.CriarNfeSefaz() e em 13 segundos ele foi do importar até gerar o XML pronto assinado. Só faltou enviar. 


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Fiz um teste agora importando o TXT que vc passou da primeira vez e obtive o seguinte resultado:
 
27/08/2013 10:47:08 Carregando Arquivo TXT
27/08/2013 10:47:08 Carregando Arquivo TXT - FIM
27/08/2013 10:47:11 Salvando Arquivo XML
27/08/2013 10:47:11 Salvando Arquivo XML - FIM
27/08/2013 10:47:12 Enviando XML para o SEFAZ
27/08/2013 10:48:44 Enviando XML para o SEFAZ - FIM
 
Estou usando o seguinte código e um certificado A1:
 

  OpenDialog1.FileName  :=  '';
  OpenDialog1.Title := 'Selecione a NFE';
  OpenDialog1.DefaultExt := '*-nfe.XML';
  OpenDialog1.Filter := 'Arquivos NFE (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Arquivos TXT (*.TXT)|*.TXT|Todos os Arquivos (*.*)|*.*';
  OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Geral.PathSalvar;
  if OpenDialog1.Execute then
  begin
    ACBrNFe1.NotasFiscais.Clear;
    ACBrNFe1.NotasFiscais.Add;
    NFeRTXT := TNFeRTXT.Create(ACBrNFe1.NotasFiscais.Items[0].NFe);
    MemoDados.Lines.Add(DateTimeToStr(now)+'Carregando Arquivo TXT');
    NFeRTXT.CarregarArquivo(OpenDialog1.FileName);
    MemoDados.Lines.Add(DateTimeToStr(now)+'Carregando Arquivo TXT - FIM');
    if NFeRTXT.LerTxt then
     begin
       NFeRTXT.Free;
       MemoDados.Lines.Add(DateTimeToStr(now)+'Salvando Arquivo XML');
       ACBrNFe1.NotasFiscais.SaveToFile(ChangeFileExt(OpenDialog1.FileName,'.xml'));
       MemoDados.Lines.Add(DateTimeToStr(now)+'Salvando Arquivo XML - FIM');
       with ACBrNFe1.NotasFiscais.Items[0].NFe do
        begin
          ide.tpAmb := taHomologacao;

          Emit.CNPJCPF           := edtEmitCNPJ.Text;
          Emit.IE                := edtEmitIE.Text;
          Emit.xNome             := edtEmitRazao.Text;
          Emit.xFant             := edtEmitFantasia.Text;

          Emit.EnderEmit.xMun    := 'Tatui';

          Dest.EnderDest.xMun    := 'Tatui';
        end;
       ACBrNFe1.NotasFiscais.GerarNFe;
       MemoDados.Lines.Add(DateTimeToStr(now)+'Enviando XML para o SEFAZ');
       ACBrNFe1.Enviar(123,True);
       MemoDados.Lines.Add(DateTimeToStr(now)+'Enviando XML para o SEFAZ - FIM');

       MemoResp.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.Retorno.RetWS);
       memoRespWS.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.Retorno.RetornoWS);
       LoadXML(MemoResp, WBResposta);

       MemoDados.Lines.Add('');
       MemoDados.Lines.Add('Envio NFe');
       MemoDados.Lines.Add('tpAmb: '+ TpAmbToStr(ACBrNFe1.WebServices.Retorno.TpAmb));
       MemoDados.Lines.Add('verAplic: '+ ACBrNFe1.WebServices.Retorno.verAplic);
       MemoDados.Lines.Add('cStat: '+ IntToStr(ACBrNFe1.WebServices.Retorno.cStat));
       MemoDados.Lines.Add('cUF: '+ IntToStr(ACBrNFe1.WebServices.Retorno.cUF));
       MemoDados.Lines.Add('xMotivo: '+ ACBrNFe1.WebServices.Retorno.xMotivo);
       MemoDados.Lines.Add('cMsg: '+ IntToStr(ACBrNFe1.WebServices.Retorno.cMsg));
       MemoDados.Lines.Add('xMsg: '+ ACBrNFe1.WebServices.Retorno.xMsg);
       MemoDados.Lines.Add('Recibo: '+ ACBrNFe1.WebServices.Retorno.Recibo);
       MemoDados.Lines.Add('Protocolo: '+ ACBrNFe1.WebServices.Retorno.Protocolo);        
  end;

Vc pode consultar a chave 35130847818497000466550000000357261753993778 no site https://homologacao.nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx

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

André, vc só gerou e depois envio ? não precisou assinar e nem validar ? a unica coisa que eu vejo de diferente e que a gente coloca

"if Not DMNFe.ACBrNFe.Enviar(ALote, False) Then " que seria o false para não imprimir, mais isso não muda em nada.

Outra coisa vc colocou para ACBRNFe.WebServices.AjustaAguardaConsultaRet como True ? por que esperamos a consulta pelo motivo de gravar no BD.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Se vc entrar no método ACBrNFe1.Enviar vc verá que ele mesmo já assina e valida:
 

var
  i: Integer;
begin
  if NotasFiscais.Count <= 0 then
   begin
      if Assigned(Self.OnGerarLog) then
         Self.OnGerarLog('ERRO: Nenhuma NF-e adicionada ao Lote');
      raise EACBrNFeException.Create('ERRO: Nenhuma NF-e adicionada ao Lote');
     exit;
   end;

  if NotasFiscais.Count > 50 then
   begin
      if Assigned(Self.OnGerarLog) then
         Self.OnGerarLog('ERRO: Conjunto de NF-e transmitidas (máximo de 50 NF-e) excedido. Quantidade atual: '+IntToStr(NotasFiscais.Count));
      raise EACBrNFeException.Create('ERRO: Conjunto de NF-e transmitidas (máximo de 50 NF-e) excedido. Quantidade atual: '+IntToStr(NotasFiscais.Count));
     exit;
   end;
  NotasFiscais.Assinar;
  NotasFiscais.Valida;

  Result := WebServices.Envia(ALote, Sincrono);

  if DANFE <> nil then
  begin
     for i:= 0 to NotasFiscais.Count-1 do
     begin
       if NotasFiscais.Items[i].Confirmada and Imprimir then
       begin
          NotasFiscais.Items[i].Imprimir;
          if (DANFE.ClassName='TACBrNFeDANFERaveCB') then
            Break;
       end;
     end;
  end;
end;

A propriedade AjustaAguardaConsultaRet  só é útil quando vc executa o método de consulta de status de serviço antes do envio, coisa que era feita automaticamente pelo componente antigamente mas devido a orientações do fisco foi removido. Por padrão o componente envia e tenta consultar o resultado do processamento por 5 vezes antes de retornar que o lote está em processamento.

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

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