Перенос данных между конфигурациями 1С с помощью штатных обработок обмена — стандартная задача для программиста. Однако на практике мы часто сталкиваемся с техническими аномалиями. Представим ситуацию: выгрузка за весь прошлый год проходит стабильно и формирует компактный файл размером до 50 МБ, но при попытке перенести данные за один конкретный месяц (например, февраль) процесс зависает, а итоговый XML-файл раздувается до внушительных 5.5 ГБ. Тестирование и исправление (ТИИ) базы данных при этом не приносит никаких результатов.
В этой статье мы подробно разберем, почему возникает эта проблема, как локализовать ее источник с помощью специализированного софта и какие изменения необходимо внести в правила обмена или методологию учета, чтобы успешно завершить перенос данных.
Когда размер XML-файла обмена увеличивается в сотни раз без видимых причин (объем документов в базе за этот период стандартный), первоочередной подозреваемый — неоптимальная настройка правил конвертации объектов (ПКО) в конфигурации «Конвертация данных 2.1». Рассмотрим механизм, который приводит к этой проблеме:
УстановкаЦенНоменклатуры) для реквизита Номенклатура не настроено ограничение выгрузки, XML-движок при обработке каждой строки документа выгружает не уникальный идентификатор (GUID) позиции, а весь объект целиком. Это означает, что для каждой строки со всеми реквизитами, свойствами, штрихкодами и единицами измерения генерируется огромный массив XML-кода. Если документ содержит 10 000 – 15 000 строк, данные одних и тех же позиций номенклатуры будут продублированы в файле тысячи раз.Номенклатура ссылается на справочник ЕдиницыИзмерения, у которого владельцем является та же Номенклатура, которая в свою очередь выгружает свои свойства, опять инициирующие выгрузку единиц измерения. Если глубина выгрузки не ограничена на уровне правил, XML-парсер уходит в бесконечную генерацию вложенных тегов, пока не закончится память или выгрузка не завершится принудительно с гигантским файлом на выходе.Попытка открыть текстовый или XML-файл размером 5 ГБ в обычном Блокноте или Notepad++ гарантированно приведет к зависанию операционной системы из-за переполнения выделенной оперативной памяти. Нам потребуются специализированные инструменты, способные читать файлы частями (без полной загрузки в ОЗУ):
<Номенклатура> или <ПрисоединенныйФайл>) бесконечно дублируется в структуре файла выгрузки.Если мы не знаем, какой именно объект вызывает раздувание файла, выполним следующие шаги:
Шаг 1. Разбиение периода выгрузки.
Вместо того чтобы выгружать целиком проблемный месяц (февраль), попробуем разбить выгрузку на более мелкие интервалы — например, по декадам или по дням. Это позволит быстро локализовать конкретную дату, в которой находится «проблемный» документ.
Шаг 2. Исключение тяжелых документов из выгрузки.
Как показывает практика, основными виновниками раздувания файлов являются документы с огромным количеством строк в табличных частях. В первую очередь к ним относятся:
УстановкаЦенНоменклатуры (может содержать десятки тысяч позиций);ПересчетТоваров (инвентаризационные описи);РегистрацияЦенНоменклатурыПоставщика.Попробуем поочередно отключать эти типы документов в настройках состава выгрузки типовой обработки. Если после отключения документа УстановкаЦенНоменклатуры размер файла моментально пришел в норму (стал весить стандартные несколько мегабайт) — источник проблемы успешно найден.
Когда проблемный объект найден, у нас есть два пути: исправить правила обмена в «Конвертации данных» или воспользоваться альтернативными, более быстрыми методами переноса данных.
Если нам критически важно переносить именно документы установки цен через XML-файл, необходимо доработать правила обмена:
ПередВыгрузкой свойства следующую строку:
// Отключаем полную выгрузку объекта номенклатуры, передаем только ссылку
ВыгрузитьОбъект = Ложь;
Зачастую перенос исторических документов установки цен за прошлые периоды (например, за 2017 год) не имеет практического смысла для ведения текущего оперативного учета в новой базе КомплекснаяАвтоматизация 2. Гораздо эффективнее и быстрее использовать альтернативные методы:
Бухгалтерии Предприятия только действующие на дату начала учета цены с помощью отчета или простой обработки.ЦеныНоменклатуры (Прайс-лист).Используя предложенные методики анализа структуры файлов и оптимизации правил обмена, мы сможем успешно преодолеть технические ограничения механизмов XML-выгрузки и обеспечить стабильный переход на новую информационную систему.