Stock en mano y virtual en Odoo

Gustavo Orrillo
- 17/08/2021 - 3 min. de lectura


El día de ayer en la lista de Whatsapp de Odoo un usuario preguntó como se podía hacer para que los ajustes de inventario den como resultado un stock negativo. Lo cual mostraba una confusión sobre los dos conceptos de stock que maneja Odoo (y que se maneja en la vida real):

  • Stock en mano: es el stock real. Cuando uno hace un conteo de inventario, es el resultado del mismo. Es el inventario que uno puede ver y tocar. Nunca puede ser negativo porque en la realidad en un almacen o un depósito uno nunca ve un stock negativo. Si uno se para en un depósito, no ve "menos diez" rulemanes. Uno ve una cantidad física que puede contar. El stock en mano se incrementa con las operaciones de ingreso o de fabricación; y se decrementa cuando uno realiza operaciones de entrega o de descarte

  • Stock virtual: es la contabilidad creativa aplicada a los inventarios. Basicamente el stock virtual es el resultado del stock real menos egresos previstos (por ventas) mas ingresos previstos (por orden de fabricación a futuro o por medio de ordenes de compra).  Uno en Odoo puede extender esta funcionalidad para el cálculo del stock virtual, lo que no 

El stock virtual es muy usado en Odoo. Es el que se utiliza para las operaciones de venta y para planificación. Es una predicción muy informada sobre el futuro. Pero para la ejecución, Odoo utiliza siempre el stock real (por eso, imaginense empezar una orden de producción con stock negativo. Que se va a consumir?). Tengan en cuenta que estos conceptos no se aplican para los números de serie (por razones obvias) ni para los lotes.

No permitir el stock negativo

Este último punto es importante. Alguna mente con espíritu entrepeneur en las filas de Odoo pensó que era una buena (y revolucionaria) idea permitir el stock negativo en Odoo (por suerte cuando hacen los ajustes de inventario no se permite). Lo cual lleva a varios problemas, por ejemplo tener valores de stock negativo (lo cual puede ser revolucionario para un desarrollador, pero para un usuario en un deposito no es algo precisamente divertido). El permitir tener stock negativo es demasiado problemático cuando uno trabaja con números de serie, ya que permite que un mismo número de serie esté duplicado en dos ubicaciones diferentes (debido a la falta de control que existe sobre los movimientos). Es más, el no permitir stock negativo es el primer paso a tener un mecanismo de reservación de lotes en Odoo. Para evitar esta situación por suerte hay módulos que lo impíden (hablamos de eso en este post).

Si uno piensa que es necesario hacer ajustes para tener stock negativo, hay algo que estan trabajando mal. El stock virtual puede ser negativo, pero porque el stock virtual es basicamente una proyección no certera sobre el futuro. Si uno necesita un valor negativo en stock, uno tiene que trabajar con stock virtual. No con el stock real.

Anexo técnico

En la variante de producto (el modelo product.product), tenemos dos campos: qty_available (para el stock en mano) y virtual_available (para el stock virtual).  Ambos campos estan definidos en el módulo stock. Ahora, si quieren redefinir ambos campos, deben reescribir el método _compute_quantities_dict que es donde se leen los quants (modelo stock.quant) para conocer el stock disponible, y los movimientos de ingreso y egreso (modelo stock.move) para conocer el stock virtual. Si miran hacia el fin del método; veremos la definición del stock virtual:

res[product_id]['virtual_available'] = float_round(
    qty_available + res[product_id]['incoming_qty'] - res[product_id]['outgoing_qty'],
    precision_rounding=rounding)
Acerca de:

Gustavo Orrillo

Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.