Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Boa noite amigos,

Tem muita gente que perder o retorno da SEFAZ e fica meio perdido, pois o DANFE só fica impresso "NÃO AUTORIZADO"ou algo assim.

Primeira coisa alterar a Unit ACBrNFeWebServices

na function TNFeRecepcao.Executar: Boolean; faça :

--------------------------------------------------------------------

Cria a linha em negrito antes do comando aMsg := , conforme abaixo :

if not DirectoryExists(ExtractFilePath(Application.ExeName) +'\XML\') then

ForceDirectories(ExtractFilePath(Application.ExeName) +'\XML\');

TACBrNFe( FACBrNF

e ).NotasFiscais.Items[0].SaveToFile( ExtractFilePath(Application.ExeName) +'\XML\'+ TACBrNFe( FACBrNFe ).NotasFiscais.Items[0].NFe.infNFe.ID+'-nfe.xml' , True);

end;;

aMsg := //'Versão Leiaute : '+NFeRetorno.Versao+LineBreak+

'Ambiente : '+TpAmbToStr(NFeRetorno.TpAmb)+LineBreak+

'Versão Aplicativo : '+NFeRetorno.verAplic+LineBreak+

'Status Código : '+IntToStr(NFeRetorno.cStat)+LineBreak+

'Status Descrição : '+NFeRetorno.xMotivo+LineBreak+

'UF : '+CodigoParaUF(NFeRetorno.cUF)+LineBreak+

'Recibo : '+NFeRetorno.infRec.nRec+LineBreak+

'Recebimento : '+NotaUtil.SeSenao(NFeRetorno.InfRec.dhRecbto = 0, '', DateTimeToStr(NFeRetorno.InfRec.dhRecbto))+LineBreak+

'Tempo Médio : '+IntToStr(NFeRetorno.InfRec.TMed)+LineBreak;

--------------------------------------------------------------------

Beleza, agora toda vez que vc enviar um NFe ele vai gravar o XML completo, MAIS sem o número do protocolo, agora vamos a segunda parte :

Criar esta função,

function Retorno( chave, data_emis : String ) : Boolean; // Chave de acesso e a data de emissão da nota

var

TXM, NXM: TStringList;

begin

Result := False;

TXM := TStringList.Create; { Para carregar o xml gravado, de acordo com os comandos criado acima }

NXM := TStringList.Create; { Vai ser o novo XML com o protocolo }

If FileExists(ExtractFilePath(Application.ExeName)+'\XML\NFe'+TrazNumero(chave)+'-nfe.xml') then { se exitir o xml no diretorio }

TXM.LoadFromFile(ExtractFilePath(Application.ExeName)+'\XML\NFe'+TrazNumero(chave)+'-nfe.xml')

else begin

{ coloque a sua mensagem para o usuario }

exit; end;

Acbr.WebServices.Consulta.NFeChave := '';

Acbr.WebServices.Consulta.NFeChave := chave;

if Acbr.WebServices.Consulta.Executar then begin

Result := True;

NXM.Add( TXM.Text + ''+IfThen( Acbr.WebServices.Consulta.TpAmb = taProducao,'1','2')+''+Acbr.WebServices.Consulta.verAplic+''+

''+TrazNumero(chave)+''+

FormataDataNFERecibo(DateTimeToStr(Acbr.WebServices.Consulta.DhRecbto))+

''+Acbr.WebServices.Consulta.Protocolo+''+

''+Acbr.WebServices.Consulta.protNFe.digVal+''+

'100'+

Acbr.WebServices.Consulta.protNFe.xMotivo+'');

NXM.SaveToFile(Acbr.Configuracoes.Arquivos.PathNFe+ '\' + FormatDateTime('YYYY', StrToDate( data_emis )) + FormatDateTime('MM', StrToDate( data_emis )) + '\'+ TrazNumero(chave)+'-nfe.xml'); { salvando o novo XML com protocolo na pasta definida em Acbr.Configuracoes.Arquivos.PathNFe }

GravarRetornoNoSeuBanco( TrazNumero(chave), Acbr.WebServices.Consulta.Protocolo, codnota ); { Isto e do meu sistema, mais e uma ideia }

MensagemPerso('Retorno Localizado na SEFAZ'#13'Protocolo : '+Acbr.WebServices.Consulta.Protocolo,informacao);

NXM.Destroy;

TXM.Destroy;

end

else begin

MensagemPerso(Acbr.WebServices.Consulta.XMotivo,exclamacao);

if Acbr.WebServices.Consulta.cStat <> 100 then {se cStat for diferente de 100, e porque foi rejeitada por algum erro }

GravaErroRetornoNfe ( codnota ); { NF rejeitada na SEFAZ, esta rotina também e usada no meu sistema }

Result := False;

NXM.Destroy;

TXM.Destroy;

end;

end;

// FUNÇÕES UTILIZADA NA ROTINAS

1 -

Function FormataDataNFERecibo( data : String) : String;

begin

Result := copy(data,7,4)+'-'+copy(data,4,2)+'-'+copy(data,1,2);

Result := Result + 'T'+copy(data,12,100);

end;

Function TrazNumero( AValue: String) : String;

var

i : Integer ;

begin

Result := '' ;

for i := 1 to length(AValue) do

if (AValue in ['0'..'9']) then

Result := Result + AValue;

end;

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