Inventario de Odoo - Que sucede al clickear "Actualizar cantidad" en un producto?

Una introducción a los movimientos de stock y movimientos de producto

Gustavo Orrillo
- 06/15/2022 - 3 min. de lectura


Perdón por el título tan largo... pero es lo que me pregunté al ver ese botón y quise investigar (movido por la necesidad de entender mejor el módulo de inventario). Lo primero que vemos, para sorpresa de muchos, es una vista tree de stock.quant (el objeto con el cual se gestiona el inventario en Odoo).


Esta vista permite crear un stock.quant. Un stock.quant permite conocer por ubicación, producto, nro. de serie, paquete la cantidad de unidades reservadas, en stock, siendo contadas que existen en el sistema. Por ejemplo, el registro de la base de datos del quant que listamos anteriormente es:


Que es lo que sucede al clickear en el botón aplicar? Basicamente se crea un movimiento de stock (stock.move) y un movimiento de producto (stock.move.line). Si utilizamos el debugger y vemos el diccionario de valores que se usa para crear estos movimientos

[{
    'name': 'Cantidad de producto actualizada', 
    'product_id': 60, 
    'product_uom': 1, 
    'product_uom_qty': 40.0, 
    'company_id': 1, 
    'state': 'confirmed', 
    'location_id': 30, 
    'location_dest_id': 8, 
    'is_inventory': True, 
    'move_line_ids': [
        (0, 0, 
           {'product_id': 60, 
            'product_uom_id': 1, 
            'qty_done': 40.0, 
            'location_id': 30, 
            'location_dest_id': 8, 
            'company_id': 1, 
            'lot_id': False, 
            'package_id': False, 
            'result_package_id': False, 
            'owner_id': False})]
}]

Y luego de crear el movimiento de stock y el movimiento de producto, son confirmados por medio del método _action_done 

moves._action_done()

Aca tenemos el movimiento de stock creado


Y el movimiento de producto creado,


Un par puntos a tener en cuenta, el origen de los movimientos es "Inventory adjustment" y el destino es siempre una ubicación física. Y el valor del campo is_inventory en el movimiento de stock. 

Veamos ahora la lista de valores cuando damos de alta stock con números de serie.

[{
    'name': 'Cantidad de producto actualizada', 
    'product_id': 62, 
    'product_uom': 1, 
    'product_uom_qty': 1.0, 
    'company_id': 1, 
    'state': 'confirmed', 
    'location_id': 30, 
    'location_dest_id': 8, 
    'is_inventory': True, 
    'move_line_ids': 
        [(0, 0, 
                {'product_id': 62, 
                 'product_uom_id': 1, 
                 'qty_done': 1.0, 
                 'location_id': 30, 
                 'location_dest_id': 8, 
                 'company_id': 1, 
                 'lot_id': 21, 
                 'package_id': False, 
                 'result_package_id': False, 
                 'owner_id': False})]
}]

Lo único que cambia es el ID del número de serie en el movimiento del producto, que es especificado en este ejemplo. Y si vemos el movimiento de producto creado


Y si vemos la vista de trazabilidad del número de serie


Por que es importante esto? Porque si queremos replicar un sistema de manufactura, la salida del proceso de producción son movimientos de stock y productos como los anteriormente descriptos. Y si queremos hacer ingresos de mercadería a la empresa, los podemos replicar con estos movimientos tambien (solo necesitamos modificar la ubicación origen).

Ahora, si hacemos una orden de compra y recibimos la mercadería, veremos un movimiento de stock de la siguiente manera:



El movimiento de stock es el mismo, lo que cambia es la ubicación de origen. El destino es Stock y el origen es una ubicación de proveedor (sigue siendo una ubicación que no es física). Lo que sería bueno es agregar a este movimiento de stock el partner de origen. Lo mismo sucede con el movimiento de producto.

Ahora, si miramos al módulo de fabricación vemos que el mismo es ponerle infraestructura a un conjunto de movimientos de stock y de producto. Primero por una lista de materiales tenemos los movimientos de stock/productos a la ubicación de producción. Después tenemos que lo producido es un movimiento de stock/producto de una ubicación de producción a una ubicación interna, como vemos a continuación 


 Por que quería hablar de esto? Primero quería explicar como se originan los movimientos de stock y productos. En posts posteriores vamos a hablar sobre los quants (para entender como se maneja el inventario) y la administración de los números de serie.

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.