Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.77 KB | None | 0 0
  1. procedure TFrmNotaFiscal.NFeGerarEnviar;
  2. var
  3.   StatusNFCe: Integer;
  4.   MsgMotivo: String;
  5.   ErrosRegrasNegocios: String;
  6. begin
  7.   StatusNFCe := 0;
  8.   if BaseDados.QryVenda.IsEmpty then
  9.   begin
  10.     AvisoSistema('Selecione uma NFe para enviar a SEFAZ.');
  11.     FrmFrameBotoes1.SpbProcurar.Click;
  12.     Exit;
  13.   end;
  14.  
  15.   If (BaseDados.QryVenda.state in [dsEdit, dsInsert]) then
  16.     BaseDados.QryVenda.Post;
  17.  
  18.   inVenda := 0;
  19.   inVenda := BaseDados.QryVenda.FieldByName('CODIGO').AsInteger;
  20.  
  21.   FinalizarNotaFiscal;
  22.   BaseDados.GerarNumeroNotaFiscal(inVenda);
  23.   FrmFrameBotoes1.SpbSalvar.Click;
  24.   // -------------------------------------------------------------------------
  25.   //
  26.   // -------------------------------------------------------------------------
  27.   if BaseDados.QryVenda.FieldByName('FORMAPAGTO').AsInteger > 0 then
  28.   begin
  29.     try
  30.       GetFaturaNFe(QryFaturas, BaseDados.QryVenda.FieldByName('CLIENTE').AsInteger, BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsInteger);
  31.       if QryFaturas.RecordCount < 1 then
  32.       begin
  33.         Informar('Por favor, gere as parcelas do faturamento (F7 - Faturas).');
  34.         Exit;
  35.       end;
  36.     finally
  37.       QryFaturas.Close;
  38.     end;
  39.   end;
  40.   FecharTabelas;
  41.   BaseDados.QryVenda.ParamByName('CODIGO').AsInteger := inVenda;
  42.   AbrirTabelas;
  43.   // -----------------------------------------------------------------------------
  44.   //
  45.   // -----------------------------------------------------------------------------
  46.   try
  47.     BaseDados.GerarNFe(BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsInteger);
  48.     // -----------------------------------------------------------------------------
  49.     // Checar estrutura NF-e
  50.     // -----------------------------------------------------------------------------
  51.     try
  52.       BaseDados.ACBrNFe1.NotasFiscais.Assinar;
  53.       BaseDados.ACBrNFe1.NotasFiscais.Validar;
  54.     except
  55.       on E: Exception do
  56.       begin
  57.         if (BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas.Trim = '') and (BaseDados.ACBrNFe1.NotasFiscais.Items[0].ErroValidacao.Trim = '') then
  58.         begin
  59.           raise;
  60.         end
  61.         else if BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
  62.         begin
  63.           raise EFilerError.create(BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas);
  64.         end
  65.         else
  66.         begin
  67.           raise EFilerError.create(BaseDados.ACBrNFe1.NotasFiscais.Items[0].ErroValidacao + BaseDados.ACBrNFe1.NotasFiscais.Items[0]
  68.             .ErroValidacaoCompleto);
  69.         end;
  70.       end;
  71.     end;
  72.  
  73.     // verificar se não existem erros de regras de negócio conforme o manual da NF-e
  74.     if not BaseDados.ACBrNFe1.NotasFiscais.ValidarRegrasdeNegocios(ErrosRegrasNegocios) then
  75.       raise EFilerError.create(ErrosRegrasNegocios);
  76.  
  77.     if BaseDados.ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpEmis = teContingencia then
  78.     begin
  79.       // mudar para offline o XML se ainda não for e gerar novamente o XML
  80.       if BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.tpEmis <> teContingencia then
  81.       begin
  82.         BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.tpEmis := teContingencia;
  83.         BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.dhCont := Now;
  84.         BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.xJust := 'ERRO ACESSO WEBSERVICE';
  85.         BaseDados.ACBrNFe1.NotasFiscais.GerarNFe;
  86.       end;
  87.       GravarStatusNFe();
  88.     end
  89.     else
  90.     begin
  91.       if BaseDados.ACBrNFe1.Enviar(GerarLoteNFe(), False, FParametros.NFe.TipoEmissao) then
  92.       begin
  93.         StatusNFCe := BaseDados.ACBrNFe1.WebServices.Enviar.cStat;
  94.         MsgMotivo := BaseDados.ACBrNFe1.WebServices.Enviar.xMotivo;
  95.  
  96.         // nota duplicada, via correta é o retorno de status
  97.         if StatusNFCe = 204 then
  98.         begin
  99.           BaseDados.ACBrNFe1.Consultar;
  100.           StatusNFCe := BaseDados.ACBrNFe1.WebServices.Consulta.cStat;
  101.           MsgMotivo := BaseDados.ACBrNFe1.WebServices.Consulta.xMotivo;
  102.         end;
  103.         if ContemNumero(StatusNFCe, [100, 103, 110, 150, 301, 302]) then
  104.         begin
  105.           GravarStatusNFe();
  106.         end
  107.         else
  108.         begin
  109.           raise Exception.CreateFmt('%d - %s', [BaseDados.ACBrNFe1.WebServices.Enviar.cStat, BaseDados.ACBrNFe1.WebServices.Enviar.xMotivo]);
  110.         end;
  111.         BaseDados.ACBrNFe1.NotasFiscais.Imprimir;
  112.         EnviarEmailNF(BaseDados.QryVenda.FieldByName('CODIGO').AsInteger, BaseDados.ACBrNFe1);
  113.         // FecharTabelas;
  114.         DesativaEdicaoNFe;
  115.       end;
  116.     end;
  117.     Sleep(500); // meio segundo
  118.     BaseDados.ACBrNFe1.NotasFiscais.GravarXML();
  119.     mLogRegistro := 'Transmitiu para o servidor da SEFAZ a Nota Fiscal Eletrônica ' + BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsString;
  120.     FUsuario.LogUsuario('Processamento de Nota Fiscal Eletrônica', mLogRegistro);
  121.   finally
  122.     MsgEsperar('', '', False);
  123.   end;
  124. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement