Остатки из 1С - сопоставление складов и приём количества
Настраиваем приём складских остатков из учётной системы и разбираемся, почему после обмена везде нули.
Решение
Сверяем склады сайта и их внешние коды:
use Bitrix\Main\Loader;
Loader::includeModule('catalog');$res = CCatalogStore::GetList([], [], false, false, ['ID', 'TITLE', 'XML_ID', 'ACTIVE']);while ($store = $res->Fetch()) { printf("%-5s %-24s код=%-20s активен=%s\n", $store['ID'], $store['TITLE'], $store['XML_ID'] ?: 'ПУСТО', $store['ACTIVE']);}Пустой внешний код у склада означает, что остатки для него приехать не смогут: учётная система присылает количество с кодом своего склада, а сопоставить его не с чем. Названия складов при сопоставлении не используются вообще никак.
Смотрим, что приехало в файле предложений:
# остатки лежат в том же файле, что и ценыgrep -c '<Количество>' /home/bitrix/www/upload/1c_catalog/offers*.xmlgrep -o '<Склад[^>]*>' /home/bitrix/www/upload/1c_catalog/offers*.xml | head -5# в узле склада стоит его код: он и должен совпасть с кодом склада на сайтеОтсутствие узлов с количеством в файле означает, что разбирать нужно выгрузку, а не приём. Сайт не придумывает остатки самостоятельно: он записывает ровно то, что пришло в файле.
Проверяем остатки товара после обмена:
$res = CCatalogStoreProduct::GetList([], ['PRODUCT_ID' => $productId], false, false, ['STORE_ID', 'AMOUNT']);while ($row = $res->Fetch()) { printf("склад %-5s остаток %s\n", $row['STORE_ID'], $row['AMOUNT']); // строки нет вовсе - пара «товар и склад» ни разу не приезжала}// отсутствие строк и строка с нулём - разные состоянияОтсутствие строки означает, что остаток по этому складу вообще никогда не приезжал. Строка с нулём означает, что учётная система прислала этот ноль осознанно: товар кончился на складе. Разница между двумя состояниями важна: в первом случае разбирают обмен, во втором - закупку.
Смотрим общее количество товара:
$product = CCatalogProduct::GetByID($productId);printf("количество=%s учёт по складам=%s\n", $product['QUANTITY'], COption::GetOptionString('catalog', 'default_use_store_control'));При включённом складском учёте общее количество складывается из остатков по складам и правке не поддаётся. При выключенном - приходит одним числом, и склады в обмене не участвуют вовсе.
Нулевые остатки при непустой выгрузке почти всегда упираются именно в коды складов. Это первое, что стоит проверять, и только потом смотреть настройки товара и права пользователя обмена.
Резерв под текущие заказы живёт на стороне сайта и в обмен не уезжает. Учётная система присылает физический остаток склада, а доступное к продаже количество сайт считает сам, вычитая из него зарезервированное.
Частота обмена остатками обычно отличается от частоты обмена самим каталогом. Остатки меняются постоянно, а структура каталога - редко, поэтому их обычно выгружают отдельным частым обменом только по файлу предложений.
Типичные проблемы
После обмена везде нулевые остатки.
Склады сайта не сопоставлены с чужими по внешнему коду. Количество приезжает с кодом незнакомого склада, и записать его попросту некуда.
Остатки не меняются вообще.
Файл предложений не выгружается либо обмен идёт только по каталогу. Остатки едут именно в файле предложений, а не в каталоге.
Общее количество не совпадает с суммой по складам.
Включён складской учёт, а общее количество правили руками. Оно пересчитывается из остатков по складам и ручную правку теряет.
Часть складов не получила остатков.
У этих складов пустой внешний код либо они помечены неактивными. Неактивный склад в обмене не участвует вовсе.
Остатки отстают от учётной системы на день.
Обмен остатками идёт вместе с полным каталогом раз в сутки. Остатки правильнее выгружать отдельным частым обменом.
Частые вопросы
Можно ли выгружать только остатки, без цен?
Они едут одним файлом предложений, и разделить их штатно нельзя. Отдельным обменом выгружают этот файл целиком - вместе с ценами.
Как часто обменивать остатки?
На магазине с быстрым оборотом - каждые несколько минут, на спокойном - раз в час. Ориентируются на то, как быстро товар кончается.
Что делать с товарами, которых нет ни на одном складе?
Их либо скрывают с витрины, либо показывают под заказ. Решение зависит от бизнеса, а не от техники: платформа умеет и то, и другое.
Почему количество на витрине больше реального?
На витрине показывается остаток без учёта резерва под текущие заказы. Доступное количество меньше складского на величину резерва.
Смежное
- Склады и остатки - оглавление подтемы
- Остаток товара не тот: разбор причин - почему правки на сайте не держатся
- Складские документы: приход, списание, перемещение, резерв - когда складом управляет сам сайт
- Склады и остатки: выгрузка, вывод наличия, фильтр по складу - как устроен складской учёт
- Не выгружаются цены и остатки из 1С - разбор причин
- Каталог и продажи - устройство магазина целиком
- Частичный обмен: выгрузка только изменений и её последствия - почему остатки приезжают не у всех позиций
- Резервирование товара: момент резерва, снятие, доступное количество - что обмену трогать нельзя
- Остатки по складам не обновляются: разбор причин - если склады не наполняются после обмена