Índice
1. Comprender cómo PrestaShop maneja el stock
2. Identificar productos con stock negativo
- 2.1. Productos simples (sin combinaciones)
- 2.2. Productos con combinaciones
- 3.1. Establecer el stock a 0
- 3.2. Establecer un stock mínimo por defecto (por ejemplo, 5)
- 3.3. Aplicar corrección solo a productos activos
4. Comparativa de estrategias de corrección
5. Desactivar productos sin stock tras corrección (opcional)
6. Validar los cambios realizados
7. Automatización con PHP para tiendas en producción
Introduccion
En PrestaShop, los errores de sincronización, fallos en módulos o cargas masivas mal ejecutadas pueden provocar que algunos productos terminen con stock negativo, lo que puede generar problemas en la gestión de inventario, ventas y confianza del cliente.
En este artículo vamos a ver cómo detectar y corregir productos con stock negativo directamente desde MySQL, de forma masiva, segura y estructurada.
- Comprender cómo PrestaShop maneja el stock
PrestaShop guarda el stock de cada producto en la tabla:
Tabla | Descripción |
ps_stock_available | Almacena la cantidad disponible por producto y combinación |
Campos clave:
- id_product → ID del producto base
- id_product_attribute → ID de la combinación (si la hay)
- quantity → Cantidad disponible (puede ser negativa)
Importante: El stock puede estar a nivel de producto simple o por combinación (talla, color, etc.)
- Identificar productos con stock negativo
2.1. Productos simples (sin combinaciones)
SELECT s.id_product, p.reference, p.active, s.quantity
FROM ps_stock_available s
JOIN ps_product p ON p.id_product = s.id_product
WHERE s.quantity < 0 AND s.id_product_attribute = 0;
2.2. Productos con combinaciones
SELECT s.id_product, s.id_product_attribute, pa.reference, s.quantity FROM ps_stock_available s JOIN ps_product_attribute pa ON s.id_product_attribute = pa.id_product_attribute WHERE s.quantity < 0 AND s.id_product_attribute > 0;
Ambas consultas te permitirán visualizar los productos con cantidades negativas para tomar acción.
- Corregir el stock negativo
Las formas de corrección más comunes son:
3.1. Establecer el stock a 0
UPDATE ps_stock_available
SET quantity = 0
WHERE quantity < 0;
Esto evita la posibilidad de vender productos no disponibles.
3.2. Establecer un stock mínimo por defecto (por ejemplo, 5)
UPDATE ps_stock_available
SET quantity = 5
WHERE quantity < 0;
3.3. Aplicar corrección solo a productos activos
UPDATE ps_stock_available s
JOIN ps_product p ON s.id_product = p.id_product
SET s.quantity = 0
WHERE s.quantity < 0 AND p.active = 1;
- Comparativa de estrategias de corrección
Estrategia | Cuándo usarla | Pros | Contras |
Establecer stock en 0 | Productos que no se deben vender sin stock | Evita ventas erróneas | Puede dejar catálogo vacío |
Asignar stock mínimo | Para mantener productos visibles o destacarlos | Mantiene el producto disponible | Puede generar ventas sin stock real |
Desactivar producto | Cuando no quieres que se muestren sin stock | Evita confusión del cliente | Requiere gestión posterior |
- Desactivar productos sin stock tras corrección (opcional)
UPDATE ps_product p
JOIN ps_stock_available s ON p.id_product = s.id_product
SET p.active = 0
WHERE s.quantity = 0;
Puedes modificar el valor active = 1 posteriormente cuando restaures el stock real.
- Validar los cambios realizados
Después de aplicar las correcciones, puedes revisar:
Revisión final del stock:
SELECT COUNT(*) FROM ps_stock_available WHERE quantity < 0;
Productos corregidos:
SELECT id_product, quantity FROM ps_stock_available WHERE quantity = 0;
- Automatización con PHP para tiendas en producción
Si deseas programar este proceso regularmente:
<?php
require(dirname(__FILE__).'/config/config.inc.php');
$sql = 'UPDATE ps_stock_available SET quantity = 0 WHERE quantity < 0';
Db::getInstance()->execute($sql);
echo "Stock negativo corregido.";
?>
Puedes programarlo con un cron job diario o semanal.
- Integración con sistemas externos (ERP, CSV, API)
Si usas sincronización con sistemas externos, lo ideal es:
- Corregir el stock directamente desde el origen (ERP o proveedor)
- O sincronizar con scripts que detecten diferencias entre el stock real y PrestaShop
También puedes preparar una tabla intermedia para hacer validaciones antes de aplicar cambios.
Conclusión
Detectar y corregir productos con stock negativo en PrestaShop es una tarea crítica para mantener la integridad de tu catálogo y evitar errores en el proceso de venta.
Con simples consultas SQL puedes detectar y resolver el problema de forma masiva, rápida y controlada. Además, puedes integrar este tipo de procesos a scripts automáticos y tareas programadas para mantener tu tienda limpia y actualizada.
Es recomendable complementar esta estrategia con buenas prácticas de sincronización de inventario y validaciones previas en cargas masivas o integraciones externas.