abreuluiston 9/10/2023, 19:58
A função SEIMED é na verdade um IIF do SQL que no modo de exibição de consulta ele traduz para SEIMED. O IIF tem a seguinte sintaxe:
IIF( ; parte verdadeira ; parte falsa)
Dentro dos blocos verdadeiro e falso você pode aninhar outro IIF e, dessa forma, fazer novas checagens lógicas que gerarão mais blocos verdadeiros e falsos. Se não me engano é possível aninhar até 7 IIFs dentro de um IF, porém, chega um momento que fica bem confuso.
No seu caso o que fiz foi exatamente isso. Aninhei um IIF dentro da parte verdadeira do IIF original e nesse IIF aninhado eu criei a condição de data de validade menos data atual do sistema. Se a resposta for menor que 70 ele volta a literal "Vencimento em Até 60 Dias", caso contrário "A Vencer - Com prazo OK".
Coloquei a constante 70 para testar pq nos seus registros não tem nenhum caso menor que 60. Então, basta vc alterar essa constante para 60 e testar na sua base que deve possuir mais registros.
Somente para fechar, a parte falsa do IIF mais externo (o original) eu não mexi. Então, se está vencido ele continuará trazendo a literal "Vencido".
Por último, só para efeito de aprendizado se alguém pingar nessa ocorrência e analisar o SELECT. O grupy by nessa consulta não tem efeito pq ela não está agrupando nada. Um grupo se dá quando vc quer contar, somar, pegar o primeiro valor de um grupo de dados e etc que conterá mais de um registro. No seu caso não tem sentido pq as colunas estão todas abertas e nada está sendo agrupado. Então, se você simplesmente retirar o groupy by a consulta funcionará da mesma forma.
O SELECT que vc deve substituir na sua base é o que segue:
SELECT Produtos.CódigoDoProduto, Produtos.Discriminacao, Produtos.DataFabricacao, Produtos.DataValidade, Produtos.Lote, Format([DataValidade],"mmm/yyyy") AS [Mes/Ano], IIf(DateDiff("d",Date(),[DataValidade])>=0,IIf([datavalidade]-Date()<70,"Vencimento em Até 60 dias","A Vencer - Com prazo OK"),"Vencido") AS Produto
FROM Produtos
GROUP BY Produtos.CódigoDoProduto, Produtos.Discriminacao, Produtos.DataFabricacao, Produtos.DataValidade, Produtos.Lote, Format([DataValidade],"mmm/yyyy"), IIf(DateDiff("d",Date(),[DataValidade])>=0,IIf([datavalidade]-Date()<70,"Vencimento em Até 60 dias","A Vencer - Com prazo OK"),"Vencido");
Se testar e estiver tudo ok acho que basta informar e finalizar a ocorrência.
At.
Luis Abreu