Решение простое, но не всегда очевидное. В обработке создается реквизит Блокировка, тип Справочник.Номенклатура. При желании можно выбрать любой другой справочник. В версии 8.2 для блокировки справочника даже не нужны права на изменение.
В выбранном справочнике создается предопределенный элемент. В примере он называется "ЭлементДляБлокировкиОбработки". Наличие предопределенного элемента позволяет использовать блокируемый объект во всех узлах распределенной базы, а также гарантирует его сохранность от удаления.
Если база не распределенная или нет желания/возможности добавлять предопределенный элемент, то для блокировки можно использовать любой объект, введенный пользователем системы. Или добавить свой элемент. В этом случае первая строка кода будет выглядеть как Справочники.Номенклатура.НайтиПоКоду("1") или Справочники.Номенклатура.НайтиПоНаименованию("ЭлементДляБлокировкиОбработки") или запросом и получить объект.
В обработке, в процедуре "Перед открытием" пишем такой код:
Блокировка = Справочники.Номенклатура.ЭлементДляБлокировкиОбработки.ПолучитьОбъект();
Попытка
Блокировка.Заблокировать();
Исключение
Сообщить("Обработка уже используется!");
КонецПопытки;
В исключении надо прописать все необходимые действия, исключить нежелательные действия. Например, закрыть обработку. Или заблокировать кнопки по созданию объектов.
Если надо увидеть кто заблокировал, то есть, кто уже пользуется обработкой, то выполняем блокировку без конструкции Попытка-Исключение. И средствами платформы получаем максимально подробную информацию, начиная с имени пользователя и заканчивая номером сеанса.
P.S. Для УФ можно использовать метод ЗаблокироватьДанныеДляРедактирования