Как ускорить перенос данных из ЗУП 2.5 в ЗУП 3.1 при загрузке больших объемов и филиалов?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

Перенос данных из устаревшей конфигурации «Зарплата и управление персоналом», редакция 2.5 в актуальную 3.1 — это всегда сложный процесс, который часто сопровождается критическим замедлением производительности. Особенно остро проблема проявляется при «рекомендованном» переносе, когда система пытается перенести не просто остатки, а кадровую историю и фактические данные для расчетов. Ситуация осложняется, если в базе ведется учет по головной организации с множеством филиалов.

В данной статье мы подробно разберем причины, по которым загрузка может длиться десятки часов, и рассмотрим пошаговый алгоритм оптимизации этого процесса.

Анализируем влияние архитектуры ЗУП 3.1 на скорость загрузки

Проанализируем ситуацию: почему при добавлении филиалов скорость падает в разы? В 1С:ЗУП 3.1 реализованы жесткие механизмы контроля целостности данных, которые срабатывают при записи каждого объекта. Рассмотрим основные факторы влияния:

  1. Глобальный поиск дублей физических лиц. При загрузке сотрудников каждого нового филиала система выполняет поиск по всей базе (включая уже загруженные филиалы), чтобы сопоставить физических лиц. Чем больше данных уже находится в базе ЗУП 3.1, тем медленнее работает каждый последующий поиск и сопоставление.
  2. Автоматический пересчет ФОТ. Документы типа НачальнаяШтатнаяРасстановка при проведении инициируют тяжелые алгоритмы расчета планового фонда оплаты труда. Если документов много, система тратит колоссальные ресурсы на эти вычисления.
  3. Контроль штатного расписания. Если в настройках программы включена проверка соответствия кадровых документов штатному расписанию, то загрузка каждого сотрудника будет сопровождаться проверкой наличия свободных ставок, что создает дополнительные запросы к базе данных.

Шаг 1. Оптимизация настроек конфигурации перед загрузкой

Разберем, какие настройки в целевой базе ЗУП 3.1 необходимо временно отключить, чтобы максимально ускорить процесс записи объектов. Мы рекомендуем выполнить следующие действия в разделе «Настройка»:

  1. Перейдем в «Кадровый учет» и снимем флаг «Используется работа по штатному расписанию». Если полное отключение невозможно, обязательно отключите опцию «Ведется история изменений штатного расписания». Запись документов без создания событий в истории происходит в разы быстрее.
  2. В настройках расчета зарплаты временно отключим автоматический пересчет ФОТ.
  3. Отключим Полнотекстовый поиск. Это критично, так как при загрузке новых данных 1С пытается проиндексировать каждое новое физическое лицо, подразделение и сотрудника, что создает огромную нагрузку на дисковую подсистему. Сделать это можно в разделе «Администрирование» — «Поддержка и обслуживание» — «Управление полнотекстовым поиском».

Шаг 2. Техническая подготовка SQL-сервера

Если ваша база работает в клиент-серверном варианте, основной причиной деградации скорости часто становится лог транзакций (LDF файл). Проанализируем состояние сервера и выполним регламентные операции:

Перевод базы в режим Simple. По умолчанию базы SQL могут находиться в режиме восстановления «Full». При массовой загрузке данных через XML каждое действие записывается в лог. Мы рекомендуем на время переноса установить модель восстановления Simple. Это предотвратит бесконечный рост лога и снизит нагрузку на диски.

Обслуживание индексов. В процессе загрузки индексы таблиц РегистрСведений.КадроваяИсторияСотрудников и РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников сильно фрагментируются. Рассмотрим пример последовательности действий:

Такой подход позволяет поддерживать высокую скорость поиска данных, которую использует загрузчик для сопоставления объектов.

Шаг 3. Использование файловой базы-посредника

Одним из самых эффективных методов, как показывает практика, является использование «базы-посредника». Выясним, почему это работает быстрее:

В клиент-серверном варианте много времени тратится на сетевое взаимодействие между сервером приложений 1С и сервером СУБД, а также на управление блокировками. Если загружать данные в **пустую файловую базу**, расположенную на быстром локальном NVMe SSD, скорость обработки данных может возрасти в 5-10 раз.

Разберем алгоритм работы по этому методу:

  1. Создаем пустую файловую базу ЗУП 3.1 на самом быстром диске.
  2. Выполняем загрузку данных одного или нескольких филиалов в эту базу.
  3. После успешной загрузки конвертируем файловую базу в клиент-серверную или переносим данные в основную рабочую базу с помощью обработки «Выгрузка и загрузка данных XML» (при условии идентичности релизов).

Шаг 4. Решение проблемы с «Фактическими отпусками»

Ситуация с зависанием на этапе «Кадровые данные» (фактические отпуска) часто связана с тем, что система пытается рассчитать остатки отпусков на лету, анализируя всю историю из 2.5. Если в исходной базе были ручные корректировки или «битые» периоды, алгоритм может уходить в бесконечные циклы.

Посмотрим, как можно оптимизировать этот этап:

Во-первых, перед выгрузкой из ЗУП 2.5 стоит выполнить «Тестирование и исправление» с проверкой логической целостности. Во-вторых, проанализируем объем данных по отпускам. Если история превышает 5-10 лет, рассмотрите возможность обрезки данных по фактическим отпускам в исходной базе перед переносом, оставив данные только за последние 2-3 года.

Шаг 5. Работа с блокировками и фоновыми заданиями

Как отмечалось в обсуждении, фоновые задания могут создавать неявные блокировки, которые замедляют загрузку. Даже если вы заблокировали регламентные задания через консоль администрирования, некоторые механизмы (например, обработчики обновления или фоновые расчеты) могут продолжать работу.

Для полной уверенности в монопольности процесса, убедитесь, что в базе нет активных сеансов, кроме вашего загрузчика. Рассмотрим код для программного отключения обработчиков ожидания, если вы используете собственную доработанную обработку загрузки:


// Пример отключения регламентных заданий программно
Процедура ОтключитьВсеРегламентныеЗадания()
    МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
    Для Каждого Задание Из МассивЗаданий Цикл
        Задание.Использование = Ложь;
        Задание.Записать();
    КонецЦикла;
КонецПроцедуры

Дополнительные рекомендации

Проанализируем еще несколько важных моментов, которые помогут сократить время переноса:

Подводя итог, можно сказать, что ключ к быстрому переносу лежит в отключении всех «интеллектуальных» механизмов ЗУП 3.1 на время загрузки и обеспечении максимальной производительности дисковой подсистемы через использование файловых баз на SSD или оптимизацию настроек SQL-сервера.

← На главную