Página 1 de 1

indexar arquivo invertido

Enviado: 04 Jan 2006 14:33
por matrix
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

Enviado: 04 Jan 2006 14:43
por anacatacombs
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.
:D

[]'s
Ana

Enviado: 04 Jan 2006 14:46
por Alessandro
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

Enviado: 05 Jan 2006 16:02
por matrix
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

Enviado: 06 Jan 2006 14:03
por janio
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:

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) 
   ? " "
Um abraço e... mãos a obra... :xau :xau :xau

Janio