Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
Essa é minha tela de venda:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.wm8.com.br/delphi/fichas2.png&key=8b813ecf2027b427ff19071477af0df89294dcd21f002436ae94f6486a421c6e" alt="fichas2.png" />
Obrigado pela atenção, Abraços!
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??
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_Prodamigo, 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
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;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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.wm8.com.br/delphi/003.png&key=57453d53ba6c7508c919c97b36a917d3f7b0ce2deeeef911e84d383f6730d9c6" alt="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!
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.
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;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;Undeclared identifier: 'Params'
O que será que estou fazendo de errado? :upset:
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.
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)
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.wm8.com.br/delphi/001.png&key=8b3506abaa05a3e41beb18e30bd051cc9b30a6bd7a9e42ee9acbd47d80da3315" alt="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
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.
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
Amigos, seu select tem que estar em uma query e seu update em outra, entendeu?
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!!
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?
olá amigo, testei sim! se aperta f9 aparece o erro:
undeclared identifier: 'AsFloat'
undeclared identifier: 'AsString'
porque sera esse erro agora?
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.
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.