relatorio de itens mais vendidos por data

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

marciopadilhas
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 04 Mar 2013 12:58
Localização: campinas/sp

relatorio de itens mais vendidos por data

Mensagem 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
Editado pela última vez por Pablo César em 04 Mar 2013 16:27, em um total de 1 vez.
Razão: É contra as normas do fórum fornecer o email particular para receber ajuda. O fórum está para compartilhar...
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

relatorio de itens mais vendidos por data

Mensagem 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.
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marciopadilhas
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 04 Mar 2013 12:58
Localização: campinas/sp

relatorio de itens mais vendidos por data

Mensagem 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!!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marciopadilhas
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 04 Mar 2013 12:58
Localização: campinas/sp

relatorio de itens mais vendidos por data

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marciopadilhas
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 04 Mar 2013 12:58
Localização: campinas/sp

relatorio de itens mais vendidos por data

Mensagem 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
marciopadilhas
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 04 Mar 2013 12:58
Localização: campinas/sp

relatorio de itens mais vendidos por data

Mensagem 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???
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

relatorio de itens mais vendidos por data

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem por JoséQuintas »

Se tiver um dbase ou foxpro, consegue fazer sem precisar programar.
Muito bom pra fazer testes desse tipo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

relatorio de itens mais vendidos por data

Mensagem 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 } )
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

relatorio de itens mais vendidos por data

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

relatorio de itens mais vendidos por data

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder