Как объединить выгрузку номенклатуры из 1С в Битрикс в один файл и убрать разделение на папки?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Торговля и дистрибуция
← На главную

При настройке стандартного обмена между конфигурацией «1С:Комплексная автоматизация 2» (КА 2) и сайтом под управлением «1С-Битрикс» специалисты часто сталкиваются со специфическим поведением системы: выгружаемый каталог товаров автоматически разбивается на множество папок (например, от 1 до 15 и более), в каждой из которых создаются обособленные файлы import.xml и offers.xml.

Такое поведение может вызывать неудобства, особенно если необходимо получить один целостный файл выгрузки для отладки или если принимающая сторона (сайт) некорректно обрабатывает пакетную загрузку. В этой статье мы подробно разберем, почему модуль обмена «Битрикс» так дробит информацию, как устроен этот механизм изнутри и как перенастроить систему, чтобы выгрузка формировалась в виде единого файла.

Для начала важно понять, что за дробление выгрузки отвечают два абсолютно независимых друг от друга механизма: логическое разделение на пакеты данных (настраивается в 1С) и физическое разделение передаваемого файла на фрагменты при HTTP-транспортировке (настраивается на стороне сайта).

---

Часть 1. Логическое разделение: убираем папки «1», «2», «3» в 1С

Если при выгрузке в локальный каталог или на сайт вы видите структуру папок вида /1/import.xml, /2/import.xml и так далее, это означает, что сработал механизм логического разделения пакетов в 1С.

Этот функционал предназначен для того, чтобы не генерировать один огромный XML-файл объемом в сотни мегабайт, который веб-сервер сайта просто не сможет обработать из-за ограничений на оперативную память или максимальное время выполнения PHP-скриптов. По умолчанию модуль обмена «Битрикс» настроен на генерацию небольших «порций» данных.

Рассмотрим по шагам, как отключить это разделение и заставить модуль выгружать всё в один файл:

  1. Откроем 1С:Комплексная автоматизация 2 и перейдем в раздел настроек интеграции с сайтом.
  2. Найдем нужный узел обмена и откроем его форму настроек.
  3. Перейдем на вкладку «Настройки выгрузки товаров» (в зависимости от версии модуля вкладка может называться «Обмен товарами»).
  4. Найдем подвкладку «Товары».
  5. Обратим внимание на числовое поле «Количество товаров в пакете». По умолчанию там обычно стоит значение 1000 или 2000. Это означает, что как только модуль набирает указанное количество номенклатурных позиций, он закрывает текущий файл import.xml, создает новую папку и начинает писать следующий пакет.
  6. Чтобы отключить разделение, установим в этом поле значение 0 или полностью очистим его. Это укажет модулю обмена, что весь массив номенклатуры должен быть сформирован в рамках одного единственного пакета.
  7. Сохраним настройки узла обмена.

Важное предупреждение: если после изменения настройки в 1С при первой выгрузке файлы всё равно разбились по папкам, это указывает на то, что в системе осталась старая зарегистрированная к выгрузке информация. Для исправления этой ситуации выполните следующие действия:

  1. Откройте форму регистрации изменений для узла обмена.
  2. Полностью очистите зарегистрированные изменения для объектов выгрузки.
  3. Зарегистрируйте товары заново либо запустите полную (а не изменениями) выгрузку товаров.

---

Часть 2. Физическое разделение: ОграничениеРазмераФрагментаФайлаОбмена

Иногда разработчики пытаются найти жестко заданные лимиты размеров файлов непосредственно в программном коде 1С. В более старых конфигурациях (например, на обычных формах в КА 1.1) за это отвечали процедуры модуля Б_ОбщиеПроцедурыИФункцииОбменаССайтом. В современных решениях на управляемых формах, таких как КА 2, вся логика обмена вынесена в специализированный общий модуль Б_ОбменССайтомСервер.

Давайте проанализируем, как переменная ОграничениеРазмераФрагментаФайлаОбмена получает свое значение. Вопреки распространенному мнению, это значение не прописано статически в коде конфигурации 1С. Оно определяется динамически в процессе диалога между 1С и CMS Битрикс по протоколу CommerceML.

Проанализируем этот алгоритм совместной работы подробнее:

  1. При запуске сеанса обмена 1С отправляет на сайт стартовый HTTP-запрос авторизации и инициализации с параметром mode=init.
  2. Веб-сервер сайта обрабатывает этот запрос и возвращает текстовый ответ, содержащий базовые настройки сессии. В этом ответе передается параметр file_limit, который указывает максимальный размер файла в байтах, который сайт готов принять за один раз. Это выглядит примерно так:
    
    zip=yes
    file_limit=2097152
    
  3. Модуль обмена 1С (в частности, функции внутри Б_ОбменССайтомСервер) считывает этот параметр и помещает его в переменную ОграничениеРазмераФрагментаФайлаОбмена.
  4. Если итоговый архив обмена (например, webdata.zip) превышает этот лимит (в нашем примере 2 МБ), модуль 1С автоматически «нарезает» архив на физические куски размером по 2 МБ и отправляет их на сайт последовательными POST-запросами. Сайт принимает эти куски по очереди и склеивает их в один файл перед распаковкой.

Таким образом, если вы хотите увеличить или уменьшить физический размер передаваемых кусков файлов, вам нужно вносить изменения на стороне сайта.

Для этого выполните следующие шаги в административной панели «1С-Битрикс»:

  1. Перейдите в меню: Рабочий стол -> Магазин -> Настройки -> Интеграция с 1С.
  2. Откройте вкладку «Каталог» (или перейдите в параметры конкретного профиля обмена).
  3. Найдите параметр «Размер единовременно загружаемой части файла (в байтах)».
  4. Измените его значение на требуемое (например, для установки лимита в 10 МБ укажите значение 10485760). Если вы хотите полностью отключить разделение при передаче (что крайне не рекомендуется делать из-за нестабильности каналов связи), установите заведомо большое число.

---

Часть 3. Особенности поведения в различных версиях модулей Битрикс

Стоит отметить, что описанная выше логика работы является фундаментальной базой протокола обмена CommerceML 2 и CommerceML 3. Она сохраняет свою актуальность во всех версиях официального модуля интеграции от Битрикс — от старых линеек 7.x до современных 8.x.

При использовании современных версий модуля обмена (8.x) в формате CommerceML 3 внутри папок пакетов, помимо привычных файлов import.xml (содержит структуру групп и свойства) и offers.xml (содержит торговые предложения), могут также создаваться дополнительные специализированные файлы:

Все эти файлы подчиняются одному и тому же правилу: если параметр «Количество товаров в пакете» в настройках узла обмена 1С равен нулю, то все эти данные будут аккуратно собраны в единые файлы в корне каталога выгрузки без генерации вложенных папок.

---

Резюме и рекомендации

Мы выяснили причины деления выгрузки и рассмотрели способы управления этим процессом. Напоследок дадим важный практический совет: не стремитесь всегда отключать пакетное дробление файлов.

Если у вас небольшая база товаров (до 1000–3000 позиций), выгрузка в один файл пройдет быстро и безболезненно. Однако при объеме каталога свыше 10 000 позиций объединение данных в один гигантский XML-файл гарантированно приведет к чрезмерной нагрузке на CPU и RAM веб-сервера. Веб-сервер может возвращать ошибки с кодами 500 Internal Server Error или 504 Gateway Timeout. Дробление на пакеты — это залог стабильного и отказоустойчивого обмена между вашей 1С и интернет-магазином.

← На главную