indexar arquivo invertido

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

indexar arquivo invertido

Mensagem 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
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Mensagem 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
Editado pela última vez por anacatacombs em 04 Jan 2006 14:47, em um total de 1 vez.
Alessandro
Usuário Nível 3
Usuário Nível 3
Mensagens: 141
Registrado em: 07 Jul 2004 09:39
Localização: Santo Antonio da Platina-PR

Mensagem 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
Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

Mensagem 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
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder