FIltro manual por data para ser visualizado pelo achoice....

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

FIltro manual por data para ser visualizado pelo achoice....

Mensagem por rangelssilva »

Caros amigos clipeiros fiz um filtro "manual" para funcionar da sgeuinte maneira...

Fdatapag1:=ctod(" / / ")
Fdatapag2:=Date()


Depois dos dados serem pedidos em uma tela faço o seguinte:

If xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag1


Adiciono os elementos no vetor para exibição na tela....

mas acontece que com essa comparação todos os registros são mostrados, inclusive fora do intervalo digitado..... (xdatapag e o campo do DBF)


endif

Alguem conhece algum comando para comparar datas, e verificar se é maior ou menor, etc... assim consigo jogar no filtro somente os registros que preciso....

Obrigado e até a próxima...
:'(
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: FIltro manual por data para ser visualizado pelo achoice

Mensagem por Pablo César »

Fdatapag1:=ctod(" / / ")
Fdatapag2:=Date()
Se você tiver que comparar datas e uma delas estiver em branco, qualquer outra data vai ser sempre maior que a que está em branco. Portanto, você não deve permitir que o usuário a deixe em branco caso deseje filtrar algo, do contrário vai listar todas as datas é claro.

Na sua mensagem você mencionou que seu código estaria assim:

Código: Selecionar todos

If xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag1


Eu tinha suposto que xdatapag é uma variável cujo conteúdo proveniente do DBF e Fdatapag1 e Fdatapag2 são variáveis que o usuário define como periódo a ser alcançado. Mas observe que você está mencionando duas vezes a mesma variável Fdatapag1. No entanto mais embaixo você diz:
todos os registros são mostrados, inclusive fora do intervalo digitado..... (xdatapag e o campo do DBF)
Você diz utiliza a variável xdatapag e o campo do DBF. Mas estes não são os mesmos ? Exemplifique melhor dando os nomes aos campos especialmente quando você define as variáveis, mas coloque o bloco de código com a opção "CODE" da edição do fórum para entender melhor com edentações.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Mensagem por rangelssilva »

Eu exemplifiquei errado....

If xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag2

aadd.......

endif

Onde xdatapag é o campo do DBF.... e Fdatapag1 e fdatapag2 são as variáveis com dados definidos pelo usuário....

Ou seja deve entrar no "IF" e adicionar o registro somente se xdatapag estiver dentro do intervalo digitado pelo usuário... (FdataPag1, Fdatapag2)

fDatapag1=10/01/08
fDatapag2=15/01/08

somente aparecerá no achoice os registros entre as data definidas acima.... Não sei se meu erro foi na comparação...

Acho que agora ficou mais claro....
Obrigado até o momento...
Atenciosamente,
Rangel.
:(
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Aparentemente estaria certo. O único que tenho que te alertar é quanto ao uso do:

SET DATE TO BRITISH // Só para o caso de você transformar caracter para data no formato brasileiro dd/mm/aa
SET DATE CENTURY // Para trabalhar com 4 dígitos que é mais seguro

Quem sabe não esteja alí a raíz do seu problema. Porque sem isso muito provável que as datas onde estão como: 10/01/08 sejam na verdade interpretados como: 10/01/1908 e não 10/01/2008.

O campo xdatapag, é do tipo DATA mesmo ou tipo caracter ? (este é um dado muito importante).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Mensagem por rangelssilva »

Bom Dia, Amigos clipeiros

Estou usando Set date to british e o campo xdatapag do DBF é do tipo data mesmo?


Tem algum transformação que ue deva fazer? vou pensar na possibilidade de trabalhar com ano de 4 digitos......
Aguardo a próxima dica, quando possível para eu dar manutenção no meu sistema e arrumar isso....



Valeu galera....
Tenham um ótimo fim de semana...
:D
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Olha, teoricamente teria que dar certo... passe aqui a parte do seu código fonte onde você faz esta comparação entre as datas, assim vai ficar mais fácil descobrir o que está acontecendo.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Teoricamente existe a possibilidade de que pela falta do SET CENTURY ON, esteja mal interpretando as datas na hora de converter de CTOD() ou até mesmo na máscaras das variáveis Fdatapag1 e Fdatapag2 nos GET. Daí o sistema interpreta em vez de ser ano 2008 como 1908.

Mas seria interessante ver o código caso não fosse este o problema. è só colocar o SET CENTURY ON e ver.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Voce tá usando set epoch ???

tente colocar set epoch to 1930

pode ser isso que está acontecendo .. o Pablo falow set cent on .. mas o set cent on só vai te dar o ano com 4 digitos.. se voce nao colocar set epoch to 1930 (por exemplo) o /08 vai ser entendido mesmo como 1908 e vai mostrar todos os registros...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Tens razão Rubens, o SET CENTURY ON não é o suficiente se for trabalhar com dois dígitos para o ano. Como neste caso de atribuir a variável CTOD("10/01/08"), então o SET EPOCH é necessário. Principalmente se a entrada de dados foi feita sem essas definições de ambiente, pode ser que no proprio BD as datas estejam gravadas como 1908 e não 2008 (como por exemplo). Então aconselho a verificar o BD exibindo os dados com o DBU centuriado (hihihi, inventei uma nova palavra) para ver se as datas estão corretas com 4 dígitos.

O mais seguro, na minha opinião, é trabalhar com os quatro dígitos:
CTOD("10/01/2008") daí pode trabalhar com qualquer data.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Acho que fica mais fácil usar DTOS() de uma vez. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Fdatapag1:=ctod(" / / ")
Fdatapag2:=Date()

If xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag2
(aadd)
end

{xdatapag>=Fdatapag1}

Pelo seu código, qualquer data que o sujeito entrar é maior que a data vazio.

Vc pode tentar:

{If empty(xdatapag) .or. xdatapag<=Fdatapag2}

Data de pagamento vazia ou até o dia de hoje.

Boa sorte. Espero ter ajudado.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Mensagem por rangelssilva »

BOa TArde, Amigos clipeiros

Eu tentei de diversas formas e nada coloquei set epoch to 1940 e comecei a trabalhar com 4 digitos.......


O filtro não seleciona o intervalo digitado pelo usuário. EU precisava que fosse adicionado no achoice somente os rehistros que satisfaçam a seguinte condição:


Diferente de branco. ctod(" / / ") ( ano com 4 digitos)...... entre 2 periodos selecionados....ex: de 10/01/2008 a 15/02/2008.. OU seja será mostrado no achoice, somente os registros que tiverem data de pagamento preenchidas e que estiverem dentro do período acima......

// Variáveis do Filtro
Fdatapag1:=ctod(" / / ")
Fdatapag2:=Date()

// campo do DBF
xdatapag

Vejam o codigo

If xdatapag <> ctod(" / / ") .and. xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag2

(aadd)

end


Tentei de várias formas e nada...... Alguem tem mais alguma solução.......

:(
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Não entendo porque não funcionou. Mas você tentou usar algo do tipo do código abaixo?

Código: Selecionar todos

if !Empty(DTOS(xdatapag)) .and. DTOS(xdatapag) >= DTOS(Fdatapag1) .and. DTOS(xdatapag) <= DTOS(Fdatapag2)
   bla bla bla...
end
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Coloque aqui o seu código fonte, assim vai ficar mais fácil descobrir onde está o problema.

Com certeza existe algum erro neste seu código, pois teoricamente teria que dar certo.

Abraços,
Editado pela última vez por Toledo em 11 Mar 2008 18:36, em um total de 1 vez.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Tirou as palavras do meu teclado. :)

Aliás, aproveitando o ensejo, um apelo a todos os colegas com problemas do tipo: deu erro? Poste qual é a mensagem de uma vez. Código não funciona? Mostre o trecho do código. Assim fica mais fácil ajudar.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder