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.

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

Нет. Повтор не пишет второе списание: ключ (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. Пакет ставится выключенным.
  • Проверьте фрагменты MiniShop3: core/config/ms3.services.d/50-ms3remains.php и core/config/ms3.routes.d/manager/50-ms3remains.php.
  • Очистите кэш MODX.
  • Таблиц нет после установки: смотрите error log и переустановите пакет. Повтор миграций из репозитория пакета: composer migrate. Это не замена resolver с ModStore.

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

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

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

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

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

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