PHP - Sentencia UPDATE de MYSQL que a veces creo que no se ejecuta

 
Vista:
sin imagen de perfil

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/> &nbsp;". $sql."<br/> &nbsp;";

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/> &nbsp;". $sql."<br/> &nbsp;";

#$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/> &nbsp;". $sql."<br/> &nbsp;";

#$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/> &nbsp;". $sql."<br/> &nbsp;";

#$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/> &nbsp;". "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/> &nbsp;". "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/> &nbsp;". "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/> &nbsp;". "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/> &nbsp;". "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/> &nbsp;". "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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder