You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 2.4.2后台编辑订单提示‘请求数量不可用’问题求助

解决Magento 2.4.2后台编辑订单时零库存商品阻止编辑的问题

问题核心

Magento 2.4.2默认逻辑中,只要订单内存在可售数量为0且订单项数量为1的商品,管理员后台编辑订单时会直接触发“请求数量不可用”错误,导致无法修改订单的任何内容(哪怕只是改备注、地址)。我们需要调整验证逻辑:仅当主动修改该零库存商品的数量时才触发库存校验,其他编辑操作允许正常保存。

解决方案

通过重写核心验证类+调整前端校验逻辑实现,全程使用自定义模块避免修改核心代码:

1. 创建自定义模块(Vendor_OrderEditFix)

先搭建基础模块结构:

registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_OrderEditFix',
    __DIR__
);

etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_OrderEditFix" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Sales"/>
            <module name="Magento_CatalogInventory"/>
        </sequence>
    </module>
</config>

2. 重写后端库存验证类

核心修改:仅当订单项数量被修改时,才执行库存校验。

etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Sales\Model\Order\Item\Validator\Quantity" type="Vendor\OrderEditFix\Model\Order\Item\Validator\Quantity"/>
</config>

Model/Order/Item/Validator/Quantity.php

<?php
namespace Vendor\OrderEditFix\Model\Order\Item\Validator;

use Magento\CatalogInventory\Api\StockRegistryInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Sales\Model\Order\Item;

class Quantity extends \Magento\Sales\Model\Order\Item\Validator\Quantity
{
    private $stockRegistry;

    public function __construct(StockRegistryInterface $stockRegistry)
    {
        $this->stockRegistry = $stockRegistry;
        parent::__construct($stockRegistry);
    }

    public function validate(Item $item)
    {
        // 获取原始订单中的商品数量
        $originalQty = $item->getOrigData('qty_ordered');
        $newQty = $item->getQtyOrdered();

        // 数量未修改时,跳过库存校验
        if ($originalQty == $newQty) {
            return;
        }

        // 数量修改后,执行原生库存校验逻辑
        parent::validate($item);
    }
}

3. 调整前端实时校验逻辑

后台编辑订单时前端会实时检查库存,需要同步修改该逻辑:

view/adminhtml/requirejs-config.js

var config = {
    map: {
        '*': {
            'Magento_Sales/js/order/create/form': 'Vendor_OrderEditFix/js/order/create/form'
        }
    }
};

view/adminhtml/web/js/order/create/form.js

define([
    'Magento_Sales/js/order/create/form'
], function (originalForm) {
    'use strict';

    return originalForm.extend({
        checkQtyAvailability: function (item) {
            var originalQty = item.qty_ordered;
            var newQty = parseFloat(item.qty);

            // 数量未变化时,跳过前端库存检查
            if (originalQty === newQty) {
                return;
            }

            // 执行原生前端校验逻辑
            this._super(item);
        }
    });
});

4. 部署模块并清理缓存

执行以下命令使修改生效:

bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush

验证场景

  • ✅ 不修改零库存商品数量,仅编辑订单备注、收货地址等信息,可正常保存
  • ✅ 尝试修改零库存商品的数量时,会触发“请求数量不可用”错误,阻止保存
  • ✅ 修改其他有库存商品的数量,正常执行库存校验

内容的提问来源于stack exchange,提问作者Anjaly K V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:01:22