При работе в 1С:Зарплата и Управление Персоналом 3.1 многие организации сталкиваются с проблемой взаимных блокировок при попытке нескольких расчетчиков одновременно проводить документы Начисление зарплаты и взносов. Давайте разберем, почему это происходит и какие шаги помогут нам минимизировать простои системы.
Основная техническая причина кроется в механизме работы СУБД (чаще всего Microsoft SQL Server). Когда транзакция захватывает большое количество записей в регистрах расчета или накопления, сервер баз данных активирует механизм эскалации блокировок. Если количество строк, участвующих в транзакции, превышает критический порог (обычно около 5000 строк), блокировка переходит с уровня записи на уровень всей таблицы. В результате другие пользователи не могут записывать данные в эти же таблицы, что приводит к «зависанию» сеансов.
Прежде чем приступать к глубоким доработкам, рассмотрим методы оптимизации процесса:
Если организационные меры не дают нужного эффекта, перейдем к техническим решениям:
Если интерактивное заполнение и проведение документов вызывает блокировки, стоит рассмотреть переход к неинтерактивной схеме работы. Суть метода заключается в следующем:
РегистрСведений.ОповещенияПользователей, входящий в БСП.Рассмотрим логику работы фонового задания, которое мониторит очередь задач:
// Пример упрощенной логики фонового задания
Выборка = РегистрыСведений.ОчередьЗаполненияДокументов.Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.Заполнить();
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
// После успешного проведения удаляем запись из очереди
НаборЗаписей = РегистрыСведений.ОчередьЗаполненияДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.СсылкаНаДокумент.Установить(Выборка.СсылкаНаДокумент);
НаборЗаписей.Записать();
КонецЦикла;
Для выявления конкретных узких мест проанализируйте поведение вашей базы:
SQL Server, чтобы понять, на каких именно регистрах происходит ожидание блокировок.TempDB на сервере СУБД оптимизированы. Часто проблемы с производительностью связаны именно с недостаточным количеством файлов или медленной дисковой подсистемой для временных данных.Применяя эти рекомендации комплексно, вы сможете значительно снизить уровень конфликтности при проведении документов и обеспечить стабильную работу расчетчиков даже в периоды высокой нагрузки.