Частичный обмен - выгрузка только изменений и её последствия
Разбираемся, почему после обмена приехала только часть каталога и в каких случаях это работа режима выгрузки, а не сбой.
Решение
Смотрим, что вообще приехало в файле:
ls -lh /home/bitrix/www/upload/1c_catalog/*.xmlgrep -c '<Товар>' /home/bitrix/www/upload/1c_catalog/import*.xmlgrep -c '<Предложение>' /home/bitrix/www/upload/1c_catalog/offers*.xml# десяток позиций в файле означает выгрузку изменений, а не сбой обменаСостав файла отвечает на главный вопрос сразу. Десяток позиций вместо тысяч - это режим выгрузки изменений, и разбирать в таком случае надо настройки учётной системы, а не сайт.
Проверяем, что сайт сделал с приехавшим:
printf("активных=%d всего=%d изменены сегодня=%d\n", CIBlockElement::GetList([], ['IBLOCK_ID' => 5, 'ACTIVE' => 'Y'], []), CIBlockElement::GetList([], ['IBLOCK_ID' => 5], []), CIBlockElement::GetList([], ['IBLOCK_ID' => 5, '>=TIMESTAMP_X' => date('d.m.Y')], []));// позиции вне файла обмена сайт не трогает: они остаются как былиПозиции, не попавшие в файл, сайт не трогает вовсе. Это и отличает частичный обмен от полного: он не знает, что стало с остальным каталогом, и потому ничего про него не решает.
Запускаем полную выгрузку заново:
rm -f /home/bitrix/www/upload/1c_catalog/*.xml# каталог обмена чистят перед полной выгрузкой, чтобы не смешать пачкиtail -f /home/bitrix/www/bitrix/modules/catalog/1c_exchange.logПолный обмен включается на стороне учётной системы: сайт запустить его не может. Чистка каталога обмена перед запуском убирает смешение старых и новых пачек, которое иначе выглядит как случайный набор приехавших товаров.
Сверяем итог с учётной системой:
$res = CIBlockElement::GetList(['TIMESTAMP_X' => 'DESC'], ['IBLOCK_ID' => 5], false, ['nTopCount' => 5], ['ID', 'NAME', 'TIMESTAMP_X', 'XML_ID']);while ($row = $res->Fetch()) { printf("%-40s %s\n", mb_substr($row['NAME'], 0, 40), $row['TIMESTAMP_X']);}Сверяют при этом числа, а не общие ощущения. Совпадение числа активных позиций с числом в учётной системе закрывает вопрос, расхождение показывает объём того, что до сайта не доехало.
Остатки в режиме изменений приезжают только у изменившихся за сеанс позиций. Товар, проданный вчера в магазине, но не тронутый в карточке номенклатуры, на сайте остаётся с прежним количеством до ближайшей полной выгрузки.
Товары без наличия часто не попадают в файл из-за отбора в учётной системе. Это настройка выгрузки, а не поведение сайта, и лечится она правкой отбора, а не настройками каталога.
Типичные проблемы
После обмена приехало десять товаров вместо тысяч.
В учётной системе включена выгрузка только изменений. В файл попадают лишь позиции, изменённые с прошлого сеанса обмена.
Остатки на сайте отстают от учётной системы.
Количество меняется продажами без правки карточки номенклатуры. При выгрузке изменений такие позиции в файл обмена не попадают.
Товаров без наличия нет на сайте вовсе.
Отбор в учётной системе исключает позиции без остатка. Настройка живёт в правилах выгрузки, а не в настройках сайта.
Удалённые в учётной системе товары остались активными.
Частичный обмен ничего не сообщает сайту об отсутствующих позициях. Снимает их только полная выгрузка с включённой деактивацией.
Полная выгрузка обрывается на середине.
Пачка не успевает обработаться за отведённое ей время. Размер пачки уменьшают в настройках модуля каталога.
Частые вопросы
Когда нужен полный обмен?
После правок структуры каталога, смены инфоблока и при расхождении числа позиций. В обычной работе достаточно выгрузки изменений.
Можно ли запустить полный обмен с сайта?
Нет, инициатор обмена всегда учётная система. Сайт только принимает то, что ему отдали.
Почему после полного обмена пропали правки контента?
Полная выгрузка переписывает поля, которыми управляет учётная система. Тексты, которые правят на сайте, держат в отдельных свойствах.
Как ускорить ежедневный обмен?
Оставить изменения ежедневными, а полную выгрузку делать по расписанию ночью. Полный обмен каждый час не нужен почти никогда.
Смежное
- Обмен каталогом с 1С - оглавление подтемы
- Выгрузка товаров из 1С на сайт: настройка, запуск и проверка - настройка обмена целиком
- Долгий обмен и обрывы: шаг, память, время выполнения - когда полная выгрузка не доходит до конца
- Деактивация товаров при обмене - что происходит с исчезнувшими позициями
- Обмен с 1С и HTTP - устройство обмена целиком
- Сверка каталога после обмена: числа, расхождения, отчёт - как убедиться, что приехало ожидаемое