Перейти к содержимому

Не выгружаются цены и остатки из 1С - причины по убыванию частоты

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

Как проверить

Считаем, у скольких элементов вообще есть цена:

$total = CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId], []);
$priced = CPrice::GetList([], ['CATALOG_GROUP_ID' => $basePriceTypeId], []);
echo "элементов {$total}, строк цен {$priced}\n";
// расхождение чисел показывает, у скольких товаров цены нет вовсе

Ноль строк цен при непустом каталоге означает, что файл цен не разобрался вовсе. Частичное покрытие указывает на обрыв между файлами или на отбор в 1С.

Сверяем типы цен по внешнему коду:

$types = CCatalogGroup::GetList([], [], false, false, ['ID', 'NAME', 'XML_ID']);
while ($type = $types->Fetch()) {
printf("%3d %-22s xml_id=%s\n", $type['ID'], $type['NAME'],
$type['XML_ID'] ?: 'ПУСТО - обмен сюда не пишет');
}

Тип цены с пустым внешним кодом заведён на сайте руками. Обмен сопоставляет типы по коду, а не по названию, и в такой тип не попадёт никогда.

Причины

  1. У типа цены нет внешнего кода примерно 40% случаев

    ПризнакТовары приехали, строк цен ноль, в логе обмена ошибок нет.

    ПроверкаСмотрим XML_ID у всех типов цен сайта и сверяем с типами цен в выгрузке 1С.

    Что делатьПроставляем типу цены внешний код из 1С либо позволяем обмену завести свой тип и переносим на него витрину.

  2. Цены заданы у характеристик, а выгрузка предложений выключена примерно 30% случаев

    ПризнакУ товаров без характеристик цены есть, у товаров с характеристиками нет.

    ПроверкаОткрываем узел обмена 1С и смотрим признак выгрузки характеристик как торговых предложений.

    Что делатьВключаем выгрузку предложений: без неё цены характеристик приезжать некуда, инфоблок предложений пуст.

  3. Складов больше, чем позволяет редакция примерно 20% случаев

    ПризнакЦены есть, остатки нулевые, в логе строка про превышение количества складов.

    ПроверкаСчитаем склады в выгрузке 1С и сверяем с лимитом редакции продукта.

    Что делатьОставляем в выгрузке только рабочие склады либо переходим на редакцию с многоскладовым учётом.

  4. Сеанс оборвался между файлами примерно 10% случаев

    ПризнакЦены есть у части каталога, дальше по алфавиту пусто.

    ПроверкаЧитаем лог: какой файл разобран последним и на каком шаге остановился сеанс.

    Что делатьУменьшаем размер пачки и повторяем обмен: цены и остатки идут отдельными файлами после номенклатуры.

Если ничего не помогло

Смотрим, что вообще прислала 1С по ценам:

Окно терминала
# файл цен отдельный, его видно по имени и по узлам внутри
ls -l /home/bitrix/www/upload/1c_catalog/*.xml
grep -c '<Цены>' /home/bitrix/www/upload/1c_catalog/*.xml

Ноль узлов с ценами означает, что проблема на стороне 1С и до сайта цены не доехали. Непустой файл при пустых ценах на сайте указывает на сопоставление типов: разбор идёт, а класть значения некуда.

Смотрим, каким группам доступен наполненный тип цены:

$rights = CCatalogGroup::GetGroupsList(['CATALOG_GROUP_ID' => $basePriceTypeId]);
while ($row = $rights->Fetch()) {
printf("тип %d доступен группе %d на просмотр=%s\n",
$row['CATALOG_GROUP_ID'], $row['GROUP_ID'], $row['BUY'] === 'Y' ? 'и покупку' : 'только');
}

Тип цены без доступа для группы «все пользователи» наполнен, но невидим гостю: формально цена есть, а витрина показывает пустоту.

Частые вопросы

Почему цены выгрузились только при включённой галке про характеристики?

Значит цены в 1С заданы у характеристик номенклатуры, а не у самой номенклатуры. Без выгрузки характеристик торговых предложений на сайте нет, и цене некуда записаться.

Остатки по складам нулевые, а общий остаток есть.

Складской учёт и простое количество - разные механизмы. Остатки по складам приезжают отдельным узлом, и при превышении лимита складов обмен пишет только суммарное количество.

Можно ли выгрузить только цены, без товаров?

Да, 1С умеет присылать файл цен отдельно. Сопоставление идёт по внешним кодам товаров, поэтому сами товары должны быть на сайте заранее.

Цена приехала, но на витрине её нет.

Скорее всего показывается другой тип цены. Витрина берёт тип, доступный группе покупателя, а обмен мог записать в тип, доступный только администратору.

Смежное

Первоисточник