Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

notax

lógica

Recommended Posts

Galera, to com uma dúvida de lógica por aqui, vejam o caso:

 

Tenho um sistema que emite contratos que possuem uma validade limitada, exemplo de 15/04/2011 (datai) a 15/07/2011 (dataf), ok?

 

Nesse mesmo sistema eu tenho um relatório que chamo de "folha de pagto" onde eu preciso calcular em determinado período quais contratos estão vigentes para cálculo de comissões...

 

Hoje estou fazendo da seguinte forma:

Se quero o relatório hoje 27/04/2011 eu transformo essa data (pegando o mês e o ano) em 01/04/2011 e especifico na minha query que eu quero mostrar todos os contratos onde a data inicial (datai) for maior ou igual do que 01/04/2011, ou seja, o contrato emitido em 15/04/2011 estaria corretamente dentro deste filtro, já que 15/04/2011 é maior ou igual a 01/04/2011, compreenderam?

 

A data final não importa pra mim, pq se o relatório for tirado por exemplo em agosto esse contrato automaticamente não participará, pois minha query o exclui tb...

 

Agora é que vem o problema... percebam que seu eu resolvo, por qq razão buscar os contratos vigentes com data retroativa, ou seja, em 01/03/2011 por exemplo, o mesmo contrato seguirá aparecendo no relatório, já que 15/04/2011 também é maior ou igual a 01/03/2011 no entanto aqui temos um erro... visto que o contrato não pode aparecer na folha de março de 2011 até por que em março de 2011 o contrato do exemplo nem existia ainda, entendem?

 

Este contrato de exmplo, que vai de 15/04/2011 até 15/07/2011 deverá aparecer apenas nos relatórios de 01/04/2011 até 01/07/2011, sacaram?

 

Muito bem... visto isso pergunto: alguém tem alguma sugestão para dar no intuito de resolver esse problema lógico?

 

Valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia criar um campo ativo/inativo no banco de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo retorno...

 

Olhem só... o problema do betweem é o seguinte:

 

Tenho a datai que é 01/05/2011

 

E as datas do contrato são por exemplo: datai_c = 15/05/2011 e dataf_c = 15/10/2011

 

Esse contrato precisaria aparecer na folha entre abril e outubro de 2011... mas seu eu colocar simplesmente um between ele não apareceria na de maio...

 

vejam: "where datai between datai_c and dataf_c" o q é exatamente igual a "where 01/05/2011 between 15/05/2011 and 15/10/2011"

 

PORÉM isso resolveria se e somente se eu conseguisse alterar dinamicamente (E DENTRO DA QUERY) a datai_c para sempre dia 01 ou seja passar 15/05/2011 para 01/05/2011...

 

Eu tentei assim e não rolou:

ComandoSQL1 = ComandoSQL1 &  and #"&(datai)&"# between "&"01/"&"Right(a.inicontrato, 7) and a.finicontrato) "

 

O erro que deu foi de data type mismatch...

 

O que ocorre é que vejam, eu pegueu os últimos 7 digitos da data inicial do contrato e acresencte 01 na frente para alterar... mas eu acho que isso não da muito certo, até pq tem meses que podem vir com apenas um algarismo e outros que vem com dois algarismos...

 

Ou seja, talves este select mounth pode ser a solução... alguém tem algum palpite?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz assim:

datai = 01/03/2011

datai_american = 03/01/2011

sql = "select * from minha tabela where #"&(datai_american)&"# between Month(a.inicontrato) /01/ Year(a.inicontrato) and a.finicontrato"

 

Olha, não deu nenhuma mensagem de erro, mas o contrato cadastrado no banco de dados com as infs

inicontrato = 12/04/2011

finicontrato = 12/08/2011

seguiu aparecendo nos resultados da consulta e não poderia...

 

IMPORTANTE: só postei um trecho da query, por isso o alias "a"... postei com o alias apenas para ter certeza de que fiz a sintaxe correta...

 

O que me dizem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal... segui fazendo vários testes e realmente não funcionou desta forma (post anterior)...

 

O mais engraçado é que não dá nenhuma mensagem de erro... nada ocorre, só que simplesmente não filtra da forma adequada...

 

Bom, se alguém souber dar mais alguma dica... fico grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.