Перенос данных из устаревшей конфигурации «Зарплата и управление персоналом», редакция 2.5 в актуальную 3.1 — это всегда сложный процесс, который часто сопровождается критическим замедлением производительности. Особенно остро проблема проявляется при «рекомендованном» переносе, когда система пытается перенести не просто остатки, а кадровую историю и фактические данные для расчетов. Ситуация осложняется, если в базе ведется учет по головной организации с множеством филиалов.
В данной статье мы подробно разберем причины, по которым загрузка может длиться десятки часов, и рассмотрим пошаговый алгоритм оптимизации этого процесса.
Проанализируем ситуацию: почему при добавлении филиалов скорость падает в разы? В 1С:ЗУП 3.1 реализованы жесткие механизмы контроля целостности данных, которые срабатывают при записи каждого объекта. Рассмотрим основные факторы влияния:
ЗУП 3.1, тем медленнее работает каждый последующий поиск и сопоставление.НачальнаяШтатнаяРасстановка при проведении инициируют тяжелые алгоритмы расчета планового фонда оплаты труда. Если документов много, система тратит колоссальные ресурсы на эти вычисления.Разберем, какие настройки в целевой базе ЗУП 3.1 необходимо временно отключить, чтобы максимально ускорить процесс записи объектов. Мы рекомендуем выполнить следующие действия в разделе «Настройка»:
Если ваша база работает в клиент-серверном варианте, основной причиной деградации скорости часто становится лог транзакций (LDF файл). Проанализируем состояние сервера и выполним регламентные операции:
Перевод базы в режим Simple. По умолчанию базы SQL могут находиться в режиме восстановления «Full». При массовой загрузке данных через XML каждое действие записывается в лог. Мы рекомендуем на время переноса установить модель восстановления Simple. Это предотвратит бесконечный рост лога и снизит нагрузку на диски.
Обслуживание индексов. В процессе загрузки индексы таблиц РегистрСведений.КадроваяИсторияСотрудников и РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников сильно фрагментируются. Рассмотрим пример последовательности действий:
Такой подход позволяет поддерживать высокую скорость поиска данных, которую использует загрузчик для сопоставления объектов.
Одним из самых эффективных методов, как показывает практика, является использование «базы-посредника». Выясним, почему это работает быстрее:
В клиент-серверном варианте много времени тратится на сетевое взаимодействие между сервером приложений 1С и сервером СУБД, а также на управление блокировками. Если загружать данные в **пустую файловую базу**, расположенную на быстром локальном NVMe SSD, скорость обработки данных может возрасти в 5-10 раз.
Разберем алгоритм работы по этому методу:
Ситуация с зависанием на этапе «Кадровые данные» (фактические отпуска) часто связана с тем, что система пытается рассчитать остатки отпусков на лету, анализируя всю историю из 2.5. Если в исходной базе были ручные корректировки или «битые» периоды, алгоритм может уходить в бесконечные циклы.
Посмотрим, как можно оптимизировать этот этап:
Во-первых, перед выгрузкой из ЗУП 2.5 стоит выполнить «Тестирование и исправление» с проверкой логической целостности. Во-вторых, проанализируем объем данных по отпускам. Если история превышает 5-10 лет, рассмотрите возможность обрезки данных по фактическим отпускам в исходной базе перед переносом, оставив данные только за последние 2-3 года.
Как отмечалось в обсуждении, фоновые задания могут создавать неявные блокировки, которые замедляют загрузку. Даже если вы заблокировали регламентные задания через консоль администрирования, некоторые механизмы (например, обработчики обновления или фоновые расчеты) могут продолжать работу.
Для полной уверенности в монопольности процесса, убедитесь, что в базе нет активных сеансов, кроме вашего загрузчика. Рассмотрим код для программного отключения обработчиков ожидания, если вы используете собственную доработанную обработку загрузки:
// Пример отключения регламентных заданий программно
Процедура ОтключитьВсеРегламентныеЗадания()
МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из МассивЗаданий Цикл
Задание.Использование = Ложь;
Задание.Записать();
КонецЦикла;
КонецПроцедуры
Проанализируем еще несколько важных моментов, которые помогут сократить время переноса:
PhysicalDisk: Avg. Disk Queue Length. Если значение постоянно выше 2, это означает, что дисковая подсистема является «бутылочным горлышком», и никакие программные оптимизации не помогут без апгрейда железа.Подводя итог, можно сказать, что ключ к быстрому переносу лежит в отключении всех «интеллектуальных» механизмов ЗУП 3.1 на время загрузки и обеспечении максимальной производительности дисковой подсистемы через использование файловых баз на SSD или оптимизацию настроек SQL-сервера.