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