Jump to content

Embarcadero Conference 2019

22/10 - Visite o Stand do ACBr
Saiba mais

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Marcelo Ferreira Taquari

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

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

Share this post


Link to post
Share on other sites

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
Ajude o Projeto ACBr crescer - Assine o SAC

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

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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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.

 

Share this post


Link to post
Share on other sites

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