Cómo Configurar Alertas de Stock Mínimo en SAP Business One Paso a Paso - imagen destacada

Publicaciones

Cómo Configurar Alertas de Stock Mínimo en SAP Business One Paso a Paso

Hector Pincheira

Hector Pincheira

CIO | CTO
Estrategia Digital & Innovación Tecnológica

Artículos

El quiebre de stock que nadie vio venir (y que costó una fortuna)

Hay pocas cosas más frustrantes en una operación que descubrir que te quedaste sin un producto clave cuando un cliente lo necesita. El pedido se pierde, la confianza se erosiona y el equipo comercial señala a bodega, que señala a compras, que señala al sistema. La realidad es que las alertas de stock mínimo en SAP Business One pueden prevenir este escenario, pero la mayoría de las empresas no las configura correctamente — o directamente no las usa.

En este tutorial vas a aprender a configurar paso a paso las alertas de stock mínimo en SAP Business One, desde la definición de niveles en el maestro de artículos hasta la activación de notificaciones automáticas. Además, incluyo queries con versiones para SQL Server y SAP HANA que te ayudarán a diagnosticar y optimizar tu gestión de inventario.

¿Por qué las alertas de stock mínimo en SAP Business One son críticas?

Quiebres de stock: Cada vez que un producto no está disponible cuando se necesita, pierdes ventas directas y credibilidad. En consecuencia, el cliente busca alternativas y muchas veces no regresa.

Sobrestock: Sin niveles definidos, compras «por si acaso» y terminas con capital inmovilizado en bodega. Por lo tanto, tu flujo de caja se deteriora silenciosamente.

Decisiones reactivas: Sin alertas, el equipo de compras trabaja apagando incendios en lugar de planificar. Además, la falta de visibilidad genera desconfianza entre las áreas.

Costo oculto: El quiebre de stock no solo pierde la venta puntual, sino que genera compras urgentes a precios más altos, envíos express y horas extras en producción.

Paso 1: Definir niveles mínimos en el Maestro de Artículos

El primer paso para configurar alertas de stock mínimo en SAP Business One es definir los niveles en cada artículo. Ve a Inventario → Datos maestros del artículo y en la pestaña Datos de inventario encontrarás tres campos clave por almacén:

Stock mínimo (MinStock): La cantidad por debajo de la cual se genera una alerta. Es tu línea roja de inventario.

Stock máximo (MaxStock): El techo que no deberías superar para evitar sobrestock y capital inmovilizado.

Punto de reorden (ReorderPoint): La cantidad a la cual deberías lanzar una nueva orden de compra considerando el lead time del proveedor.

La fórmula práctica para definir estos valores es: Stock mínimo = Consumo diario promedio × Días de cobertura de seguridad. Para calcular esto necesitas datos reales de consumo, que puedes obtener con la query del Paso 4.

Paso 2: Activar la alerta de desviación de stock mínimo

Una vez definidos los niveles, necesitas activar las alertas automáticas. Ve a Administración → Gestión de alertas → Alertas de usuario y busca la alerta predefinida «Desviación del stock mínimo». Actívala y configura:

Frecuencia: Cada cuánto tiempo SAP B1 verifica los niveles. Para productos críticos, revisa diariamente. Para otros, semanal puede ser suficiente.

Destinatarios: Asigna la alerta al responsable de compras y al jefe de bodega. Sin embargo, evita enviarla a demasiadas personas porque perderá impacto.

Prioridad: Marca las alertas de productos clase A como alta prioridad para que se destaquen en la bandeja de alertas.

Paso 3: Cuándo se dispara la alerta

La alerta se activa cuando una transacción de salida de inventario (entrega, transferencia, entrada de mercancía negativa) reduce el stock por debajo del nivel mínimo definido. Es importante entender que la alerta es reactiva: se dispara después del movimiento, no antes.

Por lo tanto, el punto de reorden cobra especial relevancia. Si configuras correctamente el punto de reorden, podrás generar órdenes de compra antes de alcanzar el stock mínimo. Además, el MRP puede complementar esto con un enfoque proactivo basado en demanda proyectada.

Paso 4: Configurar alertas masivas con queries SQL

Cuando tienes cientos de artículos sin stock mínimo definido, configurarlos uno por uno es inviable. Esta query identifica artículos con stock activo pero sin nivel mínimo configurado y sugiere un valor basado en el consumo real de los últimos 6 meses.

Versión SQL Server

SELECT
    T0.ItemCode              AS 'Código',
    T0.ItemName              AS 'Descripción',
    T1.WhsCode               AS 'Almacén',
    CAST(T1.OnHand AS DECIMAL(15,2)) AS 'Stock Actual',
    T1.MinStock               AS 'Mínimo Actual',
    ISNULL(Consumo.PromedioMensual, 0) AS 'Consumo Mensual',
    CAST(ISNULL(Consumo.PromedioMensual, 0) * 1.5 AS DECIMAL(15,0)) AS 'Mínimo Sugerido'
FROM OITM T0
INNER JOIN OITW T1 ON T1.ItemCode = T0.ItemCode
LEFT JOIN (
    SELECT ItemCode, Warehouse,
        CAST(SUM(ABS(InQty - OutQty)) / 6.0 AS DECIMAL(15,2)) AS PromedioMensual
    FROM OINM
    WHERE DocDate >= DATEADD(MONTH, -6, GETDATE())
      AND TransType IN (13, 14, 15, 16, 18, 19, 20, 21, 59, 60, 67)
    GROUP BY ItemCode, Warehouse
) Consumo ON Consumo.ItemCode = T0.ItemCode
    AND Consumo.Warehouse = T1.WhsCode
WHERE T1.OnHand > 0 AND T0.InvntItem = 'Y'
    AND (T1.MinStock = 0 OR T1.MinStock IS NULL)
ORDER BY ISNULL(Consumo.PromedioMensual, 0) DESC

Versión SAP HANA

SELECT
    T0."ItemCode"              AS "Código",
    T0."ItemName"              AS "Descripción",
    T1."WhsCode"               AS "Almacén",
    CAST(T1."OnHand" AS DECIMAL(15,2)) AS "Stock Actual",
    T1."MinStock"               AS "Mínimo Actual",
    IFNULL("Consumo"."PromedioMensual", 0) AS "Consumo Mensual",
    CAST(IFNULL("Consumo"."PromedioMensual", 0) * 1.5 AS DECIMAL(15,0)) AS "Mínimo Sugerido"
FROM "OITM" T0
INNER JOIN "OITW" T1 ON T1."ItemCode" = T0."ItemCode"
LEFT JOIN (
    SELECT "ItemCode", "Warehouse",
        CAST(SUM(ABS("InQty" - "OutQty")) / 6.0 AS DECIMAL(15,2)) AS "PromedioMensual"
    FROM "OINM"
    WHERE "DocDate" >= ADD_MONTHS(CURRENT_DATE, -6)
      AND "TransType" IN (13, 14, 15, 16, 18, 19, 20, 21, 59, 60, 67)
    GROUP BY "ItemCode", "Warehouse"
) "Consumo" ON "Consumo"."ItemCode" = T0."ItemCode"
    AND "Consumo"."Warehouse" = T1."WhsCode"
WHERE T1."OnHand" > 0 AND T0."InvntItem" = 'Y'
    AND (T1."MinStock" = 0 OR T1."MinStock" IS NULL)
ORDER BY IFNULL("Consumo"."PromedioMensual", 0) DESC

Esta query calcula el consumo mensual promedio de los últimos 6 meses y sugiere un stock mínimo de 1.5 veces ese valor. Ajusta el multiplicador según tu industria y la criticidad de cada artículo. En consecuencia, obtendrás niveles mínimos basados en datos reales en lugar de suposiciones.

Paso 5: Integrar con el Asistente de Planificación (MRP)

Las alertas son reactivas. Para un enfoque proactivo, complementa con el MRP (MRP → Asistente de planificación). El MRP analiza demanda futura contra stock actual y genera recomendaciones de compra automáticamente.

Para que funcione correctamente con tus alertas, los tiempos de entrega de cada proveedor deben estar actualizados en el maestro de artículos. Además, los lotes mínimos de compra deben estar configurados si tu proveedor tiene cantidades mínimas. Por lo tanto, el punto de reorden debe estar alineado con la fórmula: Consumo diario × Lead time + Stock de seguridad.

Query bonus: Dashboard de cobertura de inventario

Esta query complementa las alertas mostrando cuántos días de cobertura tiene cada artículo según su consumo reciente. Es fundamental para priorizar las compras.

Versión SQL Server

SELECT
    T0.ItemCode              AS 'Código',
    T0.ItemName              AS 'Descripción',
    T1.WhsCode               AS 'Almacén',
    CAST(T1.OnHand AS DECIMAL(15,2)) AS 'Stock Actual',
    T1.MinStock               AS 'Stock Mínimo',
    ISNULL(Consumo.PromedioDiario, 0) AS 'Consumo Diario',
    CASE WHEN ISNULL(Consumo.PromedioDiario, 0) = 0 THEN 999
        ELSE CAST(T1.OnHand / Consumo.PromedioDiario AS INT)
    END                       AS 'Días Cobertura',
    CASE
        WHEN ISNULL(Consumo.PromedioDiario, 0) = 0 THEN 'Sin Movimiento'
        WHEN T1.OnHand / Consumo.PromedioDiario <= 7 THEN 'CRÍTICO'
        WHEN T1.OnHand / Consumo.PromedioDiario <= 15 THEN 'BAJO'
        WHEN T1.OnHand / Consumo.PromedioDiario <= 30 THEN 'NORMAL'
        ELSE 'HOLGADO'
    END                       AS 'Estado'
FROM OITM T0
INNER JOIN OITW T1 ON T1.ItemCode = T0.ItemCode
LEFT JOIN (
    SELECT ItemCode, Warehouse,
        CAST(SUM(ABS(InQty - OutQty)) / 180.0 AS DECIMAL(15,4)) AS PromedioDiario
    FROM OINM
    WHERE DocDate >= DATEADD(MONTH, -6, GETDATE())
      AND TransType IN (13, 14, 15, 16, 18, 19, 20, 21, 59, 60, 67)
    GROUP BY ItemCode, Warehouse
) Consumo ON Consumo.ItemCode = T0.ItemCode
    AND Consumo.Warehouse = T1.WhsCode
WHERE T1.OnHand > 0 AND T0.InvntItem = 'Y'
ORDER BY CASE WHEN ISNULL(Consumo.PromedioDiario, 0) = 0 THEN 999
    ELSE CAST(T1.OnHand / Consumo.PromedioDiario AS INT) END ASC

Versión SAP HANA

SELECT
    T0."ItemCode"              AS "Código",
    T0."ItemName"              AS "Descripción",
    T1."WhsCode"               AS "Almacén",
    CAST(T1."OnHand" AS DECIMAL(15,2)) AS "Stock Actual",
    T1."MinStock"               AS "Stock Mínimo",
    IFNULL("Consumo"."PromedioDiario", 0) AS "Consumo Diario",
    CASE WHEN IFNULL("Consumo"."PromedioDiario", 0) = 0 THEN 999
        ELSE CAST(T1."OnHand" / "Consumo"."PromedioDiario" AS INT)
    END                       AS "Días Cobertura",
    CASE
        WHEN IFNULL("Consumo"."PromedioDiario", 0) = 0 THEN 'Sin Movimiento'
        WHEN T1."OnHand" / "Consumo"."PromedioDiario" <= 7 THEN 'CRÍTICO'
        WHEN T1."OnHand" / "Consumo"."PromedioDiario" <= 15 THEN 'BAJO'
        WHEN T1."OnHand" / "Consumo"."PromedioDiario" <= 30 THEN 'NORMAL'
        ELSE 'HOLGADO'
    END                       AS "Estado"
FROM "OITM" T0
INNER JOIN "OITW" T1 ON T1."ItemCode" = T0."ItemCode"
LEFT JOIN (
    SELECT "ItemCode", "Warehouse",
        CAST(SUM(ABS("InQty" - "OutQty")) / 180.0 AS DECIMAL(15,4)) AS "PromedioDiario"
    FROM "OINM"
    WHERE "DocDate" >= ADD_MONTHS(CURRENT_DATE, -6)
      AND "TransType" IN (13, 14, 15, 16, 18, 19, 20, 21, 59, 60, 67)
    GROUP BY "ItemCode", "Warehouse"
) "Consumo" ON "Consumo"."ItemCode" = T0."ItemCode"
    AND "Consumo"."Warehouse" = T1."WhsCode"
WHERE T1."OnHand" > 0 AND T0."InvntItem" = 'Y'
ORDER BY CASE WHEN IFNULL("Consumo"."PromedioDiario", 0) = 0 THEN 999
    ELSE CAST(T1."OnHand" / "Consumo"."PromedioDiario" AS INT) END ASC

Los artículos en estado CRÍTICO (menos de 7 días de cobertura) necesitan acción inmediata. Además, nota que en SAP HANA se usa ADD_MONTHS en lugar de DATEADD e IFNULL en lugar de ISNULL.

Buenas prácticas para alertas de stock mínimo en SAP Business One

Revisa los niveles trimestralmente: El consumo cambia con la estacionalidad. Un stock mínimo fijo durante todo el año te dejará desprotegido en temporada alta y con exceso en temporada baja.

Clasifica tus artículos con ABC: No todos los productos merecen el mismo nivel de atención. Los artículos clase A (alto valor o alto movimiento) necesitan niveles más conservadores y revisiones más frecuentes.

Documenta las excepciones: Si un artículo tiene un comportamiento atípico (compra anual, producto estacional), documéntalo en el campo de observaciones para que el equipo entienda por qué el mínimo está configurado de cierta manera.

Monitorea la efectividad: Lleva un registro de quiebres de stock antes y después de implementar las alertas. Sin embargo, no basta con activarlas: necesitas medir su impacto real.

Conclusión: las alertas son tu sistema nervioso de inventario

Configurar alertas de stock mínimo en SAP Business One no es un proyecto de una semana: es un hábito operativo que necesita mantenimiento. Las queries presentadas, disponibles tanto para SQL Server como para SAP HANA, te dan las herramientas para diagnosticar tu situación actual, definir niveles basados en datos reales y monitorear la cobertura de forma continua.

En consecuencia, tu equipo de compras dejará de trabajar reactivamente y comenzará a anticipar necesidades. La diferencia entre una empresa que controla su inventario y una que lo sufre está en estos detalles de configuración.

Mas Leídos

Pasajero mira un tablero de salidas en un aeropuerto, metafora de la dependencia de proveedores de IA
El Calendario Ajeno: la Dependencia de Proveedores de IA que Nadie Negocia
SAP Business One Procedimientos Almacenados: Reportes Reutilizables - imagen destacada del tutorial
SAP Business One Procedimientos Almacenados: Reportes Reutilizables
SAP Business One Pedidos Pendientes - imagen destacada del tutorial
SAP Business One Pedidos Pendientes: Query SQL para Controlar tu Backlog
QlikSense análisis de rendimiento: descomposición de la merma
QlikSense Análisis de Rendimiento: la Merma que Nadie Está Mirando
QlikSense dashboard móvil: las tres pantallas
QlikSense Dashboard Móvil: las Tres Pantallas que Sí se Miran
SAP Business One Depósitos Bancarios - imagen destacada del tutorial
SAP Business One Depósitos Bancarios: Gestiona Cheques y Cobros Paso a Paso

ARTICULOS RELACIONADOS