При работе с распределенными информационными базами (РИБ) системные администраторы и программисты 1С часто сталкиваются с ситуацией, когда объем файла обмена не соответствует количеству измененных объектов. Например, в мониторе обмена мы видим всего 199 объектов, а итоговый .zip архив весит сотни мегабайт. Разберем подробно, почему это происходит и как исправить ситуацию, особенно когда обмен идет на слабых 32-битных машинах, где такие файлы вызывают критические ошибки Out of Memory.
Первым делом проанализируем содержимое того, что 1С упаковывает в архив. Как мы знаем, файл выгрузки — это обычный ZIP, внутри которого находится XML-документ (обычно с именем вида Message_XXX_YYY.xml). Если архив весит 900 МБ, то внутри может быть несжатый файл размером в несколько гигабайт. Простые текстовые редакторы вроде Notepad++ или Bred могут не справиться с таким объемом и зависнуть.
Рассмотрим использование FAR Manager для просмотра таких файлов. Он позволяет открывать огромные текстовые документы в режиме просмотра без полной загрузки в оперативную память. Нам необходимо заглянуть внутрь XML и понять, какой блок занимает основное место. Основное внимание уделим секции v8:Config. Если вы видите, что файл забит огромным массивом данных в начале, это означает, что система пытается передать конфигурацию целиком.
Одной из самых частых причин раздувания файла является автоматическое включение метаданных конфигурации в пакет обмена. Проанализируем ситуацию: 1С считает, что конфигурация на периферийном узле не соответствует центральной, и пытается отправить «обновление» при каждом обмене.
Это может происходить по нескольким причинам:
1С:Предприятие, а на узле — другая (даже если разница в последней цифре релиза), механизмы сериализации могут отрабатывать по-разному, вызывая ложное срабатывание признака изменения конфигурации.РИБ некорректно сравнивал версии метаданных.Для решения этой проблемы попробуем принудительно сбросить регистрацию изменений для конфигурации. Мы можем воспользоваться встроенной обработкой Регистрация изменений для обмена. Рассмотрим шаги:
Иногда счетчик объектов в 199 единиц показывает только справочники и документы, но игнорирует записи регистров. Проанализируем ситуацию с регистрами сведений в 1С:Розница. Огромный объем данных могут занимать:
Цены номенклатуры: Если была переоценка большого количества товаров.Штрихкоды: При массовой загрузке или обновлении.Акционные продажи или Бонусные баллы.Важно понимать, что записи регистров часто не считаются системой как «отдельные объекты» в привычном понимании пользователя, но в XML они занимают значительное место. Если в правилах обмена настроена миграция «Выгружать всегда» для определенных регистров, они будут попадать в каждый пакет.
В конфигурации 1С:Розница основной объем базы часто занимают изображения товаров. Разберем по шагам, как они попадают в обмен. Если картинки хранятся в справочнике Присоединенные файлы, то при любом редактировании карточки товара или принудительном пересохранении владельца файла, сама картинка регистрируется к обмену.
При выгрузке бинарные данные (картинки, PDF-файлы) кодируются в текстовый формат Base64. Посмотрим на математику этого процесса: кодирование в Base64 увеличивает размер исходного бинарного файла примерно на 33%. Если у вас зарегистрировано к обмену 100 фотографий высокого разрешения по 5-7 МБ каждая, это мгновенно даст объем пакета более 700-900 МБ в текстовом виде.
Для проверки этой гипотезы проанализируем в файле выгрузки наличие тегов FileStorage или ДанныеФайла. Если вы видите бесконечные строки случайных символов — вы нашли причину объема.
Как отметил автор темы, на узлах стоят слабые компьютеры с 32-битной ОС. Для 32-битного процесса 1С лимит адресного пространства составляет всего 2 ГБ. Посмотрим на процесс загрузки: при чтении XML файла размером в 900 МБ система пытается построить дерево объектов. Если используется устаревший метод чтения DOM, память закончится мгновенно.
Рассмотрим способы облегчения загрузки:
XMLSpliter, но для РИБ это рискованно, так как нарушается целостность сообщения./3GB в boot.ini (для старых систем) или команду bcdedit /set increaseuserva 3072, чтобы дать 1С чуть больше пространства.Если конфигурация «застряла» и файл всё равно содержит метаданные, можно прибегнуть к радикальному методу — временному отключению признака РИБ на узле. Разберем пример кода, который запускается на периферийной базе через внешнюю обработку:
// Отключаем связь с главным узлом
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
// В этот момент база становится автономной, можно внести правки
// После исправления проблем возвращаем связь обратно
ГлавныйУзел = ПланыОбмена.НайтиПоКоду("ЦБ"); // Код центральной базы
ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
Этот метод позволяет «протолкнуть» обмен, если база выдает ошибки при загрузке изменений конфигурации. Однако помните, что после этого необходимо убедиться, что конфигурации в обеих базах идентичны до последнего байта, иначе при следующем обмене вы снова получите файл размером в 900 МБ.
Подведем итог: если файл выгрузки аномально велик, не пытайтесь угадать причину. Используйте FAR Manager, найдите в XML самые объемные блоки и работайте прицельно с регистрацией изменений этих объектов. Чаще всего проблема решается либо очисткой регистрации лишних картинок, либо принудительным переобновлением конфигурации узла.