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

Обмен с внешними системами ​

Раздел «Остатки» экспортирует и импортирует CSV. Конвертируйте выгрузку из учётной системы и загрузите через manager.

Экспорт ​

Кнопка Экспорт CSV отдаёт файл ms3remains-remains.csv с колонками:

КолонкаОписание
remain_idid строки остатка, ключ импорта
product_idid товара
product_nameназвание товара
variant_idid варианта ms3Variants или пусто
variant_skuартикул варианта или пусто
optionsJSON комбинации опций
quantityтекущее количество

Импорт ​

Диалог импорта CSV

Кнопка Импорт CSV открывает диалог:

  1. Вставьте текст CSV и при необходимости комментарий (например «Сверка поставки №123»).

  2. Нажмите Проверить файл. Таблица покажет текущее количество, новое и дельту. Ошибки формата выводятся списком по номерам строк.

  3. Применить импорт активна только если проверка прошла без ошибок (canCommit).

  • Ключ строки: существующий remain_id.
  • В первой строке файла обязательны колонки remain_id и quantity.
  • Без remain_id строка получает ошибку «Укажите remain_id существующей строки.»
  • Новую строку по product_id импорт не создаёт.
  • Если product_id заполнен и не равен товару этой строки, ошибка «product_id не совпадает с этой строкой остатка.», и файл не применяется.
  • Количество принимается дробным.
  • Пустое quantity: ошибка строки.
  • 0 обнуляет количество, строка остаётся.
  • То же число, что уже лежит в строке, импорт пропускает и setQuantity не вызывает.

Импорт меняет количество через setQuantity, поэтому срабатывают события и проекция, как при ручной правке.

Сервисный API ​

Для интеграции из PHP (плагины, cron-скрипты, свои импортёры) возьмите сервис ms3remains:

php
/** @var \Ms3Remains\Ms3Remains $ms3remains */
$ms3remains = $modx->services->get('ms3remains');

Пример: поставить остаток по товару и опциям.

php
use Ms3Remains\Identity\OptionsCanonicalizer;
use Ms3Remains\Identity\StockIdentityResolver;

$resolver = new StockIdentityResolver(
    new OptionsCanonicalizer(),
    $modx->services->get('ms3remains.ms3variants'),
);

$identity = $resolver->resolve($productId, ['color' => 'красный', 'size' => 'M'], null);
$ms3remains->remains()->setQuantity($identity, 15.0, 'import 1c', $modx->user->get('id'));

setQuantity ставит абсолютное значение, changeBy сдвигает на дельту. Оба пишут проекцию и вызывают события.

Остальные методы remains():

МетодНазначение
getQuantityТекущее количество строки
hasAnyForProductЕсть ли у товара хотя бы одна строка remains
listСписок по фильтру
listByProductСтроки одного товара

Кроме remains():

  • projection(): кроме rebuildBatch ещё projectProduct (один товар) и projectVariant (один вариант)
  • csv(): export, preview, commit
  • isEnabled(): читает ms3remains_enabled

Маршруты экрана manager (/api/mgr/ms3remains/*) требуют ms3remains_manage. Таблица: Права доступа.

CommerceBridge1C ​

Компонент считает CommerceBridge1C установленным, если в системных настройках есть ключ cb1c_enabled. Как именно тот пакет пишет msProductData.stock, в коде ms3Remains не видно.

Раздел «Настройки» показывает предупреждение при этом ключе. Чтобы проекция не спорила с внешней записью stock, загружайте остатки через CSV или сервисный API.