Bom dia,
Volto a pedir a ajuda dos mestres dêsse forum, pois não me resta outra saída.
A situação é bem simples. Preciso comparar duas datas, se forem diferentes ->rotina1, se forem iguais ->rotina2.
Acontece que uma data eu pego de um arquivo através de FieldGet() e a outra eu entro com ela em uma variável.
Já fiz vários testes, chego a visualizar as duas datas com msginfo() antes da comparação mas, mesmo as duas estando idênticas, o programa não atende a condição estabelecida.
Alguém poderia me disponibilizar uma pequena rotina com êsses parâmetros para que eu veja onde estou errando?
Agradecimentos,
Gilvandi
Rotina para comparar duas datas
Moderador: Moderadores
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Rotina para comparar duas datas
Olá Gilvandi,
Post como você está usando que fica mais fácil de dar a dica olhando para o código.
Post como você está usando que fica mais fácil de dar a dica olhando para o código.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Rotina para comparar duas datas
Olá! Para facilitar, poste o teu código.
Se as duas variáveis forem do tipo Date, é super simples:Vandi escreveu: Preciso comparar duas datas, se forem diferentes ->rotina1, se forem iguais ->rotina2.
Código: Selecionar todos
IF dDate1 != dDate2
Rotina1()
Else
Rotina2()
Endif[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Rotina para comparar duas datas
Boa tarde,
Segue abaixo o código da minha rotina.
Antes, quero dizer para desculparem o estilo arcaico do meu código. Acontece que não sou um profissional da área, nunca tive tempo para me aprofundar no assunto. Sempre desenvolví pequenas rotinas em clipper para meu próprio uso que me atenderam bem.
Após enviar o pedido de ajuda ao forum, dei umas mexidas e alguma coisa mudou. Mesmo assim, envio o código pois o mesmo está com um erro de lógica e talvez vcs possam me dar uma ajuda.
Trata-se de um arquivo <TotForne> com os campos (pgttCodi, pgttData e pgttValo), rescpectivamente C, D e N.
A partir de uma data entrada em uma variável, monto mais 06 datas, formando, então, 07 datas,
Quero pesquisar no arquivo se estas datas constam no mesmo para cada <pgttCodi>, pois, se constarem é pq tem valor gravado do campo <pgttValo>.
Com isso então, eu mostro na tela:
-------------------------------------------------------------------------------------------------------------------------
Fornecedor | data1 | data1 | data1 | data1 | data1 | data1 | data1 |
-------------------------------------------------------------------------------------------------------------------------
Fornec nro 01 | 541,20 | 0,00 | 169,40 | 25,00 | 0,00 | 0,00 | 240,00 |
-------------------------------------------------------------------------------------------------------------------------
Antecipadamente meus agradecimentos a todos,
Gilvandi
Segue abaixo o código da minha rotina.
Antes, quero dizer para desculparem o estilo arcaico do meu código. Acontece que não sou um profissional da área, nunca tive tempo para me aprofundar no assunto. Sempre desenvolví pequenas rotinas em clipper para meu próprio uso que me atenderam bem.
Após enviar o pedido de ajuda ao forum, dei umas mexidas e alguma coisa mudou. Mesmo assim, envio o código pois o mesmo está com um erro de lógica e talvez vcs possam me dar uma ajuda.
Trata-se de um arquivo <TotForne> com os campos (pgttCodi, pgttData e pgttValo), rescpectivamente C, D e N.
A partir de uma data entrada em uma variável, monto mais 06 datas, formando, então, 07 datas,
Quero pesquisar no arquivo se estas datas constam no mesmo para cada <pgttCodi>, pois, se constarem é pq tem valor gravado do campo <pgttValo>.
Com isso então, eu mostro na tela:
-------------------------------------------------------------------------------------------------------------------------
Fornecedor | data1 | data1 | data1 | data1 | data1 | data1 | data1 |
-------------------------------------------------------------------------------------------------------------------------
Fornec nro 01 | 541,20 | 0,00 | 169,40 | 25,00 | 0,00 | 0,00 | 240,00 |
-------------------------------------------------------------------------------------------------------------------------
Código: Selecionar todos
*---------------------------------------------------------------------------------------
Function MontarGrade(oDataInicial)
*---------------------------------------------------------------------------------------
Private CodiForn[1000],nDia[7]
Private nValor01[1000],nValor02[1000],nValor03[1000],nValor04[1000]
Private nValor05[1000],nValor06[1000],nValor07[1000]
Private antes,nCtd:=0,vNdia:=1,_nDia:='',mValor:=SPACE(08),arqData:=SPAC(10),varData:=SPAC(10)
nDia[1]:=CTOD(oDataInicial)+0
nDia[2]:=CTOD(oDataInicial)+1
nDia[3]:=CTOD(oDataInicial)+2
nDia[4]:=CTOD(oDataInicial)+3
nDia[5]:=CTOD(oDataInicial)+4
nDia[6]:=CTOD(oDataInicial)+5
nDia[7]:=CTOD(oDataInicial)+6
SELECT TOTFORNE
OrdSetFocus( 'nCodiData' ) // indexado por c¢digo+data
TOTFORNE->(DbGoTop())
antes:=SPAC(04)
DO WHILE!Eof()
nCtd=nCtd+1
If TOTFORNE->pgttCodi#antes
antes:=TOTFORNE->pgttCodi
EndIf
CodiForn[nCtd]:=TOTFORNE->pgttCodi
Do While TOTFORNE->pgttCodi==antes
mValor='nValor'+StrZero(vNdia,2)
If DTOS(TOTFORNE->(FieldGet(2))) != DTOS(nDia[vNdia])
mValor[nCtd]=TOTFORNE->pgttValo
Else
mValor[nCtd]=0.00
EndIf
vNdia=vNdia+1
If vNdia>7
Exit
EndIf
TOTFORNE->(DbSkip())
EndDo
TOTFORNE->(DbSkip())
EndDo
// MostraNaTela()
RETURNAntecipadamente meus agradecimentos a todos,
Gilvandi
Editado pela última vez por Pablo César em 24 Mai 2012 16:52, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Rotina para comparar duas datas
Olá!
Dei uma simplificada no teu código. Não sei se faz exatamente o que você quer mas, acho que dará uma ideia. Não se esqueça de usar a tag [ code ] ( botão Code na janela "Postar uma Resposta") quando for postar código fonte.
Editei para corrigir a inicialização de variáveis e sintaxe.
Dei uma simplificada no teu código. Não sei se faz exatamente o que você quer mas, acho que dará uma ideia.
Código: Selecionar todos
*---------------------------------------------------------------------------------------
Function MontarGrade(oDataInicial)
*---------------------------------------------------------------------------------------
LOCAL aInfo
LOCAL dDtInicio, dDtFim
LOCAL i
LOCAL nTotGer
LOCAL nTotVal
LOCAL antes
TOTFORNE->( OrdSetFocus( 'nCodiData' ), DbGoTop() ) // indexado por c¢digo+data
aInfo := {}
nTotGer := 0
nTotVal := 0
dDtInicio := oDataInicial // assume que oDataInicial seja do tipo date
dDtFim := oDataInicial + 6 // acrescenta 6 dias
DO WHILE TOTFORNE->( !Eof() )
antes:=TOTFORNE->pgttCodi
DO While TOTFORNE->pgttCodi==antes .And. TOTFORNE->( !Eof() )
If ( TOTFORNE->pgttData >= dDtInicio ) .And. (TOTFORNE->pgttData <= dDtFim )
IF TOTFORNE->pgttValo > 0
AAdd( aInfo, { TOTFORNE->pgttCodi, TOTFORNE->pgttData, TOTFORNE->pgttValo } )
EndIf
Endif
nTotVal += TOTFORNE->pgttValo
TOTFORNE->(DbSkip())
EndDo
AAdd( aInfo, { antes, 'TOTAL', nTotVal } )
nTotGer += nTotVal
nTotVal := 0
EndDo
AAdd( aInfo, { "", 'TOTAL GERAL', nTotGer } )
// MostraNaTela()
Editei para corrigir a inicialização de variáveis e sintaxe.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
