Как ускорить выгрузку справочника Номенклатура из УПП 1.3 при переходе на КА 2.5 или ERP

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

При переходе с устаревших конфигураций, таких как 1С:Управление производственным предприятием 1.3 (УПП), на современные системы 1С:ERP 2.5 или 1С:Комплексная автоматизация 2.5 (КА), одной из самых трудоемких задач является перенос нормативно-справочной информации. Часто специалисты сталкиваются с ситуацией, когда типовая выгрузка справочника Номенклатура, содержащего десятки тысяч элементов, затягивается на несколько суток, а размер выходного XML-файла достигает неадекватных размеров (десятки гигабайт). Рассмотрим подробно причины возникновения этой проблемы и разберем эффективные способы оптимизации процесса.

Анализ причин медленной выгрузки

Проанализируем ситуацию, когда справочник объемом в 72 000 элементов формирует файл размером 26 Гб. В нормальных условиях такой объем данных должен занимать не более 700–800 Мб в формате XML. Если файл "раздувается", это свидетельствует об одной из следующих технических проблем:

  1. Зацикливание ссылок: Это наиболее вероятная причина. В процессе выгрузки объект тянет за собой связанные объекты по ссылкам. Если в правилах конвертации (ПВД/ПКО) настроена глубокая выгрузка сопутствующих данных, система может начать бесконечно обходить дерево зависимостей. Например, номенклатура ссылается на спецификацию, спецификация на другую номенклатуру, а та — обратно на исходную.
  2. Выгрузка истории цен: Ресурсные регистры сведений (например, ЦеныНоменклатуры) в УПП могут содержать миллионы записей. При включении опции выгрузки цен система пытается сериализовать всю историю изменений, что экспоненциально увеличивает объем данных.
  3. Тяжелые двоичные данные: Несмотря на то что в карточках может не быть картинок, в справочнике могут храниться присоединенные файлы, сертификаты или текстовые описания в формате HTML/RTF, которые при сериализации в XML увеличивают размер объекта в разы.
  4. Каскадная выгрузка документов: Иногда ошибочно настроенные правила при выгрузке справочника начинают подтягивать документы-основания или связанные заказы, что превращает перенос справочника в перенос половины базы.

Решение №1: Отключение выгрузки истории цен

Как показывает практика и опыт участников обсуждения, критическим узлом часто является опция "История цен". В типовых обработках выгрузки данных из УПП в КА/ERP эта галка заставляет систему перебирать регистр сведений по каждой позиции номенклатуры. Проанализируем результаты эксперимента:

Рекомендация: Не выгружайте историю цен вместе с основным справочником Номенклатура. Рекомендуется переносить цены отдельным этапом или только на определенную дату (срез последних), используя документ УстановкаЦенНоменклатуры в целевой базе.

Решение №2: Использование замера производительности

Чтобы точно определить, на каком объекте или участке кода "зависает" система, необходимо выполнить замер производительности. В обычном приложении 1С (УПП) это делается следующим образом:

  1. Запустите базу в режиме Конфигуратор.
  2. Откройте меню Отладка — Замер производительности.
  3. В режиме предприятия запустите обработку выгрузки и подождите 5–10 минут.
  4. Вернитесь в Конфигуратор и остановите замер.

Проанализируем полученную таблицу. Обратите внимание на колонку "Число вызовов" и "Чистое время". Если вы видите миллионы вызовов функций, связанных с поиском ссылок или обработкой правил конвертации для конкретного регистра, значит, проблема именно в этом правиле.

Решение №3: Оптимизация правил конвертации данных (ПВД)

Если вы используете внешние правила (файл .xml), их можно отредактировать в конфигурации "Конвертация данных 2.1". Рассмотрим шаги по оптимизации:

Пример кода в обработчике ПередВыгрузкой для ПВД:


Если Не Объект.ЭтоГруппа Тогда
    // Пример фильтрации по остаткам или активности
    // Если нужно пропустить объект:
    // Отказ = Истина;
КонецЕсли;

Решение №4: Параллельная выгрузка и техническая оптимизация

Если база данных очень большая, использование одного потока выгрузки через XML неэффективно. Рассмотрим альтернативные технические подходы:

1. Разделение на пакеты. Вместо выгрузки всего справочника целиком, разделите его на части по иерархии (по папкам) или по первой букве наименования. Это позволит:

2. Использование прямого подключения (COM/DCOM). Типовые обработки переноса часто поддерживают режим "Загрузка данных из другой базы". В этом случае система подключается к УПП через V83.COMConnector. Это позволяет избежать этапа создания промежуточного тяжелого XML-файла и значительно ускоряет процесс за счет прямой передачи данных между объектами.

3. Подготовка базы данных. Перед началом выгрузки выполните следующие действия в исходной базе УПП:

  1. Запустите Тестирование и исправление (ТИИ) с проверкой логической и ссылочной целостности. Битые ссылки могут приводить к непредсказуемому поведению правил конвертации.
  2. Очистите базу от дублей номенклатуры.
  3. Убедитесь, что сеанс выгрузки запущен непосредственно на сервере (или на машине с быстрым SSD и достаточным объемом RAM — не менее 32 Гб), чтобы минимизировать сетевые задержки при чтении данных.

Итоги и рекомендации

Разберем краткий алгоритм действий, если выгрузка идет медленно:

  1. Отключите опцию выгрузки истории цен. Переносите цены отдельно, желательно только актуальные значения.
  2. Проверьте размер файла. Если на 70 тысячах элементов он превышает 1-1.5 Гб — ищите зацикливание или избыточные свойства (картинки, файлы) в правилах.
  3. Используйте разделение на части. Выгружайте номенклатуру по папкам. Это надежнее и позволяет контролировать процесс.
  4. Задействуйте COM-соединение. Это самый быстрый способ для типовых переходов "1С — 1С".

Соблюдение этих правил позволяет сократить время переноса справочника Номенклатура с нескольких суток до нескольких часов, обеспечивая при этом стабильность загрузки в целевую систему ERP/КА.

← На главную