Jump to content

dev botao

Problemas na verificação de DT_INI e DT_FIN no WriteRegistroK100 -


Go to solution Solved by Juliana Tamizou,
  • Este tópico foi criado há 2052 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Estou fazendo a geração do Bloco K e estou tendo problemas com a validação de datas onde debugando, as condições retornam False e mesmo assim apresenta o Exception: A data inicial está fora do periodo do EFD!, já verifiquei se estava enviando hora e não é isso.

 

procedure TBloco_K.WriteRegistroK100(RegK001: TRegistroK001);
var
  intFor: integer;
begin
  if Assigned(RegK001.RegistroK100) then
  begin
     for intFor := 0 to RegK001.RegistroK100.Count - 1 do
     begin
        with RegK001.RegistroK100.Items[intFor] do
        begin
          if (DT_INI < Bloco_0.DT_INI)or (DT_INI > Bloco_0.DT_FIN) then
             raise Exception.Create('A data inicial está fora do periodo do EFD!');
          if (DT_FIN < Bloco_0.DT_INI)or (DT_FIN > Bloco_0.DT_FIN) then
             raise Exception.Create('A data final está fora do periodo do EFD!');

Atribuo a DT_INI e DT_FIN no ACBrSPEDFiscal, conforme código abaixo:
 

with ACBrSPEDFiscal1 do
begin
	DT_INI := DateOf(dtInicial.Date);
	DT_FIN := DateOf(dtFinal.Date);
	//DT_INI := StrToDate('01/01/2019');
	//DT_FIN := StrToDate('31/01/2019');
end;

 

No registro K100 estou atribuindo os valores assim:

with RegistroK100New do
begin
	DT_INI := DateOf(QrySelect.FieldByName('DT_INI').AsDateTime);
	DT_FIN := DateOf(QrySelect.FieldByName('DT_FIN').AsDateTime);
    ...
end;

Na Imagem abaixo podem ver no Watch List os valores e ver que mesmo retornando False ele entra no if:

image.thumb.png.622d09fd80693931af9408ef78dc51d0.png

Alguma dica do que posso estar fazendo errado?

Obrigado.

Marcelo Ferreira

Link to comment
Share on other sites

  • Administradores
  • Solution

Boa tarde.

Verifique os valores passados ao registro K100, observe o trecho extraído do demo do componente..

with RegistroK100New do
      begin
        DT_INI:= strtodate('01/01/2014');
        DT_FIN:= StrToDate('31/01/2014');   

Att.

  • Thanks 1
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link to comment
Share on other sites

7 minutos atrás, Juliana Tamizou disse:

Boa tarde.

Verifique os valores passados ao registro K100, observe o trecho extraído do demo do componente..

with RegistroK100New do
      begin
        DT_INI:= strtodate('01/01/2014');
        DT_FIN:= StrToDate('31/01/2014');   

Att.

Estou testando nesse momento, mas acredito que o problema era esse mesmo, o meu filtro não estava gerando nenhum registro K100 e por isso dava a divergência, apesar da incoerência do Delphi no Watch List em mostrar que o os valores estava corretos e a condição retornavam false e mesmo assim dava o exception. 
Mas alguns testes e já venho aqui comunicar o resultado.

  • Like 1
Link to comment
Share on other sites

Já resolvi pessoal, se o registro K200 não tiver nenhum registro ele dá esse erro, o que faz sentido, pois nesse caso é SemDados, quando acertei o filtro para trazer os registros corretos do banco de dados passou.
No entanto, fica uma observação cabulosa quanto ao Delphi (o que não é o objetivo desse grupo), o if estava retornando false com informações anteriores e mesmo assim ele entrava. Mas isso fica para outro debate.
Obrigado.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Bom dia,

Marcelo, já passei por essa situação também, pelo que entendi DT_INI e Bloco_0.DT_INI estão vindo com data e hora, para resolver fiz o seguinte.

if (DateOf(DT_INI) < DateOf(Bloco_0.DT_INI)) or (DateOf(DT_INI) > DateOf(Bloco_0.DT_FIN)) then
             raise Exception.Create('A data inicial está fora do periodo do EFD!');
         
          if (DateOf(DT_FIN) < DateOf(Bloco_0.DT_INI))or (DateOf(DT_FIN) > DateOf(Bloco_0.DT_FIN)) then
             raise Exception.Create('A data final está fora do periodo do EFD!');

 

Peço ajuda dos amigos, para saber se fiz o correto ou tem algo que me passei.

Abraço a todos

Link to comment
Share on other sites

2 horas atrás, Henrique_automatizze disse:

Bom dia,

Marcelo, já passei por essa situação também, pelo que entendi DT_INI e Bloco_0.DT_INI estão vindo com data e hora, para resolver fiz o seguinte.

if (DateOf(DT_INI) < DateOf(Bloco_0.DT_INI)) or (DateOf(DT_INI) > DateOf(Bloco_0.DT_FIN)) then
             raise Exception.Create('A data inicial está fora do periodo do EFD!');
         
          if (DateOf(DT_FIN) < DateOf(Bloco_0.DT_INI))or (DateOf(DT_FIN) > DateOf(Bloco_0.DT_FIN)) then
             raise Exception.Create('A data final está fora do periodo do EFD!');

 

Peço ajuda dos amigos, para saber se fiz o correto ou tem algo que me passei.

Abraço a todos

Boa tarde Henrique, 

Eu também pensei em resolver dessa maneira, mas depois entendi que sem o registro K200 ele por alguma maneira que ainda não sei não valida essa informação, mesmo a DT_INI ou DT_FIN estar dentro do período necessário. Então preferi não mexer no código fonte o ACBr, pois isso pode ter problemas com novas atualizações.

Abraço.

 

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.