Problema com Datas
Moderador: Moderadores
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Problema com Datas
Boa Tarde à Todos mais uma vez.
Pessoal tenho mais um problema com clipper/dbf.
Tenho uma tabela e preciso pegar o valor da última data, ou seja,
tenho na tabela os campos data, codigo, cor, tamanho.
Quando o codigo, a cor e o tamanho forem iguais aos informados pelo cliente
pegar a última data, pois no banco posso ter:
data codigo cor tamanho
01/02/2011 2 preto 5
05/07/2011 2 preto 5
30/09/2011 2 preto 5
Como pegar a data 30/09/2011?
Pessoal tenho mais um problema com clipper/dbf.
Tenho uma tabela e preciso pegar o valor da última data, ou seja,
tenho na tabela os campos data, codigo, cor, tamanho.
Quando o codigo, a cor e o tamanho forem iguais aos informados pelo cliente
pegar a última data, pois no banco posso ter:
data codigo cor tamanho
01/02/2011 2 preto 5
05/07/2011 2 preto 5
30/09/2011 2 preto 5
Como pegar a data 30/09/2011?
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
Problema com Datas
Nao sei como esta seu codigo, seus indices etc, baseando apenas como se resolver, eu faria um INDICE temporario, filtrando estas opcoes digitados pelo operador, na ordem dita por voce.
Boa sorte!
Código: Selecionar todos
//campos data, codigo, cor, tamanho
*--cria um idx para buscar os dados de codigo+cor+tamanho e de lambuja indexa da data mais nova para mais velha
*--estou supondo que data é do tipo date, codigo é numerico e cor/tamanho sao caracter
INDEX ON padl(CODIGO,6)+cor+tamanho+DESCEND(dtos(data)) TO idx1
go top
*--faz a busca atraves dos dados informados pelo operador
seek padl(CODIGO,6)+cor+tamanho
*--se encontrar, o primeiro registro sera o de data mais nova
if found()
ultdata=data
else
wait"nada foi encontrado com estas informacoes. Tecle algo"
endifClipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Problema com Datas
Bom dia,
Agradeço a ajuda Andril, porém eu já faço uma busca no dbf e preciso filtrar a data dentro de um período.
Com isso eu pego quantas vendas que houve no período informado.
Mas ainda tenho que mostrar a data da última venda idependente do período.
Não sei se fui clara, desculpe.
Data/Codigo é do tipo caracter e Cor/Tamanho é do tipo numério.
Agradeço!
Agradeço a ajuda Andril, porém eu já faço uma busca no dbf e preciso filtrar a data dentro de um período.
Código: Selecionar todos
SELE CADSAI
SET ORDER TO 1
SET SOFTSEEK ON
SEEK SUBSTR(DTOC(pDTINI),7,4)+SUBSTR(DTOC(pDTINI),4,2)+SUBSTR(DTOC(pDTINI),1,2)+pCODIGO
SET SOFTSEEK OFF
TOTPRODUTO := 0
WHILE CTOD(CADSAI->DATA) <= CTOD(dthoje) .AND. !EOF()
IF CODIGO = pCODIGO .AND. COR = pCOR .AND. TAMANHO = pTAMANHO .AND.;
(CTOD(CADSAI->DATA) >= pDTINI .AND. CTOD(CADSAI->DATA) <= pDTFIM)
TOTPRODUTO+= QUANT
ENDIF
SKIP
END
Mas ainda tenho que mostrar a data da última venda idependente do período.
Não sei se fui clara, desculpe.
Data/Codigo é do tipo caracter e Cor/Tamanho é do tipo numério.
Agradeço!
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
Problema com Datas
Entao, vamos aproveitar a sua estrutura, usando o do while.
Nao testei, veja se funciona.
Abracos
Código: Selecionar todos
SELE CADSAI
SET ORDER TO 1
SET SOFTSEEK ON
SEEK SUBSTR(DTOC(pDTINI),7,4)+SUBSTR(DTOC(pDTINI),4,2)+SUBSTR(DTOC(pDTINI),1,2)+pCODIGO
SET SOFTSEEK OFF
TOTPRODUTO := 0
DatMaisNova=ctod(CADSAI)
WHILE CTOD(CADSAI->DATA) <= CTOD(dthoje) .AND. !EOF()
IF CODIGO = pCODIGO .AND. COR = pCOR .AND. TAMANHO = pTAMANHO .AND.;
(CTOD(CADSAI->DATA) >= pDTINI .AND. CTOD(CADSAI->DATA) <= pDTFIM)
DatMaisNova=MAX( DatMaisNova, ctod(CADSAI) )
TOTPRODUTO+= QUANT
ENDIF
SKIP
END
? DatMaisNova
Abracos
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Problema com Datas
Muito obrigada mais uma vez Andril,
Testei seu código e deu erro. Não entendi bem o que vc fez.
Mas CADSAI é o nome do meu dbf.
DATA é o campo do dbf que quero usar.
Mudei na linha abaixo e funcionou:
e
Porém acho que não consegui me espressar bem.
Tenho o seguinte
codigo cor tamanho data
01 preto 21 01/08/2011
01 preto 23 06/08/2011
01 branco 21 19/08/2011
01 branco 21 05/09/2011 -->ultima venda do produto 01 branco com tamanho 21
01 preto 21 10/09/2011 -->ultima venda do produto 01 preto com tamanho 21
No relatório exibo apenas as vendas ocorridas no período que o usuário informou (ex.: 01/08/2011 e 31/08/2011) e no fim do relatorio
quando foi a ultima venda do produto. Não importando mais o período que o usuário informou.
Fiz assim, mas ainda não funcionou.
Agradeço!
Testei seu código e deu erro. Não entendi bem o que vc fez.
Mas CADSAI é o nome do meu dbf.
DATA é o campo do dbf que quero usar.
Mudei na linha abaixo e funcionou:
Código: Selecionar todos
DatMaisNova=ctod(DATA)Código: Selecionar todos
DatMaisNova=MAX( DatMaisNova, ctod(DATA))Tenho o seguinte
codigo cor tamanho data
01 preto 21 01/08/2011
01 preto 23 06/08/2011
01 branco 21 19/08/2011
01 branco 21 05/09/2011 -->ultima venda do produto 01 branco com tamanho 21
01 preto 21 10/09/2011 -->ultima venda do produto 01 preto com tamanho 21
No relatório exibo apenas as vendas ocorridas no período que o usuário informou (ex.: 01/08/2011 e 31/08/2011) e no fim do relatorio
quando foi a ultima venda do produto. Não importando mais o período que o usuário informou.
Fiz assim, mas ainda não funcionou.
Código: Selecionar todos
SELE CADSAI
SET ORDER TO 1
SET SOFTSEEK ON
SEEK SUBSTR(DTOC(pDTINI),7,4)+SUBSTR(DTOC(pDTINI),4,2)+SUBSTR(DTOC(pDTINI),1,2)+pCODIGO
SET SOFTSEEK OFF
DTMAISNOVA=CTOD(DATA)
TOTPRODUTO := 0
WHILE CTOD(CADSAI->DATA) <= CTOD(dthoje) .AND. !EOF()
IF CODIGO = pCODIGO .AND. COR = pCOR .AND. TAMANHO = pTAMANHO .AND. (CTOD(CADSAI->DATA) >= pDTINI .AND. CTOD(CADSAI->DATA) <= pDTFIM)
TOTPRODUTO+= QUANT
ENDIF
SKIP
IF CODIGO = pCODIGO .AND. COR = pCOR .AND. TAMANHO = pTAMANHO
DTMAISNOVA=MAX(DTMAISNOVA,CTOD(DATA))
ENDIF
SKIP
END
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Problema com Datas
Amiguinhos,
Raquel enquanto voce faz a leitura tente armazenar a ultima data caso ela seja maior que a ja armazenada, ou seja:
- guarde a primeira data de venda do periodo
- pegue a proxima e compare, se for maior guarde, senao pule para a proxima.
Provavelmente voce tera de usar algum vetor para ir armazenando as ocorrencias de itens, pois podem ser muitos ou poucos e em cada uma das ocorrencias voce vai colocando ou nao a ultima movimentacao.
Tendo em vista que voce esta formando esta verificação on the fly. seu vetor tera tamanho X de 2, onde X é o numero variável de itens e 2 as dimensoes, uma para o codigo do item e outra para a ultima data.
Raquel enquanto voce faz a leitura tente armazenar a ultima data caso ela seja maior que a ja armazenada, ou seja:
- guarde a primeira data de venda do periodo
- pegue a proxima e compare, se for maior guarde, senao pule para a proxima.
Provavelmente voce tera de usar algum vetor para ir armazenando as ocorrencias de itens, pois podem ser muitos ou poucos e em cada uma das ocorrencias voce vai colocando ou nao a ultima movimentacao.
Tendo em vista que voce esta formando esta verificação on the fly. seu vetor tera tamanho X de 2, onde X é o numero variável de itens e 2 as dimensoes, uma para o codigo do item e outra para a ultima data.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
