Рассмотрим работу механизма на примере доработки с помощью расширения документа Отражение зарплаты в бухучете ЗУП.
1. Блокируемая форма
При подключении механизма на форме создаются необходимые реквизиты, поля и команды для вывода сообщения о блокировки и возможности разблокировать форму.
Добавляем в расширение обработчики событий формы с типом Вызывать после:
&НаСервере
Процедура БРО_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура БРО_ПриЧтенииНаСервереПосле(ТекущийОбъект)
БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура БРО_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
Кнопка разблокировки по-умолчанию создается в Командной панели в дополнительном подменю Ещё, однако в нашем документе Отражение зарплаты в бухучете панель не отображается, вместо нее создана группа КоманднаяПанельФормы, поэтому перенесем созданную кнопку в данную группу:
КнопкаРазблокировать = Элементы.РазблокироватьФормуДляИзмененияОбъекта;
Элементы.Переместить(КнопкаРазблокировать, Элементы.КоманднаяПанельФормы);
Так же в модуле формы размещаем обработчик команды разблокировки:
&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
2. Обработчик блокировки
Обработчик блокировки разместим в общем модуле БРО_Сервер:
Функция ДобавитьБлокировкуИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект) Экспорт
Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ОтражениеЗарплатыВБухучете") Тогда
Если ЕстьПроведенныеПлатежныеПоручения(СсылкаНаОбъект) Тогда
ИднтификаторБлокировки = "БРО_ОтражениеЗарплатыВБухучете";
ОписаниеБлокировки = "На основании документа созданы проведенные Платежные поручения";
ДопустимоОтключать = Пользователи.РолиДоступны("БРО_СнятиеБлокировкиДокумента");
БлокировкаИзмененияОбъекта = БлокировкаИзмененияОбъектов.ОписаниеБлокировкиИзмененияОбъекта(
ИднтификаторБлокировки,
ОписаниеБлокировки,
ДопустимоОтключать);
КоллекцияБлокировок.Добавить(БлокировкаИзмененияОбъекта);
КонецЕсли;
КонецЕсли;
КонецФункции
Вызов обработчика разместим в расширении модуля БлокировкаИзмененияОбъектовБазовый:
&Вместо("ПараметрыБлокировкиИзмененияОбъекта")
Функция БРО_ПараметрыБлокировкиИзмененияОбъекта(СсылкаНаОбъект, УправляемаяФорма)
КоллекцияБлокировок = ПродолжитьВызов(СсылкаНаОбъект, УправляемаяФорма);
БРО_Сервер.ДобавитьБлокировкуИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект);
Возврат КоллекцияБлокировок;
КонецФункции
У расширения выключаем Безопасный режим.
3. Проверяем
При открытии формы проверяется условие блокировки и в форме устанавливается свойство ТолькоПросмотр, выводится предупреждающая надпись:
Если блокировку допустимо отключать, в меню Ещё создается кнопка разблокировки:
Во вложении расширение с данным примером для ЗУП и отдельно для БП, ЕРП, УХ (документ Реализация товаров услуг, общая форма).
Тестирование проводилось на ЗУП 3.1.23.558 и БП 3.0.135.16.