Выгрузка каталога — самая частая и самая нагруженная часть обмена с 1С. От того, как она настроена, зависят актуальность цен, точность остатков и стабильность работы витрины. Разберём, как устроена выгрузка товаров, цен и остатков в 1С-Битрикс, где типовые узкие места и как держать данные под контролем.
Как устроена выгрузка каталога
Обмен каталогом идёт по протоколу CommerceML 2: 1С формирует XML-файлы и передаёт их на сайт по HTTP на скрипт /bitrix/admin/1c_exchange.php. Выгрузка логически делится на два потока:
- Каталог (import.xml) — номенклатура, свойства, разделы, картинки, характеристики (торговые предложения);
- Предложения (offers.xml) — цены и остатки по каждому товару и торговому предложению.
Такое разделение сделано намеренно: тяжёлый каталог со свойствами и изображениями меняется редко, а цены и остатки — часто. Поэтому на практике полную выгрузку каталога запускают по расписанию (например, ночью), а цены и остатки гоняют небольшими пакетами каждые 10–15 минут.
catalog совместно с sale. Товары попадают в инфоблок каталога, а цены и остатки — в служебные таблицы модуля торгового каталога.Выгрузка товаров и структуры каталога
В файле import.xml передаются сами товары, дерево групп (разделов), свойства и значения справочников. Ключевой момент — внешний код (XML_ID): 1С сопоставляет свои элементы с элементами инфоблока именно по нему, а не по названию. Если XML_ID теряется или меняется, товар задваивается или создаётся заново.
При первой выгрузке в Битриксе автоматически создаётся инфоблок каталога с типом 1c_catalog и настраивается привязка свойств. В настройках обмена (Магазин → Настройки → Настройки товарного каталога → Интеграция с 1С либо мастер импорта) задаются:
- инфоблок-приёмник и группа товаров по умолчанию;
- деактивация товаров, отсутствующих в выгрузке (снятие с публикации, а не удаление);
- количество элементов в одном шаге импорта.
Цены: типы цен и сопоставление
Цены выгружаются в offers.xml внутри пакета предложений. В 1С может быть несколько типов цен (розница, опт, для дилеров), и каждому нужно сопоставить свой тип цены на сайте в модуле торгового каталога (Магазин → Настройки → Типы цен).
| В 1С | На сайте (Битрикс) | Кому показывать |
|---|---|---|
| Розничная | BASE / Розница | всем покупателям |
| Оптовая | OPT | группе «Оптовики» |
| Дилерская | DEALER | группе «Дилеры» |
Сопоставление задаётся один раз при настройке обмена. Если тип цены из 1С не сопоставлен, цена просто не запишется — товар окажется «без цены» и выпадет из продажи. Права на просмотр каждого типа цены назначаются группам пользователей, поэтому опт не виден рознице. Подробнее — в отдельных статьях о соответствии и нескольких типах цен.
Остатки и склады
Остатки передаются в том же пакете предложений — как общее количество либо в разрезе складов. Складской учёт на сайте включается в настройках торгового каталога (использовать складской учёт). Тогда 1С выгружает остатки по каждому складу, а их нужно сопоставить со складами сайта.
- Без складского учёта Битрикс хранит одно число — суммарный доступный остаток (поле
CATALOG_QUANTITY). - Со складским учётом остаток раскладывается по складам, и можно показывать наличие в конкретной точке или городе.
Важно решить, кто управляет остатками. Обычно источник истины — 1С, а сайт только отображает цифры и списывает резерв при заказе. При этом стоит учитывать резервы: если сайт резервирует товар под неоплаченный заказ, а 1С выгружает «свободный» остаток без учёта этого резерва, возможны пересортица и продажи «в минус».
Регламент и объём выгрузки
Обмен запускается тремя способами: вручную из 1С (кнопка «Обменяться с сайтом»), по расписанию средствами 1С (регламентное задание) или инициируется со стороны сайта агентом. Правильный подход — разделить потоки по частоте:
- Полный каталог — раз в сутки, в часы низкой нагрузки;
- Цены и остатки — короткими пакетами каждые 10–15 минут;
- Изображения — вместе с каталогом либо отдельным редким заданием.
В 1С в узле обмена настраивается Количество элементов в одном пакете данных и режим пошаговой выгрузки. Дробление на пакеты защищает и 1С, и сайт от таймаутов на больших каталогах: каждый HTTP-запрос обрабатывает свою порцию и укладывается в лимит max_execution_time.
Ускорение и снижение нагрузки
На каталогах от десятков тысяч позиций выгрузка становится узким местом. Что помогает:
- уменьшить размер пакета в 1С, если приёмный шаг падает по памяти или таймауту;
- увеличить на сайте
memory_limitиmax_execution_timeдля скрипта обмена; - отключить лишние действия при импорте (переиндексацию, отправку уведомлений) на время выгрузки;
- выгружать только изменения, а не весь каталог — 1С умеет формировать выгрузку по изменённым объектам;
- вынести тяжёлую полную выгрузку в ночь, оставив днём лёгкий поток цен и остатков.
Отдельная тема — планы обмена и выгрузка «по изменениям» через регистрацию объектов на узле. Это радикально сокращает объём данных, но требует аккуратной настройки на стороне 1С.
Контроль корректности данных
После настройки выгрузку нужно проверить не «на глаз», а по контрольным точкам:
- совпадает количество активных товаров в 1С и в инфоблоке каталога;
- у всех товаров проставлены цены нужных типов, нет позиций «без цены»;
- остатки соответствуют 1С, резервы не задваиваются;
- в логе обмена нет ошибок и незавершённых сессий.
Ход обмена и ошибки видно в файле /bitrix/admin/1c_exchange.php при отладке, в журнале событий Битрикса и в служебной папке выгрузки /upload/1c_catalog/ (или /upload/1c_exchange/), где остаются XML-файлы сессии. Разбор этих XML — быстрый способ понять, что именно 1С отдала, а что сайт не принял.
Итог
Надёжная выгрузка из 1С — это разделённые по частоте потоки (каталог отдельно, цены и остатки отдельно), корректно сопоставленные типы цен и склады, устойчивый к таймаутам пакетный режим и регулярный контроль по контрольным точкам. Ошибки чаще всего сводятся к потерянным XML_ID, несопоставленным типам цен и слишком тяжёлой полной выгрузке.
Если каталог большой, а обмен «спотыкается» или расходится с 1С, мы в B2Bsite настраиваем интеграцию под ваши процессы: сопоставляем цены и склады, оптимизируем регламент и берём обмен на сопровождение, чтобы данные на витрине всегда были актуальными.
Частые вопросы
Почему товар выгрузился, но продаётся без цены?
Скорее всего, тип цены из 1С не сопоставлен с типом цены на сайте. Проверьте соответствие типов цен в настройках обмена — если тип не сопоставлен, цена не записывается.
Как часто выгружать цены и остатки?
Оптимально — каждые 10–15 минут короткими пакетами, отдельно от тяжёлого каталога. Полную выгрузку каталога достаточно делать раз в сутки в часы низкой нагрузки.
Что происходит с товарами, которых больше нет в выгрузке?
В настройках обмена лучше включить деактивацию, а не удаление. Тогда исчезнувшие из 1С позиции снимаются с публикации, но сохраняют ссылки, историю заказов и SEO-адреса.
Почему после выгрузки задвоились товары?
Обычно причина в потере или смене внешнего кода XML_ID: сопоставление идёт по нему, и при его изменении Битрикс создаёт новый элемент вместо обновления существующего.
Можно ли выгружать остатки по нескольким складам?
Да, если включить складской учёт в настройках торгового каталога и сопоставить склады 1С со складами сайта. Тогда наличие можно показывать в разрезе точек или городов.
Выгрузка большого каталога падает по таймауту — что делать?
Уменьшите размер пакета в 1С и включите пошаговый режим, а на сайте поднимите memory_limit и max_execution_time для скрипта обмена. Дополнительно помогает выгрузка только изменений.
Где посмотреть, что именно передала 1С?
XML-файлы сессии остаются в служебной папке выгрузки на сайте (например, /upload/1c_catalog/). Их разбор показывает фактический состав данных, отданных из 1С.
Кто должен быть источником остатков — сайт или 1С?
Как правило, источник истины — 1С, а сайт отображает остатки и резервирует товар под заказ. Важно согласовать учёт резервов, чтобы не было продаж «в минус».
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.