Skip to content
ms3Remains
Остатки товаров MiniShop3 по комбинациям опций
  • MODX 3
  • PHP 8.2
  • miniShop3
  • Vue 3
  1. Компоненты
  2. ms3Remains
  3. FAQ

FAQ

Можно ли вести остатки без опций?

Да, если у товара нет опций, которые покупатель кладёт в корзину. Оставьте ms3remains_option_keys пустым и сохраните базовую строку на вкладке Остатки.

Пустое поле не значит «игнорировать опции». В корзине тогда в расчёт остатка войдут все опции, которые передал покупатель. На вкладке при этом не строятся комбинации, только база и варианты. Для каталога с цветом и размером укажите ключи явно. См. Системные настройки.

Товар продаётся без ограничений, хотя остаток нулевой

Проверьте, что у товара есть сохранённая строка остатка. Нулевой остаток и отсутствие строки — разные состояния: первое блокирует продажу, второе делает товар неотслеживаемым. Задайте остаток во вкладке Остатки, пусть даже 0.

На вкладке нет комбинаций цвета и размера

Проверьте ms3remains_option_keys. Пустой список не строит декартовы комбинации. Ключи должны совпадать с ключами опций товара, а значения — быть заполнены в msProductOption. Сетка обрезается после 200 комбинаций.

Остаток списался дважды

Чаще всего это конфликт с ms3Variants: у него включено собственное списание. Откройте раздел Настройки, там будет предупреждение и кнопка Отключить списание в ms3Variants. Второй источник — ms3_inventory_enabled = 1. Оставьте его в 0. Подробности: ms3Variants.

Заказ перевели в статус списания повторно. Списание удвоится?

Нет. Списание фиксируется в ms3remains_order_deductions по ключу (order_id, order_product_id, status_id). Повтор в тот же статус пропускается.

«Сохранить» на вкладке остановилось на середине

Цикл «сохранить все» прерывается на первой ошибке. Исправьте сообщение над таблицей и нажмите Сохранить ещё раз. Уже записанные строки не откатываются.

Как массово загрузить остатки из 1С?

Через CSV-импорт в разделе Остатки или через сервисный API из кастомного скрипта. Оба пути описаны в Обмене с внешними системами.

Почему в списке товаров остаток устарел?

Вы выводите точный остаток сниппетом в кэшированном шаблоне. Вызывайте сниппет некэшируемым или используйте проекцию [[+stock]]. Рецепты: Остатки.

Если вы только что записали то же число, что уже лежало в строке, сумма в поле stock товара всё равно пересчитывается. Так после первого сохранения нуля в каталоге не останется старое значение.

Как скрыть нулевые значения опций на карточке?

Один вызов:

fenom
{'!ms3Remains' | snippet : ['id' => $id, 'return' => 'options']}
modx
[[!ms3Remains? &id=`[[+id]]` &return=`options`]]

В чанке или JS не рендерите значения с количеством 0. Рецепт: Остатки.

Как скрыть от покупателей точное число?

Включите ms3remains_hide_quantity для вывода «В наличии / Нет в наличии» или задайте ms3remains_moreless_count для порога «Много».

Поддерживаются ли дробные количества?

Да. Количество хранится как DECIMAL(12,3). В manager поле принимает до трёх знаков после запятой.

Где журнал изменений остатка?

Его нет по дизайну. Повесьте плагин на ms3remainsOnAfterRemainChange и пишите в свой журнал. Если setQuantity ставит то же число, что уже в строке, событие не вызывается. Пример: События.

Диагностика

Компонент не работает после установки

  • Проверьте ms3remains_enabled = true. Пакет ставится выключенным.
  • Проверьте dropin-фрагменты: core/config/ms3.services.d/50-ms3remains.php и core/config/ms3.routes.d/manager/50-ms3remains.php.
  • Очистите кэш MODX.

Статус заказа не списывает остаток

  • Проверьте ms3remains_enabled = true и что статус входит в ms3remains_deduct_statuses.
  • Проверьте, что у товара есть строка остатка. Неотслеживаемые товары пропускаются.
  • Прямое $order->set('status_id')->save() не поддерживается. Смена статуса должна идти через OrderStatusService MiniShop3.
  • Если смена статуса блокируется с сообщением о нехватке или конфликте ms3Variants, срабатывает проверка до сохранения на msOnBeforeChangeOrderStatus (см. События).

Проекция разъехалась

Нажмите Перестроить в карточке «Проекция в каталог» раздела Настройки или вызовите POST /api/mgr/ms3remains/sync/rebuild.

Корзина смотрит не ту строку остатка, что на вкладке

Проверьте ms3remains_option_keys. Пустой список не строит комбинации на вкладке, но все опции из корзины участвуют в подборе строки остатка. Укажите ключи явно.