
Sentencia UPDATE de MYSQL que a veces creo que no se ejecuta
Publicado por Pedro (1 intervención) el 04/12/2022 23:41:25
Hola,
Intento rehacer el stock de unas tablas. Para ello primero pongo a 0 los valores y luego sumo o resto los albaranes. Ya sean de cliente o de proveedor. El tema es que a veces el mismo proceso retoca bien los valores y otras no. Aun no le he encontrado la logica del fallo. Soy muy principiante en cuanto a PHP y MYSQL. Tengo la duda de si por alguna razon a veces las sentencias UPDATE no dan error pero no se realizan. No se si tiene que ver con como creo los objetos. Copio un ejemplo.
$sql='UPDATE productos SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.'';
$datosSQL2 = $con->query($sql);
Os copio el programa entero que realiza este proceso.
for ($i=0;$i<count($familias);$i++) {
echo "<br> Familia " . $i . ": " . $familias[$i];
#SELECT productos.referencia, productos.codfamilia, stocks.stockmin, stocks.referencia FROM stocks, productos WHERE productos.codfamilia = "ORIGLASE"
# Inicializo todos los stockss para luego actualizar con el calculado.
$sql = 'UPDATE stocks, productos SET cantidad=0, disponible=0, pterecibir=0, reservada=0 WHERE productos.codfamilia = "'.$familias[$i].'" AND productos.idproducto = stocks.idproducto';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$sql = 'UPDATE productos SET stockfis=0 WHERE productos.codfamilia = "'.$familias[$i] .'"';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$sql = 'UPDATE variantes, productos SET variantes.stockfis=0 WHERE productos.codfamilia = "'.$familias[$i].'" AND productos.idproducto = variantes.idproducto';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
#######################################################################################################################################
# Actualizo los campos cantidad y disponible teniendo en cuenta las lineas de albaran de cliente.
#######################################################################################################################################
$sql='SELECT
SUM(lineasalbaranescli.cantidad),
lineasalbaranescli.idproducto,
lineasalbaranescli.cantidad,
lineasalbaranescli.referencia,
albaranescli.codigo,
albaranescli.fecha,
productos.codfabricante
FROM
lineasalbaranescli,
albaranescli,
productos
WHERE
lineasalbaranescli.idalbaran = albaranescli.idalbaran
AND (albaranescli.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= albaranescli.fecha)
AND productos.idproducto = lineasalbaranescli.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineasalbaranescli.idproducto,
lineasalbaranescli.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineasalbaranescli_idproducto = $row[$j++];
$lineasalbaranescli_cantidad = $row[$j++];
$lineasalbaranescli_referencia = $row[$j++];
$albaranescli_codigo = $row[$j++];
$albaranescli_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
echo "<br/> lineasalbaranescli_referencia :".$lineasalbaranescli_referencia;
echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$acumuladosNegativo = $acumulados * -1;
$cantidad = $acumuladosNegativo;
$disponible = $acumuladosNegativo;
$pterecibir = 0;
$reservada = 0;
actualizarStcok($lineasalbaranescli_idproducto,
$lineasalbaranescli_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET disponible = disponible + '. $acumuladosNegativo .
', cantidad = cantidad + '. $acumuladosNegativo .
' WHERE idproducto = '.$lineasalbaranescli_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineasalbaranescli_referencia.'"';
echo "<br/> ". $sql."<br/> ";
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos cantidad y disponible teniendo en cuenta las lineas de albaran de proveedor.
#######################################################################################################################################
$sql='SELECT
SUM(lineasalbaranesprov.cantidad),
lineasalbaranesprov.idproducto,
lineasalbaranesprov.cantidad,
lineasalbaranesprov.referencia,
albaranesprov.codigo,
albaranesprov.fecha,
productos.codfabricante
FROM
lineasalbaranesprov,
albaranesprov,
productos
WHERE
lineasalbaranesprov.idalbaran = albaranesprov.idalbaran
AND (albaranesprov.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= albaranesprov.fecha)
AND productos.idproducto = lineasalbaranesprov.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineasalbaranesprov.idproducto,
lineasalbaranesprov.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineasalbaranesprov_idproducto = $row[$j++];
$lineasalbaranesprov_cantidad = $row[$j++];
$lineasalbaranesprov_referencia = $row[$j++];
$albaranesprov_codigo = $row[$j++];
$albaranesprov_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
echo "<br/> lineasalbaranesprov_referencia :".$lineasalbaranesprov_referencia;
echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = $acumulados;
$disponible = $acumulados;
$pterecibir = 0;
$reservada = 0;
actualizarStcok($lineasalbaranesprov_idproducto,
$lineasalbaranesprov_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET disponible = disponible + '. $acumulados .
', cantidad = cantidad + '. $acumulados .
' WHERE idproducto = '.$lineasalbaranesprov_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineasalbaranesprov_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos pendiente de recibir teniendo en cuenta las lineas de pedido a proveedor sin estar cerradas.
#######################################################################################################################################
$sql='SELECT
SUM(lineaspedidosprov.cantidad),
lineaspedidosprov.idproducto,
lineaspedidosprov.cantidad,
lineaspedidosprov.referencia,
pedidosprov.codigo,
pedidosprov.fecha,
productos.codfabricante
FROM
lineaspedidosprov,
pedidosprov,
productos
WHERE
lineaspedidosprov.idpedido = pedidosprov.idpedido
AND pedidosprov.idestado = '.$estadoPedidoProveedorAbierto . '
AND (pedidosprov.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= pedidosprov.fecha)
AND productos.idproducto = lineaspedidosprov.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineaspedidosprov.idproducto,
lineaspedidosprov.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineaspedidosprov_idproducto = $row[$j++];
$lineaspedidosprov_cantidad = $row[$j++];
$lineaspedidosprov_referencia = $row[$j++];
$pedidosprov_codigo = $row[$j++];
$pedidosprov_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
#echo "<br/> lineaspedidosprov_referencia :".$lineaspedidosprov_referencia;
#echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = 0;
$disponible = 0;
$pterecibir = $acumulados;
$reservada = 0;
actualizarStcok($lineaspedidosprov_idproducto,
$lineaspedidosprov_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET pterecibir = '. $acumulados .
' WHERE idproducto = '.$lineaspedidosprov_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineaspedidosprov_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos reservada teniendo en cuenta las lineas de pedido a cliente sin estar cerradas.
#######################################################################################################################################
$sql='SELECT
SUM(lineaspedidoscli.cantidad),
lineaspedidoscli.idproducto,
lineaspedidoscli.cantidad,
lineaspedidoscli.referencia,
pedidoscli.codigo,
pedidoscli.fecha,
productos.codfabricante
FROM
lineaspedidoscli,
pedidoscli,
productos
WHERE
lineaspedidoscli.idpedido = pedidoscli.idpedido
AND pedidoscli.idestado = '.$estadoPedidoClienteAbierto . '
AND (pedidoscli.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= pedidoscli.fecha)
AND productos.idproducto = lineaspedidoscli.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineaspedidoscli.idproducto,
lineaspedidoscli.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineaspedidoscli_idproducto = $row[$j++];
$lineaspedidoscli_cantidad = $row[$j++];
$lineaspedidoscli_referencia = $row[$j++];
$pedidoscli_codigo = $row[$j++];
$pedidoscli_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
#echo "<br/> lineaspedidoscli_referencia :".$lineaspedidoscli_referencia;
#echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = 0;
$disponible = 0;
$pterecibir = 0;
$reservada = $acumulados;
actualizarStcok($lineaspedidoscli_idproducto,
$lineaspedidoscli_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET reservada = '. $acumulados .
' WHERE idproducto = '.$lineaspedidoscli_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineaspedidoscli_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
} // Fin de for de familias
echo "<br/> PROCESO TERMINADO CON EXITO ";
#######################################################################################################################################
# FUNCIONES
#######################################################################################################################################
function actualizarStcok($idproducto, $referenciaStock, $lcodalmacen, $cantidad, $disponible, $pterecibir, $reservada, $actualizar, $con){
# Si tiene algun valor hay que ver si es necesario actualizar.
if ($cantidad <> 0
OR $disponible <> 0
OR $pterecibir <> 0
OR $reservada <> 0
){
#
# ACCESO Y MODIFICACION DE STOCKS
#
$sql='SELECT * FROM stocks'
.' WHERE'
.' stocks.idproducto = '. $idproducto
.' AND stocks.referencia = "'. $referenciaStock.'"'
.' AND stocks.codalmacen = "'. $lcodalmacen .'"'
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
$sql='UPDATE stocks SET'
.' cantidad=cantidad+'.$cantidad.','
.' pterecibir=pterecibir+'.$pterecibir.','
.' disponible=disponible+'.$disponible.','
.' reservada=reservada+'.$reservada
.' WHERE'
.' idproducto= '.$idproducto.''
.' AND referencia= "'.$referenciaStock.'"'
.' AND codalmacen= "'.$lcodalmacen.'"'
.'';
echo "<br/>". $sql;
} else {
#echo "<br/> ". "No existe";
$sql='INSERT INTO stocks(cantidad, codalmacen, disponible, idproducto, pterecibir, referencia, reservada) VALUES ('.
$cantidad.','.
'"'.$lcodalmacen.'",'.
$disponible.','.
$idproducto.','.
$pterecibir.','.
'"'.$referenciaStock.'",'.
$reservada.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
#
# ACCESO Y MODIFICACION DE VARIANTES
#
$sql='SELECT * FROM variantes'
.' WHERE'
.' variantes.idproducto = '. $idproducto
.' AND variantes.referencia = "'. $referenciaStock.'"'
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
try{
$sql='UPDATE variantes SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.' AND referencia= "'.$referenciaStock.'"'
.'';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
} # Fin de try
} else {
#echo "<br/> ". "No existe";
$sql='INSERT INTO variantes(stockfis, idproducto, referencia) VALUES ('.
$cantidad.','.
$idproducto.','.
'"'.$referenciaStock.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
#
# ACCESO Y MODIFICACION DE PRODUCTOS
#
$sql='SELECT * FROM productos'
.' WHERE'
.' productos.idproducto = '. $idproducto
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
try{
$sql='UPDATE productos SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.'';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
} # Fin de try
} else {
echo "<br/> ". "NO EXISTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EL PRODUCTO";
echo "<br/>". $sql;
$sql='DEBERIA EXISITIR EL PRODUCTO'.
$cantidad.','.
$idproducto.','.
'"'.$referenciaStock.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
}# Puede que haya que modificar proque el registro tiene datos.
}
Intento rehacer el stock de unas tablas. Para ello primero pongo a 0 los valores y luego sumo o resto los albaranes. Ya sean de cliente o de proveedor. El tema es que a veces el mismo proceso retoca bien los valores y otras no. Aun no le he encontrado la logica del fallo. Soy muy principiante en cuanto a PHP y MYSQL. Tengo la duda de si por alguna razon a veces las sentencias UPDATE no dan error pero no se realizan. No se si tiene que ver con como creo los objetos. Copio un ejemplo.
$sql='UPDATE productos SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.'';
$datosSQL2 = $con->query($sql);
Os copio el programa entero que realiza este proceso.
for ($i=0;$i<count($familias);$i++) {
echo "<br> Familia " . $i . ": " . $familias[$i];
#SELECT productos.referencia, productos.codfamilia, stocks.stockmin, stocks.referencia FROM stocks, productos WHERE productos.codfamilia = "ORIGLASE"
# Inicializo todos los stockss para luego actualizar con el calculado.
$sql = 'UPDATE stocks, productos SET cantidad=0, disponible=0, pterecibir=0, reservada=0 WHERE productos.codfamilia = "'.$familias[$i].'" AND productos.idproducto = stocks.idproducto';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$sql = 'UPDATE productos SET stockfis=0 WHERE productos.codfamilia = "'.$familias[$i] .'"';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$sql = 'UPDATE variantes, productos SET variantes.stockfis=0 WHERE productos.codfamilia = "'.$familias[$i].'" AND productos.idproducto = variantes.idproducto';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
#######################################################################################################################################
# Actualizo los campos cantidad y disponible teniendo en cuenta las lineas de albaran de cliente.
#######################################################################################################################################
$sql='SELECT
SUM(lineasalbaranescli.cantidad),
lineasalbaranescli.idproducto,
lineasalbaranescli.cantidad,
lineasalbaranescli.referencia,
albaranescli.codigo,
albaranescli.fecha,
productos.codfabricante
FROM
lineasalbaranescli,
albaranescli,
productos
WHERE
lineasalbaranescli.idalbaran = albaranescli.idalbaran
AND (albaranescli.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= albaranescli.fecha)
AND productos.idproducto = lineasalbaranescli.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineasalbaranescli.idproducto,
lineasalbaranescli.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineasalbaranescli_idproducto = $row[$j++];
$lineasalbaranescli_cantidad = $row[$j++];
$lineasalbaranescli_referencia = $row[$j++];
$albaranescli_codigo = $row[$j++];
$albaranescli_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
echo "<br/> lineasalbaranescli_referencia :".$lineasalbaranescli_referencia;
echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$acumuladosNegativo = $acumulados * -1;
$cantidad = $acumuladosNegativo;
$disponible = $acumuladosNegativo;
$pterecibir = 0;
$reservada = 0;
actualizarStcok($lineasalbaranescli_idproducto,
$lineasalbaranescli_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET disponible = disponible + '. $acumuladosNegativo .
', cantidad = cantidad + '. $acumuladosNegativo .
' WHERE idproducto = '.$lineasalbaranescli_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineasalbaranescli_referencia.'"';
echo "<br/> ". $sql."<br/> ";
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos cantidad y disponible teniendo en cuenta las lineas de albaran de proveedor.
#######################################################################################################################################
$sql='SELECT
SUM(lineasalbaranesprov.cantidad),
lineasalbaranesprov.idproducto,
lineasalbaranesprov.cantidad,
lineasalbaranesprov.referencia,
albaranesprov.codigo,
albaranesprov.fecha,
productos.codfabricante
FROM
lineasalbaranesprov,
albaranesprov,
productos
WHERE
lineasalbaranesprov.idalbaran = albaranesprov.idalbaran
AND (albaranesprov.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= albaranesprov.fecha)
AND productos.idproducto = lineasalbaranesprov.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineasalbaranesprov.idproducto,
lineasalbaranesprov.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineasalbaranesprov_idproducto = $row[$j++];
$lineasalbaranesprov_cantidad = $row[$j++];
$lineasalbaranesprov_referencia = $row[$j++];
$albaranesprov_codigo = $row[$j++];
$albaranesprov_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
echo "<br/> lineasalbaranesprov_referencia :".$lineasalbaranesprov_referencia;
echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = $acumulados;
$disponible = $acumulados;
$pterecibir = 0;
$reservada = 0;
actualizarStcok($lineasalbaranesprov_idproducto,
$lineasalbaranesprov_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET disponible = disponible + '. $acumulados .
', cantidad = cantidad + '. $acumulados .
' WHERE idproducto = '.$lineasalbaranesprov_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineasalbaranesprov_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos pendiente de recibir teniendo en cuenta las lineas de pedido a proveedor sin estar cerradas.
#######################################################################################################################################
$sql='SELECT
SUM(lineaspedidosprov.cantidad),
lineaspedidosprov.idproducto,
lineaspedidosprov.cantidad,
lineaspedidosprov.referencia,
pedidosprov.codigo,
pedidosprov.fecha,
productos.codfabricante
FROM
lineaspedidosprov,
pedidosprov,
productos
WHERE
lineaspedidosprov.idpedido = pedidosprov.idpedido
AND pedidosprov.idestado = '.$estadoPedidoProveedorAbierto . '
AND (pedidosprov.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= pedidosprov.fecha)
AND productos.idproducto = lineaspedidosprov.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineaspedidosprov.idproducto,
lineaspedidosprov.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineaspedidosprov_idproducto = $row[$j++];
$lineaspedidosprov_cantidad = $row[$j++];
$lineaspedidosprov_referencia = $row[$j++];
$pedidosprov_codigo = $row[$j++];
$pedidosprov_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
#echo "<br/> lineaspedidosprov_referencia :".$lineaspedidosprov_referencia;
#echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = 0;
$disponible = 0;
$pterecibir = $acumulados;
$reservada = 0;
actualizarStcok($lineaspedidosprov_idproducto,
$lineaspedidosprov_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET pterecibir = '. $acumulados .
' WHERE idproducto = '.$lineaspedidosprov_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineaspedidosprov_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
#######################################################################################################################################
# Actualizo los campos reservada teniendo en cuenta las lineas de pedido a cliente sin estar cerradas.
#######################################################################################################################################
$sql='SELECT
SUM(lineaspedidoscli.cantidad),
lineaspedidoscli.idproducto,
lineaspedidoscli.cantidad,
lineaspedidoscli.referencia,
pedidoscli.codigo,
pedidoscli.fecha,
productos.codfabricante
FROM
lineaspedidoscli,
pedidoscli,
productos
WHERE
lineaspedidoscli.idpedido = pedidoscli.idpedido
AND pedidoscli.idestado = '.$estadoPedidoClienteAbierto . '
AND (pedidoscli.fecha >="'.$fechaInicio->format('y-m-d').'" AND "'.$fechaFin->format('y-m-d'). '" >= pedidoscli.fecha)
AND productos.idproducto = lineaspedidoscli.idproducto
AND productos.codfamilia = "'.$familias[$i].'"'.'
GROUP BY
lineaspedidoscli.idproducto,
lineaspedidoscli.referencia
ORDER BY productos.referencia';
echo "<br/>". $sql;
$datosSQL = $con->query($sql);
foreach($datosSQL as $row){
$j= 0;
$acumulados = $row[$j++];
$lineaspedidoscli_idproducto = $row[$j++];
$lineaspedidoscli_cantidad = $row[$j++];
$lineaspedidoscli_referencia = $row[$j++];
$pedidoscli_codigo = $row[$j++];
$pedidoscli_fecha = $row[$j++];
$productos_codfabricante = $row[$j++];
#echo "<br/> lineaspedidoscli_referencia :".$lineaspedidoscli_referencia;
#echo "<br/> acumulados :".$acumulados;
#echo "<br/> productos_codfabricante :".$productos_codfabricante;
#echo "<br/> acumulados :".$acumulados;
$cantidad = 0;
$disponible = 0;
$pterecibir = 0;
$reservada = $acumulados;
actualizarStcok($lineaspedidoscli_idproducto,
$lineaspedidoscli_referencia,
$codalmacen,
$cantidad,
$disponible,
$pterecibir,
$reservada,
$actualizar,
$con);
/*
$sql = 'UPDATE stocks SET reservada = '. $acumulados .
' WHERE idproducto = '.$lineaspedidoscli_idproducto.
' AND codalmacen ="'.$codalmacen. '" AND referencia ="'.$lineaspedidoscli_referencia.'"';
echo "<br/> ". $sql."<br/> ";
#$datosSQL2 = $con->query($sql);
if ($actualizar){$datosSQL2 = $con->query($sql);};
$datosSQL2 = null;
*/
}
} // Fin de for de familias
echo "<br/> PROCESO TERMINADO CON EXITO ";
#######################################################################################################################################
# FUNCIONES
#######################################################################################################################################
function actualizarStcok($idproducto, $referenciaStock, $lcodalmacen, $cantidad, $disponible, $pterecibir, $reservada, $actualizar, $con){
# Si tiene algun valor hay que ver si es necesario actualizar.
if ($cantidad <> 0
OR $disponible <> 0
OR $pterecibir <> 0
OR $reservada <> 0
){
#
# ACCESO Y MODIFICACION DE STOCKS
#
$sql='SELECT * FROM stocks'
.' WHERE'
.' stocks.idproducto = '. $idproducto
.' AND stocks.referencia = "'. $referenciaStock.'"'
.' AND stocks.codalmacen = "'. $lcodalmacen .'"'
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
$sql='UPDATE stocks SET'
.' cantidad=cantidad+'.$cantidad.','
.' pterecibir=pterecibir+'.$pterecibir.','
.' disponible=disponible+'.$disponible.','
.' reservada=reservada+'.$reservada
.' WHERE'
.' idproducto= '.$idproducto.''
.' AND referencia= "'.$referenciaStock.'"'
.' AND codalmacen= "'.$lcodalmacen.'"'
.'';
echo "<br/>". $sql;
} else {
#echo "<br/> ". "No existe";
$sql='INSERT INTO stocks(cantidad, codalmacen, disponible, idproducto, pterecibir, referencia, reservada) VALUES ('.
$cantidad.','.
'"'.$lcodalmacen.'",'.
$disponible.','.
$idproducto.','.
$pterecibir.','.
'"'.$referenciaStock.'",'.
$reservada.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
#
# ACCESO Y MODIFICACION DE VARIANTES
#
$sql='SELECT * FROM variantes'
.' WHERE'
.' variantes.idproducto = '. $idproducto
.' AND variantes.referencia = "'. $referenciaStock.'"'
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
try{
$sql='UPDATE variantes SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.' AND referencia= "'.$referenciaStock.'"'
.'';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
} # Fin de try
} else {
#echo "<br/> ". "No existe";
$sql='INSERT INTO variantes(stockfis, idproducto, referencia) VALUES ('.
$cantidad.','.
$idproducto.','.
'"'.$referenciaStock.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
#
# ACCESO Y MODIFICACION DE PRODUCTOS
#
$sql='SELECT * FROM productos'
.' WHERE'
.' productos.idproducto = '. $idproducto
.' LIMIT 1';
#echo "<br/>". $sql;
$sw2=FALSE;
$datosSQL3 = $con->query($sql);
foreach($datosSQL3 as $row){
$sw2=TRUE;
}
#echo "<br/>sw: ". $sw2;
try{
if ($sw2) {
#echo "<br/> ". "SI existe";
try{
$sql='UPDATE productos SET'
.' stockfis=stockfis+'.$disponible.''
.' WHERE'
.' idproducto= '.$idproducto.''
.'';
#echo "<br/>". $sql;
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
} # Fin de try
} else {
echo "<br/> ". "NO EXISTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EL PRODUCTO";
echo "<br/>". $sql;
$sql='DEBERIA EXISITIR EL PRODUCTO'.
$cantidad.','.
$idproducto.','.
'"'.$referenciaStock.')';
echo "<br/>". $sql;
}
if ($actualizar){$datosSQL2 = $con->query($sql);};
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
}# Puede que haya que modificar proque el registro tiene datos.
}
Valora esta pregunta


0