Dar baixa em valores no banco mysql

galera,estou desenvolvendo um sistema de estoque de produtos usando o mysql,queria a ajuda de vcs de como dar baixa em valores que ja esta salvo no db e acrescentar mais valor quando precisar

Primeiro, como está a estrutura das tabelas que você montou?

como vou fazer para acresentar valores na quantidade e dar baixa da retirada?

Olá

Porque você não cria uma tabela de entrada e saída de produtos?

Ai para verificar a quantidade existente no estoque você calcula quanto que entrou e com quanto que saiu e o resultado é a quantidade no estoque.

Eu faço assim.

eu estava pensando em fazer uma consulta ao banco,pegar o valor do estoque,colocar em uma variavel,e subtratir ou adicionar com o novo valor e depois do calculo retornar o valor ao db

Eu fazia desse jeito que você pensou.

Só que se você precisar fazer uma alteração na entrada ou na saída o calculo fica maior e precisa ter mais cuidado. Exemplo;

1 - Prod 01 já tem no estoque 50
2 - Deu entrada de 10
3- Tem 60 no estoque
4 - Ai o usuário digitou a entrada errada e era 100
5 - Você tem que pegar o Prod 01 retirar os 10 pra depois adicionar os 100 correto.

E você criando uma tabela para entrada e outra para saída. Vai ser sempre entrada - saída e pode fazer alteração ou exclusão que o estoque vai estar sempre certo.

Acho que vc deve manter uma tabela de registros de movimentação.
ex:
dia 15/03/2018 entrada de 10 produtos no valor R$0,50, id_da_tabela_entrada
dia 16/03/2018 saida de 2 produtos no valor R$100,20, id_da_tabela_saida
só acho

O que o @alexpassos e o @Jederson_Andre disseram está correto.
Eu iria mais para o lado da solução proposta pelo segundo.
Se não agora, provavelmente, no futuro, será necessário rastrar, informar o dia que mais vendeu, o dia em que produtos foram adicionados ao estoque (eu adicionaria uma coluna NF, só para identificar o número da NF) e etc.

Isso é bem simples. Você deve criar duas tabelas, uma para os dados do movimento, como data, hora, status(Aberto/fechado/cancelado) e tipo(E=entrada/S=saída), e outra com os itens do movimento, com os produtos, quantidades, valor unitário e valor do item(opcional).

DDL seria basicamente assim:


– Table mydb.MOVIMENTO


CREATE TABLE IF NOT EXISTS mydb.MOVIMENTO (
NUMERO INT NOT NULL AUTO_INCREMENT,
DATA DATE NULL,
HORA TIME NULL,
TIPO VARCHAR(1) NULL,
STATUS VARCHAR(1) NULL,
PRIMARY KEY (NUMERO),
CONSTRAINT CK_MOVIMENTO CHECK(TIPO IN (‘S’, ‘E’)),
CONSTRAINT CK_MOVIMENTO CHECK(STATUS IN (‘A’,‘F’,‘C’)) – A = ABERTO / F = FECHADO / C = CANCELADO
);


– Table mydb.MOVIMENTO_ITEM


CREATE TABLE IF NOT EXISTS mydb.MOVIMENTO_ITEM (
ITEM INT NOT NULL,
PRODUTO INT(11) NULL,
VL_UNIT DECIMAL(9,2) NULL,
QTD INT(11) NULL,
VL_ITEM DECIMAL(9,2) NULL,
MOVIMENTO_NUMERO INT NOT NULL,
PRIMARY KEY (ITEM, MOVIMENTO_NUMERO),
INDEX fk_MOVIMENTO_ITEM_MOVIMENTO_idx (MOVIMENTO_NUMERO ASC),
CONSTRAINT fk_MOVIMENTO_ITEM_MOVIMENTO
FOREIGN KEY (MOVIMENTO_NUMERO)
REFERENCES mydb.MOVIMENTO (NUMERO)
ON DELETE NO ACTION
ON UPDATE NO ACTION)

Seguindo essa modelagem você pode brincar com esses STATUS do movimento, com o TIPO também.

Voce poderia mostrar uma tela para o usuário e nela ele escolheria se o movimento do produto é de ENTRADA(E) ou SAÍDA(S) e vai inserindo os produtos nos itens do movimento e quando ele concluir a baixa/movimento você altera a quantidade do produto a table de produtos e altera o campo MOVIMENTO.STATUS para ‘F’ (fechado) e nao deixa mais o usuário alterar os dados do mov.

Claro, lembrando que se o MOVIMENTO.TIPO = ‘S’ você deve retirar da quantidade produto e MOVIMENTO.TIPO = ‘E’ deve acrescentar.

Espero ter ajudado meu amigo.
Atenciosamente,
Bruno Meireles

valeu galera pelas dicas