Недавно столкнулся с ситуацией, когда нужно проверять права доступа пользователей и определенные условия при открытии формы и отказывать в доступе, если они нарушены.
Работаем в расширении.
Если сделать проверку в модуле формы, будет ошибка.
&НаСервере
Процедура ФБ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Если УсловиеОК Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
У ошибки следующая формулировка:
Запрещено изменение параметра, отменяющего действие (параметр номер 1 в процедуре)

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