При переходе с устаревших конфигураций, таких как 1С:Управление производственным предприятием 1.3 (УПП), на современные системы 1С:ERP 2.5 или 1С:Комплексная автоматизация 2.5 (КА), одной из самых трудоемких задач является перенос нормативно-справочной информации. Часто специалисты сталкиваются с ситуацией, когда типовая выгрузка справочника Номенклатура, содержащего десятки тысяч элементов, затягивается на несколько суток, а размер выходного XML-файла достигает неадекватных размеров (десятки гигабайт). Рассмотрим подробно причины возникновения этой проблемы и разберем эффективные способы оптимизации процесса.
Проанализируем ситуацию, когда справочник объемом в 72 000 элементов формирует файл размером 26 Гб. В нормальных условиях такой объем данных должен занимать не более 700–800 Мб в формате XML. Если файл "раздувается", это свидетельствует об одной из следующих технических проблем:
ЦеныНоменклатуры) в УПП могут содержать миллионы записей. При включении опции выгрузки цен система пытается сериализовать всю историю изменений, что экспоненциально увеличивает объем данных.Как показывает практика и опыт участников обсуждения, критическим узлом часто является опция "История цен". В типовых обработках выгрузки данных из УПП в КА/ERP эта галка заставляет систему перебирать регистр сведений по каждой позиции номенклатуры. Проанализируем результаты эксперимента:
Рекомендация: Не выгружайте историю цен вместе с основным справочником Номенклатура. Рекомендуется переносить цены отдельным этапом или только на определенную дату (срез последних), используя документ УстановкаЦенНоменклатуры в целевой базе.
Чтобы точно определить, на каком объекте или участке кода "зависает" система, необходимо выполнить замер производительности. В обычном приложении 1С (УПП) это делается следующим образом:
Проанализируем полученную таблицу. Обратите внимание на колонку "Число вызовов" и "Чистое время". Если вы видите миллионы вызовов функций, связанных с поиском ссылок или обработкой правил конвертации для конкретного регистра, значит, проблема именно в этом правиле.
Если вы используете внешние правила (файл .xml), их можно отредактировать в конфигурации "Конвертация данных 2.1". Рассмотрим шаги по оптимизации:
НоменклатурныеГруппы, СтатьиЗатрат, ЕдиницыИзмерения, установите флаг "Не выгружать объекты свойств по ссылкам". Это заставит систему создавать только ссылку (UUID) в файле, а сами объекты будут выгружены, только если они явно указаны в плане выгрузки.Номенклатура можно отключить рекурсивную выгрузку родителя. Достаточно выгружать только ссылку на родительскую группу, так как группы справочника обычно выгружаются отдельным правилом.Пример кода в обработчике ПередВыгрузкой для ПВД:
Если Не Объект.ЭтоГруппа Тогда
// Пример фильтрации по остаткам или активности
// Если нужно пропустить объект:
// Отказ = Истина;
КонецЕсли;
Если база данных очень большая, использование одного потока выгрузки через XML неэффективно. Рассмотрим альтернативные технические подходы:
1. Разделение на пакеты. Вместо выгрузки всего справочника целиком, разделите его на части по иерархии (по папкам) или по первой букве наименования. Это позволит:
2. Использование прямого подключения (COM/DCOM). Типовые обработки переноса часто поддерживают режим "Загрузка данных из другой базы". В этом случае система подключается к УПП через V83.COMConnector. Это позволяет избежать этапа создания промежуточного тяжелого XML-файла и значительно ускоряет процесс за счет прямой передачи данных между объектами.
3. Подготовка базы данных. Перед началом выгрузки выполните следующие действия в исходной базе УПП:
Разберем краткий алгоритм действий, если выгрузка идет медленно:
Соблюдение этих правил позволяет сократить время переноса справочника Номенклатура с нескольких суток до нескольких часов, обеспечивая при этом стабильность загрузки в целевую систему ERP/КА.