Не выгружаются товары из 1С - причины по убыванию частоты
Обмен завершился без видимой ошибки, а на сайте товаров нет или приехала лишь часть каталога.
Как проверить
Смотрим лог обмена и ищем в нём строку отказа:
ls -lt /home/bitrix/www/upload/1c_catalog/ | headgrep -n 'FAILURE\|error\|Ошибка' /home/bitrix/www/upload/1c_catalog/*.log | tail -20Лог пишется на каждый сеанс. Пустой каталог при слове SUCCESS в логе означает,
что данные приехали, но легли не туда, куда смотрит витрина.
Считаем, сколько элементов реально в инфоблоке:
$total = CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId], []);$active = CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'], []);echo "всего {$total}, активных {$active}\n";Сверяем инфоблок, в который пишет обмен, с тем, что выводит витрина:
// тип каталога из узла обмена 1С хранится в настройках модуляecho COption::GetOptionString('catalog', '1C_IBLOCK_TYPE_ID'), "\n";
// инфоблоки этого типа: сюда обмен и складывает товары$list = CIBlock::GetList([], ['TYPE' => COption::GetOptionString('catalog', '1C_IBLOCK_TYPE_ID')]);while ($iblock = $list->Fetch()) { printf("%4d %-30s код=%s\n", $iblock['ID'], $iblock['NAME'], $iblock['CODE']);}Расхождение между этими числами сразу отделяет «не приехали» от «приехали, но неактивны»: во втором случае обмен отработал, а товары деактивированы.
Причины
-
Товары приехали в другой инфоблок примерно 40% случаев
ПризнакВ логе
SUCCESS, элементы в базе есть, но витрина пуста.ПроверкаСверяем идентификатор инфоблока в узле обмена 1С с тем, который выводит компонент каталога.
Что делатьПравим тип каталога в узле обмена 1С и повторяем выгрузку; лишний инфоблок удаляем после сверки.
-
Обмен оборвался по времени на середине примерно 30% случаев
ПризнакПриехала часть каталога, в логе последний шаг без пары, повтор начинается не с нуля.
ПроверкаСверяем
max_execution_timeв PHP с настройкамиimport_intervalиimport_sizeмодуля каталога.Что делатьУменьшаем число элементов за шаг, а не поднимаем лимит времени на весь сайт.
-
Нет прав на каталог загрузки примерно 20% случаев
ПризнакXML в
/upload/1c_catalog/не появляется или лежит нулевого размера.ПроверкаСмотрим владельца и права каталога, свободное место и
upload_max_filesize.Что делатьВозвращаем каталогу владельца веб-сервера и поднимаем предел размера загружаемого файла.
-
Товары отсечены фильтром на стороне 1С примерно 10% случаев
ПризнакПриехало ровно несколько позиций из сотен, лог чистый, ошибок нет.
ПроверкаОткрываем узел обмена в 1С и смотрим отбор номенклатуры и признак выгрузки на сайт.
Что делатьСнимаем отбор в 1С: со стороны сайта расширить состав выгрузки нечем.
Если ничего не помогло
Включаем подробный протокол обмена:
COption::SetOptionString('catalog', 'log_level', '3'); // 0 - выключен, 3 - подробныйВ подробном режиме лог называет каждый разобранный узел XML, а не только итог шага. Разрастается он быстро, поэтому уровень возвращают обратно сразу после разбора.
Проверяем каталог загрузки и место на диске:
ls -ld /home/bitrix/www/upload/1c_catalog/ # владелец должен быть веб-серверdf -h /home/bitrix/www/upload # обмен молча падает при нехватке местаphp -r 'echo ini_get("upload_max_filesize"), " ", ini_get("post_max_size"), "\n";'Смотрим, дошла ли 1С до сайта вообще:
grep '1c_exchange' /var/log/nginx/access.log | tail -20Каждый сеанс обмена оставляет серию запросов с параметрами type=catalog и
mode=checkauth, init, file, import. Пустой вывод означает, что проблема
до сайта не дошла: неверный адрес узла, авторизация или закрытый по IP доступ.
Код 401 в ответе на checkauth - пароль пользователя обмена, код 403 - права
этого пользователя на обмен.
Частые вопросы
Почему обмен пишет SUCCESS, но товаров нет?
Обмен отчитывается об успешном разборе файла, а не о том, что витрина показывает товары. Чаще всего элементы легли в другой инфоблок, реже - приехали неактивными. Обе версии проверяются одним запросом к базе по идентификатору инфоблока.
Выгружается 7 товаров из 700, что смотреть первым?
Отбор в узле обмена 1С. Такое соотношение почти всегда означает фильтр по признаку выгрузки на сайт, а не поломку: при обрыве по времени приезжает не десяток позиций, а заметная доля каталога.
Товары приехали, но без цен и остатков.
Цены и остатки идут отдельными файлами после номенклатуры. Если обмен оборвался между файлами, товары уже есть, а цены нет. В логе видно, какой файл разобран последним.
Помогает ли повторный запуск обмена?
Только при обрыве по времени, и то частично: обмен продолжит с прерванного места, но пачку, на которой упал, разберёт заново. При неверном узле или отборе в 1С повтор даст тот же результат.
Смежное
- Обмен: выгрузка товаров и номенклатуры - оглавление подтемы
- Выгрузка товаров из 1С на сайт - как настроить обмен правильно
- Обмен с 1С и HTTP - устройство обмена целиком
- Не выгружаются картинки из 1С - когда товары есть, а изображений нет
- Настройка обмена с 1С: точка обмена, доступ, порядок шагов - проверка доступа к точке обмена
- Долгий обмен и обрывы: шаг, память, время выполнения - когда приезжает только часть каталога
- Журнал обмена: как читать и что означают его сообщения - откуда берутся строки для разбора
- Не выгружаются характеристики из 1С: торговые предложения после обмена - когда товары есть, а размеров нет
- 1С не может прочитать ответ сайта: разбор причин - когда сеанс не начинается вовсе