Ir para conteúdo

POWERED BY:

Arquivado

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

cseverino

Após um insert, fazer um update

Recommended Posts

Boa Noite pessoal,

 

Preciso de uma ajuda de vocês, preciso criar uma rotina que funcione da seguinte maneira.

 

Após executar o script abaixo o sistema deverá fazer um update em uma outra tabela, porém com as seguinte regras, se tipo = ENTRADA o sistema deverá pegar o valor do campo quantidade do inserte e somar com o valor do campo saldo da tabela estoque e depois efetuar um update neste campo com o valor novo, se caso for tipo = SAIDA, o query deverá pegar o valor do campo quantidade do insert fazer uma subtração no campo saldo da tabela estoque e efetuar um update no campo saldo com o novo valor.

 

Alguém consegue me ajudar com essa rotina?

<?php include('./config.php'); ?>
<?php
$qdata = $_REQUEST['data'];
$qcodigo_produto = $_REQUEST['codigo_produto'];
$qquantidade = $_REQUEST['quantidade'];
$qobservacao = $_REQUEST['observacao'];
$qtipo = $_REQUEST['tipo'];

$sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')";
mysql_query($sql, $conexao);
header("Location: ./movimento_estoque.php");
exit;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise sobre TRIGGERS , exemplo típico de seu uso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Pesquisei sobre triggers porém tenho algumas dúvidas... primeira vez que crio uma triggers.

tenho dúvida como aplica o parametro do tipo Entrada ou Saida.

DELIMITER $$
 
CREATE TRIGGER Trigger_ItenEstoque_Insert AFTER INSERT
ON Estoque
FOR EACH ROW
BEGIN
    UPDATE estoque SET saldo = saldo + NEW.Quantidade
WHERE id = NEW.codigo_produto
and NEW.tipo = 'Entrada'; -- Acho que essa parte está incorreta, porém não sei o jeito correto de aplicar
END$$

Compartilhar este post


Link para o post
Compartilhar em outros sites

#cseverino , não entendi sua dúvida , qual a movimentação que precisa ser feita ?

 

no insert de qual tabela atualizar qual ?

 

não faz sentido no insert de ESTOQUE atualizar o próprio ESTOQUE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Quando ocorrer um inserte na tabela movimentacao, preciso pegar o valor do campo quantidade (Tabela movimentacao) e atualizar o campo saldo da tabela estoque, porém preciso fazer a seguinte analise, se o tipo na tabela movimentacao for Entrada ele soma com o campo Saldo, se for Saida ele diminui o valor do campo saldo da tabela estoque.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então a trigger tem de ser em movimentacao , o update é sim então em estoque.saldo , a questão de entrada / saida pode ser resolvida com um CASE

 

algo assim

SET saldo = saldo + (case when new.tipo = 'entrada' then 1 else -1 end) * NEW.Quantidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta o que ele quer é tipo um controle de estoque..

 

 

Ele quer fazer isso logo após fazer a movimentação...

 

vc vai fazer um IF no tipo.. e dependendo da informação vc faz o UPDATE na tabela... exemplo simples.. mas vc implementa no seu ai...

<?php 
	include('./config.php');
	
	$qdata = $_REQUEST['data'];
	$qcodigo_produto = $_REQUEST['codigo_produto'];
	$qquantidade = $_REQUEST['quantidade'];
	$qobservacao = $_REQUEST['observacao'];
	$qtipo = $_REQUEST['tipo'];

	$sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')";
	mysql_query($sql, $conexao);
	
	
	// pega informação de quantos produtos tem em estoque
	$sql_estoque = "SELECT saldo FROM estoque WHERE codigo_produto='$qcodigo_produto'";
	$query_estoque = mysql_query($sql_estoque);
	$row_estoque = mysql_fetch_array($$query_estoque);
	$saldo = $row_estoque["saldo"];
	
	
	// verifica o tipo de movimentação
	if ($qtipo == "ENTRADA") {
		$total = $saldo + $qquantidade;
	} else if ($qtipo == "SAIDA") {
		$total = $saldo - $qquantidade;
	}
	
	
	// atualiza saldo na tabela de estoque
	$sql_update = "UPDATE estoque SET saldo='$total' WHERE codigo_produto='$qcodigo_produto'";
	mysql_query($sql_update);
?>

Eu recomendaria vc alterar esse formato do seu TIPO... eu mudaria ele para um CHAR ou INT... Onde informaria 0 ou 1... sendo 0 = ENTRADA e 1 = SAIDA... ou no CHAR S = Saida e E = Entrada....

Compartilhar este post


Link para o post
Compartilhar em outros sites

wolfphw,

 

Era isso mesmo que eu precisava obrigado, porém só tem um problema.

Eu tinha um produto com o saldo 0, fiz uma lançamento de entrada de 2, o sistema somou corretamente ficando saldo 2, quando lancei uma saida de quantidade 1, o sistema mudou o saldo para -1, onde o correto seria 1.

Será que está fincando informações na memoria? como posso resolver essa situação?

Depois fiz um novo lançamento de entrada de quantidade 10 e o Saldo ficou 10, onde o correto seria 0+2 -1 + 10 =11

<?php include('./config.php'); ?>
<?php
$qdata = $_REQUEST['data'];
$qcodigo_produto = $_REQUEST['codigo_produto'];
$qquantidade = $_REQUEST['quantidade'];
$qobservacao = $_REQUEST['observacao'];
$qtipo = $_REQUEST['tipo'];

$sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')";
mysql_query($sql, $conexao);

//Pega a informação de quantos produtos tem em estoque
$sql_estoque = "Select saldo from estoque where id ='$qcodigo_produto'";
$query_estoque = mysql_query($sql_estoque);
$row_estoque = mysql_fetch_array($$query_estoque);
$saldo = $row_estoque["saldo"];

//Verifica o tipo de movimentação
if ($qtipo =="ENTRADA") {
		$total = $saldo + $qquantidade;
}else if ($qtipo =="SAIDA"){
		$total = $saldo - $qquantidade;
}
//Atualiza saldo na tabela de estoque
$sql_update = "UPDATE estoque set saldo='$total' where id='$qcodigo_produto'";
mysql_query($sql_update);


header("Location: ./movimento_estoque.php");
exit;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É apenas um leve detalhe no seu código, e eu não sei como você não viu o aviso de erro..


Disso:

$row_estoque = mysql_fetch_array($$query_estoque);


Mude para isso:

$row_estoque = mysql_fetch_array($query_estoque);

At.te,
NoService

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.