Иногда бывает нужно открывать различные формы в зависимости от выполнения каких-либо условий. Например, для элемента справочника Товары нужно открывать разные формы для собственно товара и для услуги.
Примечание
Пример можно посмотреть в демонстрационной базе «Открытие форм», в модуле менеджера справочника Товары.
Для решения этой задачи в модуле менеджера объекта следует создать обработчик события ОбработкаПолученияФормы. В этом обработчике нужно выполнить все необходимые проверки и принять решение о том, какую форму следует открывать. И соответствующим образом переопределить параметр обработчика ВыбраннаяФорма (листинг 3.20).
Листинг 3.20. Обработчик «ОбработкаПолученияФормы» в модуле менеджера
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если Параметры.Свойство("Ключ") Тогда
Если ВидФормы = "ФормаОбъекта" И Параметры.Ключ.Родитель.Наименование = "Услуги" Тогда
ВыбраннаяФорма = "Справочник.Товары.Форма.ПроизвольнаяФормаТовара";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В этом обработчике (для существующих товаров) сначала проверяется, что открывается форма объекта (параметр ВидФормы = “ФормаОбъекта”). Ссылка на объект передается в структуре параметров открываемой формы (Параметры.Ключ).
Поскольку у товара нет специального реквизита, определяющего его вид, будем считать, что все услуги собраны в отдельной папке справочника с наименованием «Услуги».
Если элемент справочника находится в этой папке, то мы переопределяем параметр ВыбраннаяФорма. Тем самым указываем форму, которая должна быть открыта вместо формы объекта – ПроизвольнаяФормаТовара. И параметр СтандартнаяОбработка устанавливаем в значение Ложь.
В результате для услуг будет открыта произвольная форма товара, основная форма товара будет открываться только для товаров, не содержащихся в папке «Услуги». Ну и, естественно, для вновь создаваемых товаров (у которых свойство Ключ в структуре параметров формы не определено) мы никаких проверок не делаем.
Если требуется открывать не форму услуги, а какую-то связанную с ней информацию (например, счет), то нужно также переопределить и параметр Ключ, чтобы он содержал ссылку на этот связанный объект.