Ir para conteúdo
  • Cadastre-se

dev botao

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


Ver Solução Respondido por Juliana Tamizou,
  • Este tópico foi criado há 2126 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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

  • Administradores
  • Solution
Postado

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.

  • Obrigado 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 !!

Postado
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.

  • Curtir 1
Postado

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.

  • Curtir 1
  • 2 semanas depois ...
Postado

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

Postado
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.

 

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