¿En qué podemos ayudarte?
← All Topics
You are here:
Imprimir

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:

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:

Table of Contents

Comienza tu Demo Gratuita

Te enviaremos a tu email los datos de acceso
Call Now Button LLAMAR AHORA