Errores
No se pueden desreservar las unidades reservadas
Para poder desbloquear un albarán que le ocurre este error, hay que correr un script. Si es la primera vez que ocurre esto, hay que crear el script siguiendo estos pasos:
Actualizado el 16 jun 2020
Para poder desbloquear un albarán que le ocurre este error, hay que correr un script. Si es la primera vez que ocurre esto, hay que crear el script siguiendo estos pasos:
https://erpcloud.id/blog/our-blog-1/post/it-is-not-possible-to-unreserve-more-products-of-9
1.debug mode
2.technical/server actions
3.create
4.action name: e.g. fix unreserved qty
5.model: ir.actions.server (Server Action)
6.action to do: «execute python code»
7.copy/paste the fix underneath the pre-existing code
===========================
quants = env[‘stock.quant’].search([]) move_line_ids = [] warning = » for quant in quants: move_lines = env[«stock.move.line»].search([ (‘product_id’, ‘=’, quant.product_id.id), (‘location_id’, ‘=’, quant.location_id.id), (‘lot_id’, ‘=’, quant.lot_id.id), (‘package_id’, ‘=’, quant.package_id.id), (‘owner_id’, ‘=’, quant.owner_id.id), (‘product_qty’, ‘!=’, 0) ]) move_line_ids += move_lines.ids reserved_on_move_lines = sum(move_lines.mapped(‘product_qty’)) move_line_str = str.join(‘, ‘, [str(move_line_id) for move_line_id in move_lines.ids])
if quant.location_id.should_bypass_reservation():
# If a quant is in a location that should bypass the reservation, its reserved_quantity field
# should be 0.
if quant.reserved_quantity != 0:
quant.write({‘reserved_quantity’: 0})
else:
# If a quant is in a reservable location, its reserved_quantity should be exactly the sum
# of the product_qty of all the partially_available / assigned move lines with the same
# characteristics.
if quant.reserved_quantity == 0:
if move_lines:
move_lines.with_context(bypass_reservation_update=True).write({‘product_uom_qty’: 0})
elif quant.reserved_quantity < 0:
quant.write({‘reserved_quantity’: 0})
if move_lines:
move_lines.with_context(bypass_reservation_update=True).write({‘product_uom_qty’: 0})
else:
if reserved_on_move_lines != quant.reserved_quantity:
move_lines.with_context(bypass_reservation_update=True).write({‘product_uom_qty’: 0})
quant.write({‘reserved_quantity’: 0})
else:
if any(move_line.product_qty < 0 for move_line in move_lines):
move_lines.with_context(bypass_reservation_update=True).write({‘product_uom_qty’: 0})
quant.write({‘reserved_quantity’: 0})
move_lines = env[‘stock.move.line’].search([ (‘product_id.type’, ‘=’, ‘product’), (‘product_qty’, ‘!=’, 0), (‘id’, ‘not in’, move_line_ids), ])
move_lines_to_unreserve = []
for move_line in move_lines: if not move_line.location_id.should_bypass_reservation(): move_lines_to_unreserve.append(move_line.id)
if len(move_lines_to_unreserve) > 1: env.cr.execute(«»» UPDATE stock_move_line SET product_uom_qty = 0, product_qty = 0 WHERE id in %s ;»»» % (tuple(move_lines_to_unreserve), )) elif len(move_lines_to_unreserve) == 1: env.cr.execute(«»» UPDATE stock_move_line SET product_uom_qty = 0, product_qty = 0 WHERE id = %s ;»»» % (move_lines_to_unreserve[0]))
============================
8.»save»
9.»create contextual action»
10.refresh page
11.action/fix «fix unreserved qty» / Run
12.wait for it to load
13.»remove contextual action»
14.action/delete
Si ya tenemos el script creado, simplemente accedemos al script y lo ejecutamos:

¿Sigue sin funcionar?
Escríbenos con una captura y el nombre de tu empresa; el soporte responde en horario laboral.