FIltro manual por data para ser visualizado pelo achoice....
Moderador: Moderadores
-
rangelssilva
- 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....
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...
:'(
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...
:'(
- Pablo César
- 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
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.Fdatapag1:=ctod(" / / ")
Fdatapag2:=Date()
Na sua mensagem você mencionou que seu código estaria assim:
Código: Selecionar todos
If xdatapag>=Fdatapag1 .and. xdatapag<=Fdatapag1Eu 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:
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.todos os registros são mostrados, inclusive fora do intervalo digitado..... (xdatapag e o campo do DBF)
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.
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

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
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.

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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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).
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.
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

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
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...

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

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
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,
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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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.
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.
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
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...
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ê
"
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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.
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.
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!
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!
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.
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}
{POG - Programação Orientada a Gambiarra}
-
rangelssilva
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
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.......

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.......
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!
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!
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
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,
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
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
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.
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!
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!
