Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TFrmNotaFiscal.NFeGerarEnviar;
- var
- StatusNFCe: Integer;
- MsgMotivo: String;
- ErrosRegrasNegocios: String;
- begin
- StatusNFCe := 0;
- if BaseDados.QryVenda.IsEmpty then
- begin
- AvisoSistema('Selecione uma NFe para enviar a SEFAZ.');
- FrmFrameBotoes1.SpbProcurar.Click;
- Exit;
- end;
- If (BaseDados.QryVenda.state in [dsEdit, dsInsert]) then
- BaseDados.QryVenda.Post;
- inVenda := 0;
- inVenda := BaseDados.QryVenda.FieldByName('CODIGO').AsInteger;
- FinalizarNotaFiscal;
- BaseDados.GerarNumeroNotaFiscal(inVenda);
- FrmFrameBotoes1.SpbSalvar.Click;
- // -------------------------------------------------------------------------
- //
- // -------------------------------------------------------------------------
- if BaseDados.QryVenda.FieldByName('FORMAPAGTO').AsInteger > 0 then
- begin
- try
- GetFaturaNFe(QryFaturas, BaseDados.QryVenda.FieldByName('CLIENTE').AsInteger, BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsInteger);
- if QryFaturas.RecordCount < 1 then
- begin
- Informar('Por favor, gere as parcelas do faturamento (F7 - Faturas).');
- Exit;
- end;
- finally
- QryFaturas.Close;
- end;
- end;
- FecharTabelas;
- BaseDados.QryVenda.ParamByName('CODIGO').AsInteger := inVenda;
- AbrirTabelas;
- // -----------------------------------------------------------------------------
- //
- // -----------------------------------------------------------------------------
- try
- BaseDados.GerarNFe(BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsInteger);
- // -----------------------------------------------------------------------------
- // Checar estrutura NF-e
- // -----------------------------------------------------------------------------
- try
- BaseDados.ACBrNFe1.NotasFiscais.Assinar;
- BaseDados.ACBrNFe1.NotasFiscais.Validar;
- except
- on E: Exception do
- begin
- if (BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas.Trim = '') and (BaseDados.ACBrNFe1.NotasFiscais.Items[0].ErroValidacao.Trim = '') then
- begin
- raise;
- end
- else if BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
- begin
- raise EFilerError.create(BaseDados.ACBrNFe1.NotasFiscais.Items[0].Alertas);
- end
- else
- begin
- raise EFilerError.create(BaseDados.ACBrNFe1.NotasFiscais.Items[0].ErroValidacao + BaseDados.ACBrNFe1.NotasFiscais.Items[0]
- .ErroValidacaoCompleto);
- end;
- end;
- end;
- // verificar se não existem erros de regras de negócio conforme o manual da NF-e
- if not BaseDados.ACBrNFe1.NotasFiscais.ValidarRegrasdeNegocios(ErrosRegrasNegocios) then
- raise EFilerError.create(ErrosRegrasNegocios);
- if BaseDados.ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpEmis = teContingencia then
- begin
- // mudar para offline o XML se ainda não for e gerar novamente o XML
- if BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.tpEmis <> teContingencia then
- begin
- BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.tpEmis := teContingencia;
- BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.dhCont := Now;
- BaseDados.ACBrNFe1.NotasFiscais[0].NFe.Ide.xJust := 'ERRO ACESSO WEBSERVICE';
- BaseDados.ACBrNFe1.NotasFiscais.GerarNFe;
- end;
- GravarStatusNFe();
- end
- else
- begin
- if BaseDados.ACBrNFe1.Enviar(GerarLoteNFe(), False, FParametros.NFe.TipoEmissao) then
- begin
- StatusNFCe := BaseDados.ACBrNFe1.WebServices.Enviar.cStat;
- MsgMotivo := BaseDados.ACBrNFe1.WebServices.Enviar.xMotivo;
- // nota duplicada, via correta é o retorno de status
- if StatusNFCe = 204 then
- begin
- BaseDados.ACBrNFe1.Consultar;
- StatusNFCe := BaseDados.ACBrNFe1.WebServices.Consulta.cStat;
- MsgMotivo := BaseDados.ACBrNFe1.WebServices.Consulta.xMotivo;
- end;
- if ContemNumero(StatusNFCe, [100, 103, 110, 150, 301, 302]) then
- begin
- GravarStatusNFe();
- end
- else
- begin
- raise Exception.CreateFmt('%d - %s', [BaseDados.ACBrNFe1.WebServices.Enviar.cStat, BaseDados.ACBrNFe1.WebServices.Enviar.xMotivo]);
- end;
- BaseDados.ACBrNFe1.NotasFiscais.Imprimir;
- EnviarEmailNF(BaseDados.QryVenda.FieldByName('CODIGO').AsInteger, BaseDados.ACBrNFe1);
- // FecharTabelas;
- DesativaEdicaoNFe;
- end;
- end;
- Sleep(500); // meio segundo
- BaseDados.ACBrNFe1.NotasFiscais.GravarXML();
- mLogRegistro := 'Transmitiu para o servidor da SEFAZ a Nota Fiscal Eletrônica ' + BaseDados.QryVenda.FieldByName('NOTAFISCAL').AsString;
- FUsuario.LogUsuario('Processamento de Nota Fiscal Eletrônica', mLogRegistro);
- finally
- MsgEsperar('', '', False);
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement