Почему долго создается документ «Отпуск по уходу за ребенком» в 1С:ЗУП 3.1 и как это исправить?

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

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

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

Выясняем причины медленной работы

Проанализируем ситуацию, чтобы понять, почему новый документ создается так долго. При открытии пустой формы документа Отпуск по уходу за ребенком или при смене ключевых реквизитов (сотрудник, дата начала отпуска) срабатывают обработчики событий формы. В этот момент программа пытается автоматически выполнить фоновый расчет показателей:

  1. Выборка данных о начислениях и фактически отработанном времени за предыдущие 12–24 месяца из регистров сведений и накопления (например, Данные о начислениях для расчета среднего заработка и Данные о времени для расчета общего среднего заработка).
  2. Каскадный вызов серверных процедур заполнения планового ФОТ, стажа и среднего заработка.
  3. Обращение СУБД (MS SQL Server или PostgreSQL) к виртуальным таблицам. Если в базе скопился большой объем данных или отсутствует актуальная статистика индексов, система выполняет полное сканирование таблиц (Table Scan) вместо точечной выборки.

Кадровику, оформляющему приказ на отпуск, полный расчет среднего заработка в момент открытия документа часто не требуется — этот расчет выполняет специалист расчетной службы. Однако механизм формы выполняет его автоматически для каждого кадровика, что приводит к сильным задержкам.

Способ 1. Доработка формы с помощью расширения (проверка прав)

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

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

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


Если Пользователи.РолиДоступны("ДобавлениеИзменениеНачисленнойЗарплатыРасширенная,ПолныеПрава,ЧтениеНачисленнойЗарплатыРасширенная", , Ложь) Тогда
    // Вызов стандартной процедуры расчета среднего заработка
    ОбновитьДанныеРасчетаСреднегоЗаработка();
КонецЕсли;

С помощью этого условия расчет среднего заработка будет выполняться только у тех пользователей, которым действительно доступны роли расчетного отдела или полные права.

Способ 2. Обслуживание СУБД и оптимизация баз данных

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

  1. Обновление статистики СУБД: выполним процедуру UPDATE STATISTICS с параметром FULLSCAN для таблиц регистров расчета среднего заработка. Это позволит оптимизатору SQL-сервера строить правильные планы запросов.
  2. Реиндексация таблиц: проведем обслуживание индексов регистров накопления и сведений, связанных с начислениями и отработанным временем.
  3. Очистка кэша СУБД: на сервере MS SQL Server полезно выполнить команду DBCC FREEPROCCACHE для сброса устаревших планов запросов.
  4. Пересчет данных среднего заработка: в самой программе перейдем в раздел Зарплата — Сервис — Обновить данные для расчета среднего заработка и запустим обновление за актуальные периоды.

Способ 3. Обходные варианты работы пользователей

Если требуется оперативно решить проблему без проведения технических работ на сервере и разработки расширений, организуем работу пользователей следующими методами:

  1. Ввод документов путем копирования: при создании документа Отпуск по уходу за ребенком методом копирования существующего документа первичная инициализация формы пропускает каскадные вызовы пересчета «с нуля». Документ открывается за пару секунд, после чего в нем достаточно изменить сотрудника и даты.
  2. Разделение полномочий кадров и расчетчиков: кадровики оформляют документ без установки флагов выплаты и расчета среднего заработка, а расчетный отдел производит расчет зарегистрированных документов в конце периода.

Таким образом, комбинируя обслуживание СУБД и оптимизацию кода через расширения конфигурации, можно полностью устранить задержки при создании документов в 1С:ЗУП 3.1.

← На главную