Odoo 19 · Shopify · Error de stock

Error force_qty al sincronizar pedidos de Shopify en Odoo 19: qué es y cómo se arregla

Si has migrado a Odoo 19 y tu conector de Shopify revienta al importar un pedido con un error de argumento inesperado «force_qty», estás en el sitio correcto. Aquí te explicamos la causa real, por qué no es culpa de tu configuración de stock y cómo se resuelve bien.

No es tu configTus rutas y almacenes están bien: el problema es el conector.
API cambiada en v19El core quitó el parámetro force_qty de _action_assign().
No toques el coreNada de monkey-patch a stock: hay que actualizar el conector.
Desbloqueo rápidoReserva el pedido a mano y el flujo deja de petar mientras tanto.
Traceback de Python en Odoo 19 al sincronizar un pedido de Shopify
TypeError en la v19_action_assign() ya no acepta force_qty. El conector aún lo pasa.

El error que ves en el log

Cuando Odoo 19 intenta procesar el pedido que llega de Shopify, el traceback acaba siempre en esta línea. Es el texto literal por el que probablemente has llegado hasta aquí:

TypeError: StockMove._action_assign() got an unexpected keyword argument 'force_qty'

No es aleatorio. Aparece siempre que un pedido toca la ruta de reserva forzada / parcial del conector. Si el pedido se reserva solo sin pasar por esa lógica, no falla; por eso a veces parece intermitente.

La causa real: el conector va por detrás de la API de Odoo 19

No es un misterio ni un bug de tu Odoo. Es un cambio de firma en el core que un conector antiguo todavía no ha asumido.

1 · force_qty desapareció del core

En Odoo 17 y 18, StockMove._action_assign() aceptaba un parámetro force_qty para forzar la reserva de una cantidad concreta. En Odoo 19 ese argumento se eliminó de la firma del método en el módulo stock.

2 · El conector aún llama a la antigua

Un conector de Shopify de terceros hecho para v17/18 sigue ejecutando _action_assign(force_qty=...). Python no encuentra ese argumento en la nueva firma y lanza el TypeError. Es código del conector, no de tu stock.

3 · Salta en la reserva forzada

El error aflora cuando el pedido entra en la ruta de reserva forzada o parcial del conector (típicamente al confirmar el pedido o crear el albarán). Por eso puedes tener pedidos que entran bien y otros que petan.

En una frase: tu Odoo 19 está correcto; el conector de Shopify aún habla el idioma de la v18. Mientras siga pasando force_qty, cualquier pedido que toque esa ruta seguirá petando.

Tres pasos, en el orden correcto

El orden importa: primero desbloqueas la operativa, luego aplicas el arreglo de fondo. Lo que no se debe hacer es parchear el core.

Paso 1 (definitivo) — Actualiza o sustituye el conector

El arreglo correcto es un conector realmente construido y probado sobre Odoo 19. El autor del módulo debe quitar el argumento force_qty: en la v19 la reserva se hace fijando la cantidad del movimiento y llamando a _action_assign() sin ese parámetro. Mientras el conector no haga ese cambio, el error volverá.

# Odoo <= 18 (el connector antic — lo que peta en la v19) move._action_assign(force_qty=qty) # Odoo 19 (firma correcta — sin force_qty) move.quantity = qty # se fija la cantidad en el move move._action_assign() # reserva sin el argumento eliminado

Paso 2 (regla de oro) — No parchees el core de stock

Es tentador hacer un monkey-patch y volver a meter force_qty en StockMove._action_assign(). No lo hagas. Reintroduces a mano una firma que Odoo eliminó a propósito, rompes en cada actualización menor y te quedas fuera de soporte. El problema es del conector; se arregla en el conector.

Paso 3 (parche temporal) — Reserva el pedido a mano

Para desbloquear ya un pedido atascado, ve al albarán en Odoo y resérvalo manualmente («Comprobar disponibilidad» / asigna las cantidades). Al reservarlo tú, el flujo no entra en la ruta de reserva forzada del conector y no se dispara la llamada con force_qty, así que el albarán avanza. Es un parche operativo mientras llega el conector actualizado.

Importante: el parche del paso 3 desbloquea pedidos uno a uno, pero no arregla la causa. Cada pedido nuevo que toque la reserva forzada volverá a petar hasta que el conector deje de pasar force_qty.

Un conector de Shopify construido y probado sobre Odoo 19

En FlexigoTech mantenemos un conector de Shopify para Odoo construido y probado sobre la versión 19. Reserva el stock con la API actual, sin force_qty, así que este TypeError no aparece. Cubre pedidos, productos y variantes, stock bidireccional, fulfilment y tracking, y se mantiene al día con cada versión de Odoo.

19construido para Odoo 19
2-waystock bidireccional
1programador directo

Quién hay detrás

No te vendemos ningún milagro. Somos un programador en Barcelona que desarrolla y da soporte directo del conector, sin reseller intermedio. Si tienes este error, lo podemos mirar y decirte si nuestro módulo te encaja o si lo mejor es arreglar tu conector actual. Respuesta técnica, no comercial.

Ficha en Odoo App StoreDesarrollo Odoo a medida

Si llegas por este error, esto también te interesa

Tanto si quieres un conector ya preparado para la v19 como si necesitas que alguien toque el tuyo, aquí tienes las rutas.

Preguntas frecuentes sobre el error force_qty

¿Es un fallo de mi configuración de stock o rutas en Odoo 19?

No. El error no depende de tus rutas, almacenes ni reglas de reabastecimiento. Lo provoca el conector de Shopify, que sigue llamando a _action_assign(force_qty=...) como en la v17/18. En Odoo 19 ese argumento ya no existe en el core, así que Python lanza el TypeError. Tu configuración de stock es correcta.

¿Puedo arreglarlo parcheando el core de stock de Odoo?

No es recomendable. Volver a meter force_qty en StockMove._action_assign() con un monkey-patch reintroduce a mano una firma que Odoo eliminó a propósito, rompe en cada actualización menor y deja la instalación fuera de soporte. El arreglo correcto es que el conector deje de pasar ese argumento. El core no se toca.

¿Cómo desbloqueo un pedido ya atascado sin esperar al parche?

Como solución temporal puedes reservar a mano el pedido afectado desde el albarán en Odoo («Comprobar disponibilidad» / asignar las cantidades). Al reservarlo manualmente, el flujo no entra en la ruta de asignación forzada del conector, así que no se dispara la llamada con force_qty y el albarán avanza. Es un parche operativo, no la solución de fondo: el conector sigue necesitando actualizarse a la API de Odoo 19.

¿Vuestro conector de Shopify para Odoo está construido para la versión 19?

Sí. El conector Shopify de FlexigoTech está construido y probado sobre Odoo 19, reservando stock con la API actual sin usar force_qty. Cubre pedidos, productos y variantes, stock bidireccional, fulfilment y tracking, y se mantiene al día con cada versión de Odoo. Lo desarrolla y soporta directamente un programador en Barcelona, sin reseller intermedio.

Tu Odoo 19 está bien. Lo que hay que actualizar es el conector.

Si tu conector de Shopify peta con force_qty, puedes pasar a nuestro módulo probado sobre la v19 o pedirnos que arreglemos el tuyo. Te lo decimos con criterio técnico, sin venderte humo.

Hablar con FlexigoTechVer el conector en la App Store