Ir al contenido

El Modelo stock.move: Comprendiendo la Arquitectura de Movimiento de Inventario en Odoo

Una guía completa sobre el modelo de movimiento de inventario central de Odoo para desarrolladores y consultores funcionales
10 de marzo de 2026 por
El Modelo stock.move: Comprendiendo la Arquitectura de Movimiento de Inventario en Odoo
Dasolo
| Sin comentarios aún

Introducción


En Odoo, los modelos definen cómo se estructura y almacena la información en la base de datos. Cada pieza de datos empresariales con la que trabajas, desde órdenes de venta hasta facturas y movimientos de inventario, reside en un modelo.


Entender los modelos de Odoo es esencial tanto para desarrolladores como para consultores funcionales. Los modelos son la base de la arquitectura de datos de Odoo. Definen campos, relaciones y lógica empresarial.


Este artículo se centra en uno de los modelos más importantes de Odoo: stock.move. Ya sea que estés construyendo módulos personalizados de almacén, integrando sistemas externos o configurando flujos de trabajo de inventario, trabajarás con este modelo.

¿Qué es el modelo stock.move?


El modelo stock.move representa un único movimiento de inventario en Odoo. Define la transferencia de un producto de una ubicación a otra. Cada vez que los bienes salen de un estante, se mueven entre almacenes o se entregan a un cliente, se crea un registro de stock.move.


Este modelo en Odoo es utilizado por el módulo de Inventario (Stock). Ventas, Compras, Fabricación y comercio electrónico crean registros de stock.move cuando desencadenan operaciones de inventario. Cuando confirmas un pedido de entrega, recibes bienes de un proveedor o completas un pedido de fabricación, estás creando o actualizando registros de stock.move.


El modelo está definido en el módulo de stock. Otros módulos lo extienden a través de la herencia de modelos de Odoo. Ventas añade sale_line_id. Compras añade purchase_line_id. Fabricación añade production_id. Cada módulo añade lo que necesita sin duplicar la estructura central.

Campos clave en el modelo


Aquí están los campos más importantes de Odoo en el modelo stock.move. Comprender estos te ayudará a trabajar de manera efectiva con los movimientos de inventario.


1. name

Tipo: Char. Este campo almacena el nombre o descripción del movimiento. Generalmente se construye a partir del nombre del producto y la cantidad. Se muestra en muchas vistas de Odoo y es el identificador principal para el movimiento en listas.


2. product_id

Tipo: Many2one (product.product). El producto que se está moviendo. Este es un campo requerido. Cada movimiento de stock debe hacer referencia a un producto. Odoo utiliza esto para rastrear cantidades y aplicar reglas de inventario.


3. product_uom

Tipo: Many2one (uom.uom). La unidad de medida para la cantidad. Requerido. Generalmente coincide con la UoM predeterminada del producto. Odoo valida que las cantidades se expresen en esta unidad.


4. product_uom_qty

Tipo: Float. La cantidad a mover en la unidad de medida del producto. Esta es la cantidad demandada. Cuando se realiza el movimiento, quantity_done es la cantidad real procesada.


5. cantidad

Tipo: Flotante. Un campo calculado o de visualización que muestra la cantidad. A menudo se utiliza en vistas para una visualización amigable para el usuario. Puede ser el mismo que product_uom_qty o un valor convertido.


6. location_id

Tipo: Many2one (stock.location). La ubicación de origen. De dónde proviene el producto. Requerido. Para movimientos salientes, esta es la ubicación de stock. Para movimientos entrantes, podría ser una ubicación de proveedor o de producción.


7. location_dest_id

Tipo: Many2one (stock.location). La ubicación de destino. A dónde va el producto. Requerido. Para movimientos entrantes, esta es la ubicación de stock. Para movimientos salientes, podría ser una ubicación de cliente o de chatarra.


8. picking_id

Tipo: Many2one (stock.picking). El documento de transferencia o recogida que agrupa este movimiento. Un pedido de entrega, recibo o transferencia interna. Los movimientos se agrupan por recogida para operaciones del usuario.


9. picking_type_id

Tipo: Many2one (stock.picking.type). El tipo de operación. Define si se trata de una entrega saliente, un recibo entrante o una transferencia interna. Impulsa el flujo de trabajo y las ubicaciones predeterminadas.


10. estado

Tipo: Selección. El estado actual del movimiento. Valores: borrador, esperando, confirmado, asignado, hecho, cancelado. Borrador no está confirmado aún. Asignado significa que el stock está reservado. Hecho significa que el movimiento está completo.


11. fecha

Tipo: Fecha y hora. La fecha programada para el movimiento. Se utiliza para la planificación y programación. Odoo utiliza esto para priorizar transferencias y planificar operaciones.


12. fecha_límite

Tipo: Fecha y hora. La fecha límite para el movimiento. Para las entregas a clientes, esta suele ser la fecha de entrega prometida. Se utiliza en cálculos de urgencia.


13. origen

Tipo: Char. Referencia al documento de origen. Por ejemplo, un número de SO, número de PO o número de MO. Ayuda a rastrear el movimiento hasta su fuente.


14. move_dest_id

Tipo: Many2one (stock.move). El movimiento de destino en una cadena. Cuando un movimiento alimenta a otro (por ejemplo, la producción alimenta una entrega), esto los vincula. Se utiliza para encadenar movimientos y propagación.


15. move_orig_ids

Tipo: One2many (stock.move). Los movimientos de origen. El inverso de move_dest_id. Lista los movimientos que alimentan este. Se utiliza para la trazabilidad.


16. move_line_ids

Tipo: One2many (stock.move.line). Las líneas de movimiento. Desglose detallado del movimiento con detalles de lote, serie o ubicación. Cuando reservas o procesas stock, se crean líneas de movimiento.


17. partner_id

Tipo: Many2one (res.partner). El socio asociado con el movimiento. Para entregas a clientes, el cliente. Para recepciones de proveedores, el proveedor. Se utiliza para direcciones e informes.


18. company_id

Tipo: Many2one (res.company). En configuraciones de múltiples empresas, esto indica a qué empresa de Odoo pertenece el movimiento. Afecta la visibilidad de los registros y las reglas entre empresas.


19. quantity_done

Tipo: Float. La cantidad que ha sido procesada o realizada. Cuando el usuario selecciona o recibe, esto se actualiza. El movimiento se considera completo cuando quantity_done es igual a product_uom_qty.


20. reserved_availability

Tipo: Float. La cantidad que ha sido reservada para este movimiento. El stock se reserva cuando el movimiento es asignado. Este campo muestra cuánto está disponible.


21. create_date

Tipo: Datetime. Almacena la fecha y hora en que se creó el registro. Gestionado automáticamente por Odoo. Útil para informes y auditorías.


22. write_date

Tipo: Datetime. Almacena la fecha y hora de la última modificación. También gestionado automáticamente. Ayuda a rastrear cuándo se actualizó por última vez la información.


23. secuencia

Tipo: Entero. Orden de visualización dentro de un picking. Se utiliza para ordenar los movimientos en la interfaz de usuario. Los números más bajos aparecen primero.


24. prioridad

Tipo: Selección. Nivel de urgencia. A menudo 0 para normal, 1 para urgente. Se utiliza en la programación y planificación. Los movimientos urgentes pueden ser priorizados en las operaciones.


25. descripción_picking

Tipo: Char. Una descripción o nota para el movimiento. Se muestra en los documentos de picking. Útil para instrucciones especiales o notas de manejo.


26. referencia

Tipo: Char. Referencia interna o código. Puede ser utilizado para el mapeo de sistemas externos o seguimiento personalizado.


27. group_id

Tipo: Many2one (procurement.group). El grupo de aprovisionamiento. Agrupa movimientos relacionados del mismo aprovisionamiento (por ejemplo, un solo pedido de venta). Se utiliza para la planificación y encadenamiento.


28. método_de_aprovisionamiento

Tipo: Selección. Hacer para stock o hacer por pedido. Determina si el stock se toma de inventario existente o se activa para producción/aprovisionamiento.


29. sale_line_id

Tipo: Many2one (sale.order.line). Añadido por el módulo de Ventas. Vincula el movimiento a la línea de pedido de venta que lo desencadenó. Se utiliza para la trazabilidad y los informes.


30. purchase_line_id

Tipo: Many2one (purchase.order.line). Añadido por el módulo de Compras. Vincula el movimiento a la línea de pedido de compra. Se utiliza al recibir mercancías de los proveedores.


31. production_id

Tipo: Many2one (mrp.production). Añadido por Fabricación. Vincula el movimiento a la orden de fabricación. Se utiliza para el consumo de materias primas y la salida de productos terminados.


32. active

Tipo: Booleano. Indicador de eliminación suave. Cuando es Falso, el registro se archiva y se oculta de las vistas predeterminadas. Los registros no se eliminan físicamente.

Cómo se utiliza este modelo en los flujos de trabajo empresariales


1. Entrega al Cliente

Cuando se confirma un pedido de venta, Odoo crea registros de stock.move para cada línea de producto. Cada movimiento tiene location_id como la ubicación de stock y location_dest_id como la ubicación del cliente. Los movimientos se agrupan en un albarán (orden de entrega). Cuando el almacén recoge y envía, quantity_done se actualiza y el estado del movimiento se convierte en hecho.


2. Recepción del Proveedor

Cuando se confirma un pedido de compra, Odoo crea registros de stock.move para mercancías entrantes. location_id es la ubicación del proveedor, location_dest_id es la ubicación de stock. Los movimientos se agrupan en un recibo. Cuando llegan las mercancías, el usuario valida y se establece quantity_done.


3. Transferencia Interna

Las transferencias entre almacenes o ubicaciones crean registros de stock.move. location_id es el almacén de origen, location_dest_id es el destino. Se utiliza para reabastecimiento, reequilibrio de stock u operaciones en múltiples almacenes.


4. Fabricación

Los pedidos de fabricación crean dos tipos de movimientos: materias primas entrantes (de stock a producción) y productos terminados salientes (de producción a stock). El campo production_id vincula estos movimientos al pedido de fabricación. La cadena de movimientos a través de move_dest_id conecta la producción con las entregas posteriores.


5. Devoluciones y Chatarra

Las devoluciones de clientes crean movimientos inversos. Las operaciones de chatarra crean movimientos hacia una ubicación de chatarra. El mismo modelo stock.move maneja todos estos flujos. El picking_type_id determina el tipo de operación y el flujo de trabajo.

Cómo los desarrolladores extienden este modelo


Los desarrolladores extienden stock.move utilizando varios patrones. La herencia de modelos de Odoo es el principal mecanismo.


Herencia de Modelos

Utiliza _inherit = 'stock.move' para extender el modelo. Agrega nuevos campos, sobrescribe métodos o añade restricciones. El modelo heredado en Odoo mantiene tus cambios en un módulo separado para facilitar las actualizaciones.


Añadiendo Campos

Define nuevos campos de Odoo en tu modelo heredado. Utiliza el tipo de campo adecuado: Char, Many2one, Boolean, Integer, Text, Selection. Considera campos dependientes de la empresa para múltiples empresas. Para movimientos de stock, las extensiones comunes incluyen números de seguimiento personalizados, referencias de transportistas o atributos de lote.


Extensiones de Python

Sobrescribe _action_done, _action_assign o _action_cancel para agregar lógica. Usa super() para llamar al original. Ten cuidado con las actualizaciones de inventario y la cadena de movimientos. El modelo API en Odoo expone estos métodos para su extensión.


Odoo Studio

Odoo Studio te permite agregar campos sin código. Es bueno para personalizaciones rápidas como campos personalizados en formularios de movimiento. Para lógica compleja o cambios en el flujo de trabajo, los módulos personalizados son más mantenibles.

Mejores prácticas


  • Siempre establece location_id y location_dest_id correctamente. Ubicaciones incorrectas pueden causar niveles de inventario erróneos.
  • Usa picking_id para agrupar movimientos relacionados. No crees movimientos sin un picking cuando pertenecen a una transferencia.
  • Al construir integraciones API, usa la API XML-RPC o JSON-RPC. El modelo stock.move está completamente expuesto. Mapea los IDs externos con cuidado.
  • Para campos personalizados, usa el prefijo x_ o un prefijo de módulo para evitar conflictos con futuras versiones de Odoo.
  • Usa move_dest_id y move_orig_ids para trazabilidad. Al crear movimientos encadenados programáticamente, establece estos enlaces correctamente.
  • Considera quantity_done vs product_uom_qty al validar. Se permiten entregas parciales.

Errores comunes


  • Creando movimientos con tipos de ubicación incorrectos. La fuente y el destino deben ser compatibles (por ejemplo, no ambas ubicaciones de cliente).
  • Modificando product_uom_qty después de que existan líneas de movimiento. Esto puede causar inconsistencias en el inventario. Cancela y recrea si es necesario.
  • Olvidando establecer el origen. Sin origen, rastrear un movimiento de vuelta a su documento fuente es difícil.
  • Sobrescribiendo _action_done sin llamar a super(). Esto puede romper las actualizaciones de inventario y otros módulos.
  • Creando movimientos directamente sin seguir el flujo de trabajo adecuado (por ejemplo, stock.picking). Saltarse la recogida puede romper la reserva y la asignación.
  • Ignorando move_dest_id al dividir o fusionar movimientos. Los movimientos encadenados pueden quedar huérfanos.

Conclusión


El modelo stock.move es central para el inventario de Odoo. Almacena cada movimiento de bienes de una ubicación a otra. Entender sus campos y cómo los módulos lo extienden te ayudará a configurar, personalizar e integrar Odoo de manera efectiva.


Ya seas un consultor funcional mapeando procesos de almacén o un desarrollador construyendo módulos personalizados, un sólido conocimiento de stock.move te ahorrará tiempo y evitará errores.

¿Necesitas ayuda con tu implementación de Odoo?


Dasolo ayuda a las empresas a implementar, personalizar y optimizar Odoo. Nos especializamos en integraciones de API y desarrollo de Odoo. Nuestro equipo tiene una profunda experiencia con la arquitectura de datos de Odoo y modelos como stock.move.


Si necesitas ayuda con tu implementación de Odoo, módulos personalizados o integraciones, estamos aquí para ayudar. Reserva una demostración para discutir tu proyecto.

El Modelo stock.move: Comprendiendo la Arquitectura de Movimiento de Inventario en Odoo
Dasolo 10 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario