При работе в программе «1С:Зарплата и управление персоналом» редакции 3.1 пользователи могут столкнуться с проблемой, когда открытие или первичное создание документа Отпуск по уходу за ребенком занимает чрезвычайно много времени — от нескольких минут до полного зависания сеанса. При этом примечательно, что создание нового документа путем копирования существующего происходит за считанные секунды.
В этой статье мы подробно разберем причины возникновения данной проблемы, проанализируем механизмы работы формы документа и рассмотрим проверенные способы решения и обходные пути.
Проанализируем ситуацию, чтобы понять, почему новый документ создается так долго. При открытии пустой формы документа Отпуск по уходу за ребенком или при смене ключевых реквизитов (сотрудник, дата начала отпуска) срабатывают обработчики событий формы. В этот момент программа пытается автоматически выполнить фоновый расчет показателей:
Данные о начислениях для расчета среднего заработка и Данные о времени для расчета общего среднего заработка).Кадровику, оформляющему приказ на отпуск, полный расчет среднего заработка в момент открытия документа часто не требуется — этот расчет выполняет специалист расчетной службы. Однако механизм формы выполняет его автоматически для каждого кадровика, что приводит к сильным задержкам.
Рассмотрим наилучшее программное решение, которое позволяет сохранить типовую конфигурацию на поддержке. Метод заключается в добавлении условия на проверку ролей пользователя перед запуск программных блоков расчета среднего заработка.
Если у пользователя (например, сотрудника кадровой службы) отсутствуют роли расчетчика, программа пропускает трудоемкий вызов процедуры расчета среднего заработка, и форма открывается мгновенно.
Разберем пример кода, который вставляется в модуль формы или подключается через расширение конфигурации перед блоком расчета среднего заработка:
Если Пользователи.РолиДоступны("ДобавлениеИзменениеНачисленнойЗарплатыРасширенная,ПолныеПрава,ЧтениеНачисленнойЗарплатыРасширенная", , Ложь) Тогда
// Вызов стандартной процедуры расчета среднего заработка
ОбновитьДанныеРасчетаСреднегоЗаработка();
КонецЕсли;
С помощью этого условия расчет среднего заработка будет выполняться только у тех пользователей, которым действительно доступны роли расчетного отдела или полные права.
Если торможение наблюдается и у сотрудников расчетного отдела, причина кроется в неоптимальных планах запросов СУБД и накопленных служебных данных. Посмотрим, какие регламентные операции помогут решить проблему на уровне сервера:
UPDATE STATISTICS с параметром FULLSCAN для таблиц регистров расчета среднего заработка. Это позволит оптимизатору SQL-сервера строить правильные планы запросов.DBCC FREEPROCCACHE для сброса устаревших планов запросов.Если требуется оперативно решить проблему без проведения технических работ на сервере и разработки расширений, организуем работу пользователей следующими методами:
Отпуск по уходу за ребенком методом копирования существующего документа первичная инициализация формы пропускает каскадные вызовы пересчета «с нуля». Документ открывается за пару секунд, после чего в нем достаточно изменить сотрудника и даты.Таким образом, комбинируя обслуживание СУБД и оптимизацию кода через расширения конфигурации, можно полностью устранить задержки при создании документов в 1С:ЗУП 3.1.