OdooWiki OCA HUB

Product cost price avco sync

product_cost_price_avco_sync folder_open OCA/stock-logistics-workflow open_in_new
Stock Licencia: AGPL-3

Odoo calcula el coste medio de un producto a partir de sus capas de valoración de existencias, y nunca reexpresa una una vez escrita: una corrección siempre se registra como una nueva capa, fechada el día en que se realiza, y todo lo que se valoró en el intervalo conserva las cifras que se le asignaron. Esa es una regla sólida cuando la valoración de existencias se contabiliza movimiento a movimiento, y es exactamente lo que se queda corto cuando no es así.

Este módulo reexpresa la capa en su lugar. Cuando se corrige el coste o la cantidad de una capa de valoración ya validada, la capa se reescribe como si siempre hubiera tenido las cifras corregidas, y toda la cadena se reproduce desde ahí en adelante. Esto es lo que aporta:

  • Un error cometido en una recepción puede deshacerse de verdad. Alguien teclea mal el precio de una compra, o introduce la cantidad en la unidad equivocada, y solo se detecta días después. Basta con corregir la recepción: la capa, el coste del producto y todo lo valorado después cuadran con lo que realmente ocurrió.
  • Los movimientos de salida valorados en el intervalo se vuelven a valorar. Las unidades que salieron del stock mientras el error estaba presente se habían valorado con el promedio equivocado. Se les asigna el coste que deberían haber tenido, de modo que el coste de las mercancías vendidas deja de arrastrar el error, y cualquier cosa que lea el coste de una capa de salida se actualiza en consecuencia. El margen que sale_margin_sync escribe en la línea del pedido de venta es uno de esos lectores.
  • Una valoración de existencias solicitada para una fecha pasada sale corregida. El informe de valoración suma el valor actual de las capas creadas hasta la fecha solicitada, por lo que reexpresarlas es lo que hace que una valoración a fecha del mes pasado sea correcta una vez que se corrige este mes un error cometido el mes pasado. Cuando la valoración de existencias se contabiliza periódicamente en lugar de movimiento a movimiento, esto es lo que permite cerrar el periodo con cifras corregidas en lugar de arrastrar el error al siguiente.
  • El coste de un producto o lote sobrevendido no se dispara. Sin unidades restantes con las que promediar, Odoo sigue ponderando el coste entrante contra la cantidad negativa, y dividir por ella devuelve un precio que no es el promedio de nada y que incluso puede ser negativo, que luego copia cada movimiento de salida. Aquí el coste de la recepción se convierte en el nuevo promedio, que es también el coste que el propio vaciado de stock negativo de Odoo utiliza para liquidar el déficit una vez que llega suficiente stock real, de modo que ambos extremos coinciden y el coste es siempre un precio que se pagó realmente.
  • Se admiten productos valorados por lote. Cada lote se reproduce como su propia cadena, por lo que una corrección solo vuelve a valorar lo que salió de ese mismo lote y los demás lotes conservan su propio coste. Los productos valorados en su conjunto y los productos valorados por lote pueden coexistir, y un producto puede cambiarse de uno a otro en cualquier momento.

Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.

auto_awesome Qué hace este módulo

Generado por IA a partir del código · Odoo 18.0

Corrige el coste medio de los productos y lotes cuando se edita un movimiento de stock validado, reescribiendo la capa de valoración original y reproduciendo toda la cadena de valoración. Añade una acción de servidor para forzar este recálculo desde las capas de valoración seleccionadas.

Este módulo cambia cómo Odoo gestiona las correcciones de movimientos de stock ya validados para productos valorados a coste medio (AVCO). Normalmente, cuando corriges la cantidad o el precio de una recepción, Odoo crea una nueva capa de valoración con fecha de hoy, dejando incorrectos los informes pasados y los costes intermedios de las salidas. Aquí, la capa original se reescribe como si el movimiento siempre hubiera tenido las cifras corregidas, y cada capa posterior de la misma cadena de valoración se recalcula.

También protege el precio de coste cuando el stock se vende en exceso (negativo en existencias). Las recepciones sobre stock negativo ya no producen una media rota; el coste entrante se convierte en la nueva media. Las revalorizaciones de stock negativo del vacuum de Odoo no se reparten sobre el stock restante, evitando costes unitarios negativos o absurdos.

Para productos valorados por lote, cada lote mantiene su propia cadena de coste, y el coste del producto se deriva de sus capas. Una acción de servidor llamada "Recompute average cost from here" está disponible en las capas de valoración de stock (vista de lista) para los responsables de stock, para reproducir manualmente una cadena cuando sea necesario.

El módulo toca product.product, product.template, stock.lot, stock.move, stock.move.line, stock.picking y stock.valuation.layer. También ajusta las cantidades y valores restantes utilizados por el vacuum de stock negativo y las diferencias de precio de factura.

Depende de

stock_account

Lo necesitan otros módulos

Modelos y campos (8)
  • stock.lot · modelo nuevo
  • stock.move · amplía un modelo existente
  • stock.picking · amplía un modelo existente
  • product.product · modelo nuevo
  • stock.move.line · amplía un modelo existente
  • product.template · amplía un modelo existente
  • stock.valuation.layer · amplía un modelo existente
  • product.cost.price.avco.sync.mixin · modelo nuevo

Texto generado por IA (DeepSeek) al leer el código de la versión 18.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub

Disponibilidad por versión

Revisado: 2026-11-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado de confirmación: 7 confirmadas, 2 sin información de 9 versiones.

Fuentes · Odoo 18.0

Confirmado el 2026-11-03 en la rama 18.0 de OCA/stock-logistics-workflow.

terminal Instalación y uso

Documentación de OCA · Odoo 18.0

El módulo actúa sobre los productos cuya categoría utiliza el método de coste Average Cost (AVCO). Los productos valorados a precio estándar o FIFO no se modifican.

No es compatible con la valoración de inventario automatizada

Úsalo solo en categorías de producto cuya valoración de inventario sea manual.

Con la valoración automatizada, cada capa de valoración tiene un asiento contable publicado junto con ella. Este módulo reescribe la capa cuando se corrige un error pasado, y no toca ese asiento, que se publicó con las cifras que la capa tenía entonces y bien puede estar en un periodo ya cerrado. La valoración de existencias y la contabilidad se desviarían, en silencio, por el importe de cada corrección.

El objetivo de reexpresar el pasado es llegar a las empresas que publican la valoración de existencias periódicamente, desde el informe de valoración, en lugar de movimiento a movimiento. Las que la publican automáticamente ya tienen cada corrección contabilizada el día en que se hizo, que es lo que hace Odoo por sí solo y lo que espera su contabilidad.

Valoración por número de lote/serie

Ambos modelos son compatibles y pueden coexistir en la misma base de datos, por lo que marcar o desmarcar Valoración por número de lote/serie en un producto no requiere ningún cuidado especial desde el punto de vista de este módulo: las capas que ya tenía siguen reproduciéndose como la cadena que eran, y las nuevas se reproducen por lote.

Ten en cuenta que habilitarlo es una operación propia de Odoo, no de este módulo: vacía las existencias y las vuelve a introducir, dando a cada lote existente el coste medio actual del producto, porque el coste al que realmente se compró cada lote no se registra en ningún sitio antes de ese punto. Además, se niega a ejecutarse mientras algún lote tenga una cantidad negativa en una ubicación valorada.

Costes en destino y diferencias de precio en la factura de proveedor

Ambos añaden valor a una capa de recepción sin tocar su coste, y ambos leen la cantidad restante para saber cuánto queda todavía disponible. Se mantienen sincronizados: corregir el coste o la cantidad de una capa ajusta su valor restante por la diferencia, de modo que lo que un coste en destino o una factura le añadieron sobrevive a la corrección y las correcciones posteriores se valoran correctamente.

La corrección de un precio en la factura de proveedor está cubierta por purchase_stock_price_unit_sync, que la aplica a toda la recepción en lugar de solo a lo que queda disponible, por lo que esa vía acaba siendo equivalente a corregir la recepción o la capa.

Corregir un error

Hay cuatro formas de corregir una compra, y todas acaban en el mismo sitio: la capa se reexpresa como si siempre hubiera tenido las cifras corregidas, los movimientos de salida valorados en el intervalo se recalculan y el coste del producto, o del lote, sigue el mismo camino.

| Qué corriges | Dónde | Qué hace falta | |---|---|---| | El coste de una recepción | El unit_cost de su capa de valoración | Este módulo | | La cantidad de un movimiento realizado, de entrada o de salida | La cantidad de la línea del movimiento | Este módulo | | El precio de un pedido de compra ya recibido | La línea del pedido | purchase_stock_price_unit_sync | | El precio en la factura del proveedor | La línea de la factura | purchase_stock_price_unit_sync |

Corregir el mismo precio dos veces, primero en el pedido y luego en la factura, no lo cuenta dos veces: la segunda encuentra la capa ya con el valor que indica y no hace nada.

Forzarlo a mano

Para las ocasiones en que una corrección no pudo ejecutarse por sí sola, como capas escritas mientras este módulo no estaba instalado, la acción Recompute average cost from here está disponible en el menú Action de la lista de capas de valoración de existencias. Selecciona una o más capas y la cadena se reproduce desde cada una de ellas.

Solo se usa la capa más antigua de cada cadena de la selección, porque la reproducción corrige todo lo que viene después del punto de partida y el resto reharía el mismo trabajo. En un producto valorado por lote, cada lote es una cadena propia, por lo que se conserva la capa más antigua de cada lote.

Reproducir una cadena larga reescribe todas las capas posteriores al punto de partida, en una sola transacción. En un producto con cientos de miles de capas, empieza lo más tarde posible en la cadena según lo permita la corrección.

Qué ocurre con todo lo demás

Estos flujos no necesitan nada de ti y no se ven alterados por una corrección:

  • Costes en destino, aplicados antes o después de la corrección, y divididos por lote. Lo que añadieron a la capa no es coste de compra, por lo que sobrevive intacto y la corrección solo mueve el coste de la mercancía.
  • El asistente de revalorización de existencias. Lo que añade se reparte entre las unidades disponibles, igual que un coste en destino, por lo que el coste del producto sigue coincidiendo con el valor de sus capas.
  • Existencias negativas. Sin unidades restantes con las que promediar, una recepción fija el coste al precio realmente pagado, y el propio vacío de Odoo salda el déficit pendiente con ese mismo precio una vez que llega suficiente stock real. Corregir una recepción a la baja por debajo de lo que ya se había entregado registra el faltante como el déficit que busca el vacío, por lo que esas unidades también se recalculan. Ese faltante se registra en el último movimiento de salida de la cadena, que es donde habría quedado corto en orden cronológico, en lugar de en la entrega que se llevó cada unidad concreta. Reconstruir eso significaría reproducir el consumo hacia atrás, y no cambiaría nada: un coste medio se reparte sobre toda la cantidad, por lo que lo que importa es que el déficit exista y se salde, no a qué entrega esté asociado.
  • Los ajustes de inventario y las devoluciones se valoran al coste del momento en lugar de promediarse, y una corrección los recalcula junto con el resto.
  • Cambiar un producto a valoración por lote o desde ella, en cualquier momento. Las capas que ya tenía siguen reproduciéndose como la única cadena que eran.

Lo que queda en manos de Odoo

  • Los reembolsos de facturas de proveedor, que Odoo compensa contra la factura original con una lógica propia.
  • Las capas creadas directamente desde código, fuera de un movimiento de existencias y sin ejecutar el vacío de existencias negativas de Odoo, como podría hacer un módulo de terceros. No activan nada: usa la acción de servidor anterior si alguna vez una cadena lo necesita.
  • Los productos que no se valoran a coste medio, y la valoración de inventario automatizada, que no es compatible en absoluto. Consulta las notas de configuración.

Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación.

info

Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.