pessoal
preciso fazer um relatorio dos produtos + vendidos em qtd, entaum indexo o arquivo vendas pelo campo QUANTI, e blz fica em ordem de qtd, mas quero mostrar somente os 10 + vendidos, como organizar isso???
valeu
indexar arquivo invertido
Moderador: Moderadores
-
anacatacombs
- Membro Master

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Existem várias maneiras.
Você está dando um SEEK ou um GO TOP no loop principal?
Se tiver dando um GO TOP basta dar um GO BOTTOM e SKIP-1 no lugar do SKIP.
Aí é só fazer a condição pra sair do loop.
algo assim:
Select Tal tal
Set order to tal
GO BOTTOM
DO WHILE !BOF() .AND. CONTA < 10
//se houver filtros
// imprime o que tiver que imprimir
conta ++ // incrementa a cada vez que imprimir pra saber quando deu 10
SKIP -1
ENDDO
Funciona..
Espero ter ajudado.

[]'s
Ana
Você está dando um SEEK ou um GO TOP no loop principal?
Se tiver dando um GO TOP basta dar um GO BOTTOM e SKIP-1 no lugar do SKIP.
Aí é só fazer a condição pra sair do loop.
algo assim:
Select Tal tal
Set order to tal
GO BOTTOM
DO WHILE !BOF() .AND. CONTA < 10
//se houver filtros
// imprime o que tiver que imprimir
conta ++ // incrementa a cada vez que imprimir pra saber quando deu 10
SKIP -1
ENDDO
Funciona..
Espero ter ajudado.
[]'s
Ana
Editado pela última vez por anacatacombs em 04 Jan 2006 14:47, em um total de 1 vez.
-
Alessandro
- Usuário Nível 3

- Mensagens: 141
- Registrado em: 07 Jul 2004 09:39
- Localização: Santo Antonio da Platina-PR
Caro colega
Você pode usar o comando DESCEND(), cria indices reversos.
Ou, caso seu arquivo seja muito grande, para evitar a criação de mais um índice, pode fazer o seguite:
Utilize o índice atual, vá para o final do arquivo e faça uma leitura regressiva até a quantidade de itens que desejar.
Valeu
Alessandro
Você pode usar o comando DESCEND(), cria indices reversos.
Ou, caso seu arquivo seja muito grande, para evitar a criação de mais um índice, pode fazer o seguite:
Utilize o índice atual, vá para o final do arquivo e faça uma leitura regressiva até a quantidade de itens que desejar.
Valeu
Alessandro
valeu, entaum fiz o seguinte:
Indexei o arquivo pelo campo Quanti e fiz um laço mostrando os 10 registros de 10 a 0 ............agora preciso assim: agrupar os registros repetidos por exemplo uma venda de 2 parafusos na posicao 8 + 4 parafusos na posicao 5 entaum a soma dessas duas vendas irá pra posicao 1 no relatorio....
agradeço
Indexei o arquivo pelo campo Quanti e fiz um laço mostrando os 10 registros de 10 a 0 ............agora preciso assim: agrupar os registros repetidos por exemplo uma venda de 2 parafusos na posicao 8 + 4 parafusos na posicao 5 entaum a soma dessas duas vendas irá pra posicao 1 no relatorio....
agradeço
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Matrix,
Faça o seguinte:
1-) Crie um índice CODPRD + DATEMI no seu arquivo de movimento;
2-) No seu relatório informe o período para pesquisa;
3-) Crie uma matriz com os dados da pesquisa;
4-) Organize a matriz pela ordem do produto mais vendido;
5-) Exiba quantos produtos quiser.
tipo:
Um abraço e... mãos a obra... :xau :xau :xau
Janio
Faça o seguinte:
1-) Crie um índice CODPRD + DATEMI no seu arquivo de movimento;
2-) No seu relatório informe o período para pesquisa;
3-) Crie uma matriz com os dados da pesquisa;
4-) Organize a matriz pela ordem do produto mais vendido;
5-) Exiba quantos produtos quiser.
tipo:
Código: Selecionar todos
SELECT DESDO
DBSETORDER(3)
GOTO TOP
DBSEEK(STR(CODPRD)+DTOS(vDATAi),.T.)
DO WHILE !EOF()
SET RELATION TO CODPRD INTO PRODUTO
IF EMPTY(DATEMI)
SKIP
LOOP
ENDIF
IF DATEMI < vDATAi
SKIP
LOOP
ENDIF
IF DATEMI > vDATAf
SKIP
LOOP
ENDIF
eCODPRD = CODPRD
eDESCRI = PRODUTO->DESCRI
eUNIPRD = PRODUTO->UNIPRD
mSOMA = 0
DO WHILE CODPRD = eCODPRD
IF EMPTY(DATEMI)
SKIP
LOOP
ENDIF
IF DATEMI < vDATAi
SKIP
LOOP
ENDIF
IF DATEMI > vDATAf
SKIP
LOOP
ENDIF
mSOMA = mSOMA + QTDPRD
DBSKIP()
ENDDO
AADD( rPRODUTO, {eCODPRD, eDESCRI, eUNIPRD, mSOMA } )
ENDDO
ASort(rPRODUTO,,,{|x,y| y[4] > x[4], y[4] < x[4]})
FOR i=1 TO 10
SET RELATION TO CODPRD INTO PRODUTO
@ PROW() + 01, 02 SAY STRZERO(rPRODUTO[i,1],5)
@ PROW() , 10 SAY rPRODUTO[i,2] PICT "@!"
@ PROW() , 60 SAY rPRODUTO[i,3] PICT "@!"
@ PROW() , 69 SAY rPRODUTO[i,4] PICT "@E 99,999.99"
NEXT
@ PROW() + 03,00 SAY PADC("****** FIM DO RELATORIO ******",79)
? " "
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
