Ir para conteúdo
  • Cadastre-se

dev botao

Data E Hora De Cancelamento Na Consulta


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

Recommended Posts

Boa tarde,

 

Alguém saberia me dizer se na consulta, caso a nota esteja cancelada,

eu consigo pegar a data de cancelamento? Se sim, como?

 


 


 

Var


I:Integer;
Motivo:String;
dhcancel:TDateTime;
begin
ACBrNFe1.DANFE.NFeCancelada := False;
Motivo := ACBrNFe1.WebServices.Consulta.XMotivo;
For I:=0 To ACBrNFe1.WebServices.Consulta.procEventoNFe.Count - 1 Do
   Begin
   if (ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.InfEvento.tpEvento = teCancelamento) and
      (ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.cStat in [101,151,155,135,128]) then
      Begin
      ACBrNFe1.DANFE.NFeCancelada := True;
      dhcancel : ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.InfEvento.dhEvento;
      ShowMessage(FormatDateTime('DD/MM/YYYY HH:MM:ss',dhcancel));
      Motivo := 'Cancelamento de NF-e homologado';
      Break;
      End;
   End;
...
end;

 

 

Eu fiz o código acima, mas a minha consulta retorna a data e hora atuais, e se eu mudar para o que está

abaixo também retorna a data e hora atual...

 


 

dhcancel : ACBrNFe1.NotasFiscais.Items.NFe.procNFe.dhRecbto;

 

 

Alguém saberia me dizer a forma certa de chamar a data e hora do cancelamento?

 

Desde já, obrigado

 

Editado por Marcos Spirito

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Marcos,

 

em vez de:

 

dhcancel : ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.InfEvento.dhEvento;

 

tente desta forma:

 

dhcancel : ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.InfEvento.dhRegEvento;

 

dhEvento é a Data/Hora do envio do evento no caso do cancelamento.

 

dhRegEvento é a Data/Hora que a SEFAZ registrou o evento, ou seja, quando o cancelamento de fato ocorreu.

 

No seu XML você encontrar algo estranho, veja:

 

<dhEvento>2014-09-16T14:18:24-03:00</dhEvento>

 

<dhRegEvento>2014-09-16T14:18:06-03:00</dhRegEvento>

 

O relógio do computador do emitente esta alguns segundos adiantado em relação ao relógio do servidor da SEFAZ.

Como existe uma tolerância, a SEFAZ aceitou o evento de cancelamento.

Como a resposta é imediata, você de inclusive adotar a data e hora de envio como sendo a de cancelamento efetivo. 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Juliomar,

 

Dei update nos fontes e recompilei o ACBrComum, PCN2, synapse e o ACBrNFe,

dei um build no meu projeto mas mesmo assim não apareceu a propriedade...

verifiquei que teóricamente ela está no pcnEventoNFe, então abri

a unit mas não encontrei ela la...

 

 

 

 TInfEvento = class

  private
    FID: String;
    FtpAmbiente: TpcnTipoAmbiente;
    FCNPJ: String;
    FcOrgao: Integer;
    FChave: String;
    FDataEvento: TDateTime;
    FTpEvento: TpcnTpEvento;
    FnSeqEvento: Integer;
    FVersaoEvento: String;
    FDetEvento: TDetEvento;
 
    function getcOrgao: Integer;
    function getVersaoEvento: String;
    function getDescEvento: String;
    function getTipoEvento: String;
  public
    constructor Create;
    destructor Destroy; override;
    function DescricaoTipoEvento(TipoEvento:TpcnTpEvento): String;
 
    property id: String              read FID             write FID;
    property cOrgao: Integer         read getcOrgao       write FcOrgao;
    property tpAmb: TpcnTipoAmbiente read FtpAmbiente     write FtpAmbiente;
    property CNPJ: String            read FCNPJ           write FCNPJ;
    property chNFe: String           read FChave          write FChave;
    property dhEvento: TDateTime     read FDataEvento     write FDataEvento;
    property tpEvento: TpcnTpEvento  read FTpEvento       write FTpEvento;
    property nSeqEvento: Integer     read FnSeqEvento     write FnSeqEvento;
    property versaoEvento: String    read getVersaoEvento write FversaoEvento;
    property detEvento: TDetEvento   read FDetEvento      write FDetEvento;
    property DescEvento: String      read getDescEvento;
    property TipoEvento: String      read getTipoEvento;
  end;

 

Alguma dica?

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Marcos,

 

Faça desta forma:

 
 dhDataCanc    := ACBrNFe1.WebServices.Consulta.procEventoNFe.Items[0].RetEventoNFe.retEvento.Items[x].RetInfEvento.dhRegEvento;
 
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bom dia Ítalo,

 

No meu caso os índices dos dois "Items" seriam a variável I mesmo para pegar

a data e hora do cancelamento? ou seria 0 e I?

 


ACBrNFe1.DANFE.NFeCancelada := False;

Motivo := ACBrNFe1.WebServices.Consulta.XMotivo;
For I:=0 To ACBrNFe1.WebServices.Consulta.procEventoNFe.Count - 1 Do
   Begin
   if (ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.InfEvento.tpEvento = teCancelamento) and
      (ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.cStat in [101,151,155,135,128]) then
      Begin
      ACBrNFe1.DANFE.NFeCancelada := True;
      dhcancel := ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.retEvento.Items.RetInfEvento.dhRegEvento;
      ShowMessage(FormatDateTime('DD/MM/YYYY HH:MM:ss',dhcancel));
      Motivo := 'Cancelamento de NF-e homologado';
      Break;
      End;
   End;

 

Editado por Marcos Spirito

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

Bom dia Ítalo,

 

Mas no meu caso, eu faço uma busca nos eventos para saber se algum deles é de cancelamento, por isso não uso um índice fixo

no I (acho que está ok, vi isso em uma postagem aqui do forum quando mudou o esquema de consultar nfe cancelada),

já o outro índice, não sei "em cima do que" ele é, ou seja, não sei qual índice pegar ou o que eu posso testar para pegar o índice

certo...

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Marcos,

 

A data/hora do cancelamento eu pego no momento do cancelamento, ou seja, após o envio do evento de cancelamento a SEFAZ retorna a homologação do evento, ou seja, acusa que o evento foi registrado e vinculado a nota.

 

No seu caso, você esta realizando uma consulta.

 

O retorno sempre vai conter o protocolo de autorização ou o protocolo de cancelamento (depende da SEFAZ) e se existir os eventos vinculados a NF-e.

 

Se não me falha a memória:

 

dhDataCanc    := ACBrNFe1.WebServices.Consulta.procEventoNFe.Items[ I ].RetEventoNFe.retEvento.Items[ J ].RetInfEvento.dhRegEvento;

 

Em Items[ I ] temos a lista de eventos retornados e em items[ J ] temos as informações de cada evento retornado, como por exemplo a data e hora do registro do evento.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo,

 

Me corrija se eu tiver errado... esse ACBrNFe1.WebServices.Consulta... refere-se ao xml de retorno (aquele com final -sit.xml),

e cada nível a mais do meu objeto seria um nó mais interno do meu XML, é isso?

 

Então no caso do meu retorno (abaixo), aonde eu tenho somente um InfEvento no meu RetEvento o meu "J" teria valor 0 (zero) sempre,

é isso?

 

 

<retEvento versao="1.00">

<infEvento>
<tpAmb>1</tpAmb>
<verAplic>SP_EVENTOS_PL_100</verAplic>
<cOrgao>35</cOrgao>
<cStat>135</cStat>
<xMotivo>Evento registrado e vinculado a NF-e</xMotivo>
<chNFe>35140912926075000187550010000030561000030560</chNFe>
<tpEvento>110111</tpEvento>
<xEvento>Cancelamento registrado</xEvento>
<nSeqEvento>1</nSeqEvento>
<CNPJDest>00618958000140</CNPJDest>
<dhRegEvento>2014-09-16T14:18:06-03:00</dhRegEvento>
<nProt>135140578763099</nProt>
</infEvento>
</retEvento>
 
A minha dúvida é, dentro do meu for I (usado para pegar os eventos e ver se um é de cancelamento), como eu sei
qual das informações (Items) eu devo pegar para ter a data de cancelamento?
Porque se eu entendi direito, caso eu faça um for para pegar o J sem nenhum "critério" eu vou pegar sempre o
ultimo J o que seriaa mesma coisa de passar aquele count-1 como parâmetro...
 
for J:=0 to  ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.retEvento.Count-1 do
   dhcancel := ACBrNFe1.WebServices.Consulta.procEventoNFe.Items.RetEventoNFe.retEvento.Items[J].RetInfEvento.dhRegEvento;

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Marcos,

 

Note que dentro do grupo <infEvento> onde esta a data e hora que o evento foi registrado <dhRegEvento>, você tem também o tipo de evento <tpEvento>.

 

Portanto você pode checar se é um cancelamento ou não no segundo for ( J ).

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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