Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marostegan

Contagem de Vendas

Recommended Posts

Olá amigos, estou precisando novamente de uma ajuda em meu projeto...

 

Um último detalhe para finalizá-lo é a contagem de ítens vendidos.

 

Cada produto possui um código, que é o utilizado para realizar a venda, MAS também tem um outro código que é o código de relacionamento, para explicar melhor, funciona assim:

 

codigo 1: CERVEJA (vende 1 ficha por vez) - codigo de relacionamento: 1

codigo 2: PROMOÇÃO DE CERVEJA (vende 3 fichas de 1 vez) - codigo de relacionamento: 1

código 3: REFRIGERANTE (vende 1 ficha por vez) - codigo de relacionamento (não possui, pois não tem promoção para esse ítem)

 

** O que preciso:

- Quando for fechar o caixa, preciso saber quantos ítens foi vendido no total de cada produto, essa contagem deve ser feita pelo código de relacionamento, somando a quantidade de fichas. PORÉM, quando houver promoção, ela deve ser somada juntamente com o produto relacionado (no exemplo acima, se vender 1 promoção + 1 cerveja, seria somado 4 cervejas vendidas no fechamento do caixa).

 

Essa é minha tela de venda:

 

fichas2.png

 

- Como eu poderia fazer esse tipo de soma de ítens vendidos?

 

Obrigado pela atenção, Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Na tabela aonde você possui os itens que estão sendo vendidos, experimente isso:

Select Cod_Prod, Sum( Fichas ) As Qtde From SuaTabelaDeVenda

 

Você trabalha com comandas? Caso trabalhe, na instrução acima seria interessante utilizar uma condição do tipo:

Where NumComanda = : XYZ, dessa maneira você terá o total de acordo com a comanda que estiver sendo passada, do contrário, terá um total geral de cada produto vendido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. então nao trabalho com comandas não, são só as fichas que são vendidas!

 

mas ainda não entendi muito bem, por que assim...

 

Ali em cima na imagem, do lado esquerdo em PRODUTOS é a tabela aonde estão armazenado os produtos para venda...

 

No lado direito em VENDA são os ítens da venda atual, PORÉM, quando termina a venda atual e aperto enter, o sistema imprime as fichas e informa o valor do troco, assim que a pessoa dá o troco e aperta ENTER, a tabela de VENDA é zerada (exclui todos itens vendidos)...

 

Então, essa quantidade de venda de cada ítem teria que ficar armazenada na tabela PRODUTOS ou teria que criar uma terceira tabela para armazenar esses dados??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo, seria interessante que você mantivesse os registros na sua tabela de venda, pois assim teria como tirar a relação de que precisa. Você pode fazer dessa maneira:

 

Crie uma coluna chamada "modo" do tipo "char(1)";

 

Quando você executar o processo que faz a exclusão dos registros, ao invés de excluí-los, faça um update nessa tabela gravando na coluna modo o valor "V".

 

Quando você precisar tirar uma relação do que foi vendido por produto, você faz naquele select que te passei o seguinte:

Select Cod_Prod, Sum( Fichas ) As Qtde From SuaTabelaDeVenda Where Modo = 'V' Group By Cod_Prod Order By Cod_Prod

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo, estava pensando melhor aqui, queria fazer assim... não sei se daria certo, o que acha....

 

na tabela de produtos (tbl_produtos) criei um campo chamado QUANTIDADE, nesse campo seria gravado a quantidade de venda de cada ítem (o produto deve ser localizado pelo id_relacionamento e a soma deve ser pela quantidade marcada no campo quantidade)

 

ao finalizar a venda é feito um update na tbl_produtos somando o valor já guardado no campo quantidade com o valor de quantidades vendidas...

 

ah... esse projeto estou usando o bd Access...

 

como eu poderia fazer isso?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Hum... pode sim, e fica melhor também.

 

A que você se refere quando diz: "como eu poderia fazer isso"?

 

Se for o update que mencionou, seria isso:

 

update tbl_produtos set quantidade = quantidade + :qtde_vendida where cod_prod = :cod_prod

 

:qtde_vendida será a quantidade que você irá alimentar na tabela do produto;

:cod_prod será o produto propriamente dito que sofrerá a atualização;

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo, me desculpa, mas ainda não entendi como fazer isso! :upset:

 

porque assim, na tela de vendas, pode ser que seja vendido mais que 1 vez um mesmo produto, veja a foto:

 

003.png

 

então teria que somar a quantidade de cada item da tbl_vendas (campo quantidade juntando os ítens pelo id_relacionamento)

 

e fazer um update na tbl_config (somando a quantidade já gravada lá + a quantidade vendida)

 

como ficaria o código disso?? =/

 

obrigado pela paciência!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo, vamos lá:

 

1) Obter a qtde do produto vendido: Imagine que exista uma query chamada qryVenda com a instrução sql abaixo:

 

Select Cod_Prod, Valor, Count(Cod_Prod) as Qtde From tbl_vendas Group By 1,2 Order By 1

 

2) Atualizar a Quantidade na tabela do produto:

 

qryVenda.First;

while not qryVenda.Eof do

begin

qryAtu.Close;

qryAtu.SQL.Text := 'update tbl_produtos set quantidade = quantidade + :qtde_vendida where cod_prod = :cod_prod';

qryAtu.Params[0].AsFloat := qryVenda.FieldByName('Qtde').AsFloat;

qryAtu.Params[1].AsString := qryVenda.FieldByName('Cod_Prod').AsString;

qryAtu.ExecSQL;

qryVenda.Next;

end;

 

Acredito que seja isso amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, criei um botão aqui só para testar a atualização da quantidade, criei um novo botão e fiz da seguinte forma:

 

begin
with dm.q_vendas do
begin
  Close;
  SQL.Clear;
  SQL.Add('Select id_relacionamento, valor, Count(id_relacionamento) as quantidade From tbl_vendas Group By 1,2 Order By 1');
  Open;
begin
dm.q_vendas.first;
while not dm.q_vendas.Eof do
begin
dm.q_config.close;
dm.q_config.SQL.Text := 'update tbl_produtos set quantidade = quantidade + :quantidade where id_relacionamento = :id_relacionamento';
dm.q_config.Params[0].AsFloat := dm.q_vendas.FieldByName('quantidade').AsFloat;
dm.q_config.Params[1].AsString := dm.q_vendas.FieldByName('id_relacionamento').AsString;
dm.q_config.ExecSQL;
dm.q_config.Next;
end; end; end; end;

porém quando tento rodar o programa aparece o seguinte erro:

 

Undeclared identifier: 'Params'

 

O que será que estou fazendo de errado? :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo, você tem que ir até a propriedade Params da Sua Query, abri-la, e definir o tipo do parâmetro lá dentro. Para o tipo String você coloca ftString e para o real você coloca o ftFloat.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, ainda está com uns pipino aqui! (nunca fiz esse tipo de configuração que vc citou, talvez tenha feito algo errado aqui)...

 

Vamos lá...

 

Fiz a configuração desse jeito (não sei se é assim que faz)

 

001.png

 

Após fazer isso tentei roda o programa, mas...

 

Quando estava assim:

 

dm.q_config.Params[0].AsFloat ..............

dava o erro: Undeclared Identifier: 'Params'

 

Mudei então para assim:

 

dm.q_config.Parameters[0].AsFloat

dai dá os erros:

 

Undeclared Identifier: 'AsFloat'

Undeclared Identifier: 'AsString'

 

Eita lele viw!! rrss... aonde estou errando agora? :upset:

 

Obrigado pela força! abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo, na verdade a sua configuração da propriedade params não está correta.

 

Vá até a propriedade SQL da sua q_config e adicione a instrução SQL abaixo:

 

 

update tbl_produtos set quantidade = quantidade + :quantidade where id_relacionamento = :id_relacionamento

 

Vá até a propriedade params da sua q_config.

 

Lá, tem que haver o mesmo nome dos parâmetros que você definiu dentro da sua instrução sql, ou seja:

 

quantidade e id_relacionamento.

 

Ai você clica sobre cada uma e defini o seu tipo correspondente.

 

Obs: Na hora de chamar a sua query você faz:

 

 

dm.q_config.Close;
dm.q_config.Params[0].AsFloat := dm.q_vendas.FieldByName('quantidade').AsFloat; 
dm.q_config.Params[1].AsString := dm.q_vendas.FieldByName('id_relacionamento').AsString; 
dm.q_config.ExecSQL;

 

Não precisa reescrever o SQL de novo, pois o que vai ser alterado é o que vai ser passado via parâmetro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai ai aii...rss.. está difícil eu conseguir chegar num acordo com o Delphi, caraca, travei nessa parte amigo! =/

 

Olha, abri minha ADOQuery (q_config) e adicionei a linha que você me passou, na propriedade SQL. ficou assim:

 

select * from tbl_produtos
update tbl_produtos set quantidade = quantidade + :quantidade where id_relacionamento = :id_relacionamento

 

Porém, quando vou na propriedade Active para deixar como True, aparece o seguinte erro:

 

Erro de sintaxe na cláusula FROM.

 

 

Poxa, o que estou fazendo de errado agora?

 

Muito obrigado pela paciência! Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

crio uma outra query mas deixo ela relacionada com o mesmo ado connection e data source?

 

 

amigo, criei outra query, e fiz o que você me ensinou, mas agora ainda está com um pipino...:

 

 

 

 

Quando tento ativar o q_config_up aparece o erro: "q_config_up: CommandText does not return a result set."

 

 

 

PS: nas propriedades da edição dos parametros configurei o DataType (ftFloat para quantidade e ftString para o id_relaciona)... e o Value, precisa colocar algo?

 

obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Querys do tipo insert/delete/update não retornam resultado, por isso você obteve o erro citado.

 

Você chegou a testar o seu programa pra ver o resultado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá amigo, testei sim! se aperta f9 aparece o erro:

 

undeclared identifier: 'AsFloat'

undeclared identifier: 'AsString'

 

porque sera esse erro agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Amigos!

 

Amigo dan_visualdm,

 

Querys do tipo insert/delete/update não retornam resultado, por isso você obteve o erro citado.

 

Sendo assim, se você colocar alguma instrução desse tipo e tentar abrir a sua query, obterá o erro conforme você mencionou em um dos posts acima.

 

1) Você precisa ter uma query para obter os registros que pretende atualizar.

 

 

Select id_relacionamento, valor, Count(id_relacionamento) as quantidade From tbl_vendas Group By 1,2 Order By 1

 

2) Você precisa ter uma query para atualizar os registros que vierem da query do item acima.

 

 

update tbl_produtos set quantidade = quantidade + :quantidade where id_relacionamento = :id_relacionamento

 

A Base de tudo é isso. Reveja com calma os passos que você fez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.