Блокировка от параллельного выполнения функционала на примере регламентных заданий
Как не допустить одновременного выполнения каких-либо функций в системе. Например, есть 2 регламентных задания, которые выполняют один и тот же функционал параллельно.
- Описание
- Подробнее
Описание
У меня есть регламентное задание, которое выполняет функцию каждые 15 минут. Также функцию может вызвать вручную пользователь. Если функция уже выполняется, то пользователь, запустив ее вручную, рискует получить ошибки в данных.
Чтобы контролировать процесс, первое, что приходит в голову — записывать время старта и время окончания и проверять, выполняется ли функция. Но тут есть вопросы, связанные с обработкой ошибок, выключением сервера или даже падением сессии регламентных заданий.
Придется писать проверки, которые смотрят за статистикой выполнения и если интервал превышен, то…
Но есть способ гораздо проще. Это стандартные блокировки объектов 1С. Для этого у меня есть справочник:

Поле ТипОбъектаКонтроля — это перечисление в котором находятся все разделы функционала вызываемые регламентными заданиями. Стандартная функция, которая осуществляет блокировку:
ОбъектСправочника.Заблокировать();Если мы в функции, которая выполняется будем проверять блокировку и блокировать элемент справочника. То даже если сессия упадет, или закончится ошибкой, у нас не возникнет ситуации "вечной блокировки".
Немного кода. Очень важно вернуть в вашу функцию объект блокировки. Если этого не сделать, блокировка снимется автоматически.
