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

Обмен с 1С - выгрузка товаров и номенклатуры

Выгрузка каталога из 1С - самая частая задача обмена: 741 вопрос из собранных 2398 по интеграциям. Здесь собраны решения по ней.

Что общего у этих задач

Обмен товарами идёт по протоколу CommerceML: 1С складывает XML и картинки, сайт разбирает их скриптом /bitrix/admin/1c_exchange.php. Инициатор всегда 1С, сайт только принимает. Отсюда три следствия, которые объясняют почти все поломки.

Обмен идёт шагами, а не одним запросом. Большой каталог делится на пачки, и между пачками сайт возвращает управление 1С. Если PHP уронил процесс на середине, часть товаров уже в базе, а часть нет, и повторный запуск начнётся не с нуля.

Сопоставление идёт по внешнему коду, полю XML_ID. Товар, у которого код изменился, приезжает как новый, а старый остаётся висеть активным. Это же поле связывает разделы, свойства и торговые предложения.

Всё, что не пришло из 1С, обмен считает лишним. Правки, сделанные на сайте руками - переписанное название, дописанное описание, свои картинки - при следующей выгрузке затираются, если не поставить защиту.

Решения подтемы

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

Почему обмен идёт очень долго и обрывается?

Обмен пошаговый, и на каждый шаг действует ограничение времени PHP. Если пачка не успевает обработаться за max_execution_time, процесс обрывается на середине. Размер пачки задаётся в настройках модуля catalog, а не в 1С.

Можно ли запускать обмен по расписанию с сайта?

Нет. Инициатор обмена всегда 1С: она подключается к 1c_exchange.php и передаёт данные. Расписание настраивается в самой 1С, в узле обмена. Со стороны сайта запустить выгрузку нечем.

Что делать, если товары приехали дважды?

Значит у них разошёлся внешний код: сайт не нашёл совпадения по XML_ID и создал новые элементы. Так бывает после переноса базы 1С или смены узла обмена. Дубли ищут по совпадению названия при разных XML_ID.

Куда смотреть, если обмен завершился, а товаров нет?

В лог обмена: он лежит в /upload/1c_catalog/ рядом с полученными файлами. Там видно, какой шаг вернул ошибку. Пустой каталог при успешном обмене обычно означает, что товары приехали в другой инфоблок.

Связанные темы

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