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

Ночная полная выгрузка из 1С в Битрикс работает месяцами, а потом перестаёт укладываться в окно. Цены на сайте отстают от учёта, а один обрыв связи оставляет часть каталога деактивированной. Поднять max_execution_time и перезапустить обмен помогает один раз. Дальше нужны другая схема запуска и несколько защитных настроек. Ориентируемся на «1С-Битрикс: Управление сайтом» 23.x и новее, модуль catalog, формат CommerceML 2.x. Названия пунктов меню в 1С и в админке различаются между релизами, сверяйтесь со своей версией.
Как идёт обмен каталогом
1С обращается к скрипту /bitrix/admin/1c_exchange.php и проходит протокол по шагам. На каждом шаге ошибка выглядит по-своему, поэтому порядок стоит знать.
- checkauth: 1С передаёт логин и пароль, сайт отвечает success и данными сессии либо failure.
- init: сайт сообщает, принимает ли он zip (строка zip=yes или zip=no), и максимальный размер части файла (file_limit).
- file: 1С загружает файлы кусками во временную папку, обычно это /upload/1c_catalog/.
- import: Битрикс разбирает import.xml и offers.xml шагами. Пока в ответе progress, 1С вызывает import снова. Ответ success означает конец.
Лимиты размера бьют по file и init, лимиты времени по import. Чинятся они в разных местах.
Пояснение: CommerceML это XML-формат обмена коммерческими данными, который использует 1С. Товар приходит в нём с идентификатором (GUID), а Битрикс сохраняет его в XML_ID элемента инфоблока. По XML_ID сайт решает, обновить товар или создать новый.
Три схемы запуска и их цена
Очевидное решение, выгружать всё и всегда, проходит, пока каталог мал. Когда он растёт, выбирать приходится из трёх схем.
| Схема | Что выигрываете | Чем платите |
|---|---|---|
| Полная выгрузка раз в сутки | Одно расписание. После успешного прогона сайт совпадает с 1С | Время и нагрузка растут вместе с каталогом, цены отстают до суток, обрыв посреди выгрузки оставляет сайт в промежуточном состоянии |
| Только изменения | Короткий обмен, можно запускать часто | Пропущенный пакет даёт расхождение, которое долго не замечают. Нужна периодическая полная сверка |
| Каталог редко, остатки и цены часто | Структура и описания не перегружаются, остатки свежие | Два расписания. Нужна поддержка отдельных файлов остатков и цен в вашей конфигурации 1С и версии модуля catalog |
Ловушка схемы «только изменения»
В файле CommerceML есть признак СодержитТолькоИзменения. Если в настройках сайта включено действие «деактивировать товары, которых нет в файле», а пакет неполный, под удар попадает весь остальной каталог. Насколько Битрикс опирается на этот признак в вашей версии, проверяйте на копии сайта: выгрузите пакет из двух-трёх товаров и посмотрите, что стало с остальными.
Повторный запуск обмена должен быть безопасным. Если после обрыва страшно нажать кнопку ещё раз, схема выстроена неверно.
Настройки на стороне сайта
| Что | Где | Эффект |
|---|---|---|
| Интервал шага импорта | Параметры компонента bitrix:catalog.import.1c | Короче шаг: меньше обрывов по времени, но дольше обмен целиком |
| Размер части файла | Значение file_limit из ответа init, потолок задают upload_max_filesize и post_max_size в PHP | Больше часть: меньше запросов, но выше риск упереться в лимит |
| Действие с товарами, которых нет в файле | Параметры того же компонента | Для неполных пакетов выбирайте вариант «ничего не делать» |
| Пользователь обмена | Отдельная группа с правами на инфоблок каталога | Пароль хранится в настройках 1С, поэтому администратора там быть не должно |
Лимиты PHP задайте в php.ini или в панели хостинга. Значения для примера, подбирайте под размер ваших файлов. Время одного запроса при пошаговом импорте ограничивает интервал шага, поэтому огромный max_execution_time не нужен.
; Размер части файла и тела запроса
upload_max_filesize = 64M
post_max_size = 64M
; Запас на один шаг импорта
max_execution_time = 120Проверка протокола вручную
Когда 1С пишет только «ошибка обмена», пройдите первые шаги сами. Так видно, на чём именно сервер отвечает не то.
# Шаг 1. Авторизация. Ответ начинается со слова success или failure
curl -i -u 'exchange_user:YOUR_PASSWORD' 'https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth'
# Шаг 2. Параметры обмена. В ответе ищите строки zip=... и file_limit=...
curl -b 'PHPSESSID=YOUR_SESSION_ID' 'https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=init'Имя cookie и идентификатор сессии берите из ответа первого запроса, имя может отличаться от PHPSESSID. Если пароль верный, а ответ failure, смотрите следующий раздел.
Когда что выбирать
- Полная ночная выгрузка укладывается в окно с запасом хотя бы вдвое, цены меняются раз в сутки: оставьте её, усложнять нечего.
- Выгрузка занимает почти всё окно или цены нужны свежее, чем раз в сутки: переходите на изменения и добавьте полную сверку в тихое время, например раз в неделю.
- Остатки критичны (дефицитный товар, несколько каналов продаж): вынесите остатки и цены в частую отдельную выгрузку, а каталог оставьте на ночь.
Что ломается
- Дубли товаров. Товар создан на сайте вручную или инфоблок пересоздан, и XML_ID не совпадает с GUID из 1С. Каталог на сайте руками не наполняйте.
- Часть витрины исчезла. Неполный пакет плюс включённая деактивация отсутствующих товаров, см. выше.
- checkauth отвечает failure при верном пароле. При PHP как CGI или FastCGI заголовок Authorization может не доходить до скрипта. В Apache обычно помогает правило в .htaccess в корне сайта, для Nginx смотрите документацию своего окружения:
RewriteEngine On RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}] - Обрыв на шаге file. Часть файла больше upload_max_filesize или post_max_size. Уменьшите размер части в настройках 1С либо поднимите лимиты.
- Обмен висит на import. Шаг не укладывается в лимит времени. Уменьшите интервал шага и проверьте, не запущен ли другой обмен параллельно.
Что делать дальше
Прежде чем менять схему, снимите три замера на копии сайта: длительность этапов file и import, задержку между правкой цены в 1С и появлением на сайте, нагрузку на базу во время import. Без замеров выбирать схему не на чем. Затем настройте оповещение, если обмен не дошёл до success к нужному часу, и раз в неделю сверяйте число активных товаров в 1С и на сайте. Обмен заказами и статусами здесь не разбирали, это отдельная тема.
Инфографика для маркетплейса: Три главных преимущества товара короткими фразами, выноски в безопасной зоне превью, точный размер площадки.
Спросить за 60 ₽Источники: Документация 1С-Битрикс для разработчиков, Стандарт CommerceML на сайте фирмы 1С (раздел о стандартах обмена данными)
Частые вопросы
Что делать, если обмен оборвался посреди import?
А если у меня другая версия Битрикса или другая конфигурация 1С?
Почему после обмена появились дубли товаров?
Можно ли запускать обмен каждые несколько минут?
Что происходит с кешем и умным фильтром после обмена?
Как защитить 1c_exchange.php, если он открыт в интернете?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.