Página 1 de 2

relatorio de itens mais vendidos por data

Enviado: 04 Mar 2013 13:03
por marciopadilhas
Boa tarde a todos, gostaria de uma ajuda, tenho uma tabela de vendas, e gostaria de de tirar um relatorio na tela para saber quais os produtos mais vendidos por um determinado período??
Eu achei alguns assuntos mencinando a função total, mais muito vago, aguem me poderia me orientar como fazer esse relatorio na tela??

Att

Marcio Padilha

relatorio de itens mais vendidos por data

Enviado: 04 Mar 2013 13:22
por Wanderlei
Olá Marcio,
Uma maneira bem simples é indexar a tabela por data+produto e fazer um while e totalizar por data e produto e no final é só mostrar na ordem desejada.

relatorio de itens mais vendidos por data

Enviado: 10 Mar 2013 22:02
por JoséQuintas
Muito vago isso de dizer que tem uma tabela de vendas.
Por acaso tem um arquivo contend produto, quantidade, data, etc... é isso?

Existe o comando TOTAL que gera um dbf com totais.
Seu arquivo:

Código: Selecionar todos

INDEX on produto to temp
TOTAL ON produto TO arqtotais FOR datavenda >= Date() .AND. datavenda <= Date() // ajuste para seus campos
// a linha acima gerou o arqtotais com os totais
use arqtotais
index on descend( qtd ) to temp2
// a linha acima colocou em ordem do maior para o menor

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 14:24
por marciopadilhas
Então eu tentei usar essas linhas mais ele só pega os primeiros depois que ele encontra outros do mesmo codigo ele ignora e não soma os campos q eu quero
minha tabela é de vendas
campos datavend, codprod, nomepro, qtdvda, vrunit, valortot, vrporc
oq eu quero somar é qual o produto mais vendido tipo por sequencia, por exemplo no final do dia quero essa informação colocando a data do começo e a data do final
ex:
descrição Qtd Valor Total
coca cola lata 50 150
fanta lata 39 117
Assados 29 72,50
Eu não estou conseguindo fazer esse tipo de relatorio na tela, me ajudem, obrigrado!!

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 14:42
por JoséQuintas

Código: Selecionar todos

use suatabvendas
Index on codprod to lixo
total on codprod to temp for datavend > date()-10 // ultimos 10 dias
use temp
index on descend( qtdvda ) to lixo
goto top
do while .not. eof()
   ? codprod, nomepro, qtdvda
   skip
enddo
use
fErase( "lixo.ntx" )
fErase( "temp.ntx" )
No caso está considerando qtdvda, que é quantidade.
Se for por valor, só indexer diferente: index on descend( valortot ) to lixo

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 16:20
por marciopadilhas
então eu fiz essas linhas, só que ele não soma as quantidades dos itens iguais ele so esta pegando a quantidade maior do produto, ele não esta somando os produtos do mesmo codigo.
Ex.
vendi
1 coca agora
2 coca depois
1 coca outra hora
quero q ele soma todas as cocas do dia q nesse caso daria 4 cocas no total

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 16:48
por JoséQuintas
O comando TOTAL faz soma de todos os campos numéricos existentes.
Por acaso seu campo de quantidade é caractere?
Se for... aí só fazendo as contas via programação, ou copiando os dados para um outro arquivo temporário.

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 17:14
por marciopadilhas
não, todos os campos de valores são numericos, mais essas linhas de codigo não esta e esta saindo assim

746 XEROX 10 2.50
969 PAPEL A4 CHAMEX GHIA EMPREENDIMENTO 10 117.00
769 LIG FIXO CAMPINAS E REGIAO (19) 9 2.25
885 CDS E DVS DE FILMES 4 10.00
883 XEROX SAMSUNG 3 0.75
444 HALLS 2 2.00
409 COCA COLA 2LTS 1 6.00
464 CARTAO TELEFONICO 20 UNIDADES 1 4.50
487 IMPRESSAO TEXTO PRETO E BRANCO 1 1.50
494 SCANEAMENTO FOTOS/DOCUMENTOS 1 2.50
553 CURRICULO 1 6.00

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 17:16
por marciopadilhas
sera q não tem um lugar q eu tenho q falar quais são os campos q eu quero q ele totalize do dia que eu quero???

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 19:02
por JoséQuintas
1. O comando TOTAL faz uma cópia do arquivo com os totais, somando tudo que é numérico
2. ON chave é como será feito o total: TOTAL ON COD_PRO, por produto
3. TO arquivo é o nome do arquivo que será salvo
4. FOR condição é o filtro, pra selecionar data, no caso.

Não tenho certeza o que acontece quando a chave for numérica.

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 19:03
por Jairo Maia
Olá José,
José, achei muito curioso seu exemplo, e usando uma tabela minha fiz a adaptação para ver o resultado. Ocorre que obtive o mesmo resultado relatado pelo colega Márcio, aparece apenas o produto que teve a maior quantidade, e não a somatória dos campos numéricos.

Olá Márcio,
Márcio, não sei se é a melhor forma, mas veja o exemplo abaixo e adapte a sua tabela. Montei com uma tabela minha, então ajuste as seguintes variáveis pelas suas, e veja se ajuda no seu caso:
cod_prod - código do item
desc_prod - descrição do item
quantos - quantidade do item
vr_total - valor total do item
data_venda - a data da venda

Código: Selecionar todos

aDados := {}
dDataInicio := Date() - 120
dDataFinal := Date()

Use Sua_Tabela
Index On data_venda >= dDataInicio .And. data_venda <= dDataFinal To IndTmp
Do While !Eof()

 nPosi := Ascan( aDados, { | cdp | cod_prod = cdp[ 1 ] } )

 If nPosi = 0
  AADD( aDados, { cod_prod, desc_prod, quantos, vr_total } )
 Else
  aDados[ nPosi, 3 ] += quantos
  aDados[ nPosi, 4 ] += vr_total
 Endi

 Skip

EndDo

Asort( aDados, Nil, Nil, { |A,B| A[4] > B[4] } )

DBCREATE("DbfTmp",{;
                  {"desc_prod", "C", 40, 0},;
                  {"quantos"  , "N", 10, 3},;
                  {"vr_total" , "N", 10, 3} ;
                  } )


Use DbfTmp

For i = 1 To Len( aDados )

 Append Blank
 Replace desc_prod With aDados[ i, 2 ]
 Replace quantos With aDados[ i, 3 ]
 Replace vr_total With aDados[ i, 4 ]

Next

Go Top
Browse()
 
Use

Return

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 19:15
por JoséQuintas
Se tiver um dbase ou foxpro, consegue fazer sem precisar programar.
Muito bom pra fazer testes desse tipo.

relatorio de itens mais vendidos por data

Enviado: 14 Mar 2013 19:44
por alxsts
Olá!

Enquanto escrevia o código abaixo, entraram vários posts. Enfim, matei a saudade do Clipper e fica como mais uma sugestão.

Código: Selecionar todos

FUNCTION Teste()

   LOCAL aArray 

   CLS
   
   aArray := ProdRank( Date() - 15, Date() )
    
   QOut(  "Descrição          ", "    Qtd", "    Valor Total" )
   
   AEval( aArray, { |e| SetPos( Row()++ ), QOut( e[1], e[2], e[3], e[4] ) } )

   RETURN NIL   
//------------------------------------------------------------------------------
#define DB_SOFT_SEEK   .T.

FUNCTION ProdRank( dDtInicio, dDtFim ) 

   LOCAL aArray
   LOCAL nRecno := Recno()
   LOCAL nPos

   aArray := {}
         
   IF ( ValType( dDtInicio ) == "D" .And. ;
        ValType( dDtFim )    == "D" .And. ;
        ( ! Empty(dDtInicio) )      .And. ;
        ( ! Empty(dDtFim) ) )
            
      // É necessário que a tabela tenha um índice por data (DtoS( datavend ) )
      DbSeek( DtoS( dDtInicio, DB_SOFT_SEEK )
      
      WHILE ( (datavend >= dDtInicio ) .And. ( datavend <= dDtFim ) ) .And. ( ! Eof() )
         nPos := AScan( aArray, { |e| e == codprod } )
         
         IF nPos == 0
            // adiciona item ao array (um array)
            AAdd( aArray, { nomepro, qtdvda, vrunit, ( qtdvda * vrunit ) } )
         ELSE
            // item já existe... acumula valores
            aArray[ nPos, 2 ] += qtdvda  
            aArray[ nPos, 4 ] += ( qtdvda * vrunit )           
         ENDIF   
         
         DbSkip()
         
      ENDDO
   ENDIF

   DbGoTo( nRecno )
         
   // classifica pela coluna quantidade em ordem decrescente
   RETURN ASort( aArray,,, { |x, y| x > y } )
//------------------------------------------------------------------------------

relatorio de itens mais vendidos por data

Enviado: 15 Mar 2013 10:43
por JoséQuintas
Só fiz o teste no foxplus, porque não tenho ambiente clipper pronto, e o resultado é igual o ng do clipper.

http://www.ousob.com/ng/clguide/ngaf81b.php

relatorio de itens mais vendidos por data

Enviado: 15 Mar 2013 12:13
por Jairo Maia
Olá José,

Agora sim! O exemplo abaixo funcionou certinho. Somou os campos quantos (quantidade vendida) e o campo vr_total (valor total das vendas do item), e nos últimos 90 dias. A única coisa que não vi como fazer, pois no help não diz, é se tem como determinar somente os campos desejados do .DBF destino. Quando reportamos que estava aparecendo somente o maior valor do outro jeito, na verdade está explicado em FIELDS <idField list>.

Show de bola. Muito legal isso.

Código: Selecionar todos

Use Movimento
Index On cod_prod To IndTmp

TOTAL ON &( INDEXKEY( 0 ) ) ;
FIELDS quantos, vr_total ;
TO DbfTmp WHILE data_venda >= Date() - 90

Use

Use DbfTmp
Index On Descend( Str( quantos ) ) To IndTmp

Go Top
Browse()

Use

Return