При настройке стандартного обмена между конфигурацией «1С:Комплексная автоматизация 2» (КА 2) и сайтом под управлением «1С-Битрикс» специалисты часто сталкиваются со специфическим поведением системы: выгружаемый каталог товаров автоматически разбивается на множество папок (например, от 1 до 15 и более), в каждой из которых создаются обособленные файлы import.xml и offers.xml.
Такое поведение может вызывать неудобства, особенно если необходимо получить один целостный файл выгрузки для отладки или если принимающая сторона (сайт) некорректно обрабатывает пакетную загрузку. В этой статье мы подробно разберем, почему модуль обмена «Битрикс» так дробит информацию, как устроен этот механизм изнутри и как перенастроить систему, чтобы выгрузка формировалась в виде единого файла.
Для начала важно понять, что за дробление выгрузки отвечают два абсолютно независимых друг от друга механизма: логическое разделение на пакеты данных (настраивается в 1С) и физическое разделение передаваемого файла на фрагменты при HTTP-транспортировке (настраивается на стороне сайта).
---
Если при выгрузке в локальный каталог или на сайт вы видите структуру папок вида /1/import.xml, /2/import.xml и так далее, это означает, что сработал механизм логического разделения пакетов в 1С.
Этот функционал предназначен для того, чтобы не генерировать один огромный XML-файл объемом в сотни мегабайт, который веб-сервер сайта просто не сможет обработать из-за ограничений на оперативную память или максимальное время выполнения PHP-скриптов. По умолчанию модуль обмена «Битрикс» настроен на генерацию небольших «порций» данных.
Рассмотрим по шагам, как отключить это разделение и заставить модуль выгружать всё в один файл:
import.xml, создает новую папку и начинает писать следующий пакет.Важное предупреждение: если после изменения настройки в 1С при первой выгрузке файлы всё равно разбились по папкам, это указывает на то, что в системе осталась старая зарегистрированная к выгрузке информация. Для исправления этой ситуации выполните следующие действия:
---
Иногда разработчики пытаются найти жестко заданные лимиты размеров файлов непосредственно в программном коде 1С. В более старых конфигурациях (например, на обычных формах в КА 1.1) за это отвечали процедуры модуля Б_ОбщиеПроцедурыИФункцииОбменаССайтом. В современных решениях на управляемых формах, таких как КА 2, вся логика обмена вынесена в специализированный общий модуль Б_ОбменССайтомСервер.
Давайте проанализируем, как переменная ОграничениеРазмераФрагментаФайлаОбмена получает свое значение. Вопреки распространенному мнению, это значение не прописано статически в коде конфигурации 1С. Оно определяется динамически в процессе диалога между 1С и CMS Битрикс по протоколу CommerceML.
Проанализируем этот алгоритм совместной работы подробнее:
mode=init.file_limit, который указывает максимальный размер файла в байтах, который сайт готов принять за один раз. Это выглядит примерно так:
zip=yes
file_limit=2097152
Б_ОбменССайтомСервер) считывает этот параметр и помещает его в переменную ОграничениеРазмераФрагментаФайлаОбмена.webdata.zip) превышает этот лимит (в нашем примере 2 МБ), модуль 1С автоматически «нарезает» архив на физические куски размером по 2 МБ и отправляет их на сайт последовательными POST-запросами. Сайт принимает эти куски по очереди и склеивает их в один файл перед распаковкой.Таким образом, если вы хотите увеличить или уменьшить физический размер передаваемых кусков файлов, вам нужно вносить изменения на стороне сайта.
Для этого выполните следующие шаги в административной панели «1С-Битрикс»:
---
Стоит отметить, что описанная выше логика работы является фундаментальной базой протокола обмена CommerceML 2 и CommerceML 3. Она сохраняет свою актуальность во всех версиях официального модуля интеграции от Битрикс — от старых линеек 7.x до современных 8.x.
При использовании современных версий модуля обмена (8.x) в формате CommerceML 3 внутри папок пакетов, помимо привычных файлов import.xml (содержит структуру групп и свойства) и offers.xml (содержит торговые предложения), могут также создаваться дополнительные специализированные файлы:
prices.xml — содержит информацию о типах цен и зарегистрированных ценах товаров.rests.xml — содержит данные об остатках товаров в разрезе складов.Все эти файлы подчиняются одному и тому же правилу: если параметр «Количество товаров в пакете» в настройках узла обмена 1С равен нулю, то все эти данные будут аккуратно собраны в единые файлы в корне каталога выгрузки без генерации вложенных папок.
---
Мы выяснили причины деления выгрузки и рассмотрели способы управления этим процессом. Напоследок дадим важный практический совет: не стремитесь всегда отключать пакетное дробление файлов.
Если у вас небольшая база товаров (до 1000–3000 позиций), выгрузка в один файл пройдет быстро и безболезненно. Однако при объеме каталога свыше 10 000 позиций объединение данных в один гигантский XML-файл гарантированно приведет к чрезмерной нагрузке на CPU и RAM веб-сервера. Веб-сервер может возвращать ошибки с кодами 500 Internal Server Error или 504 Gateway Timeout. Дробление на пакеты — это залог стабильного и отказоустойчивого обмена между вашей 1С и интернет-магазином.