Каталог решений - Еще один способ программной модификации управляемых форм

Еще один способ программной модификации управляемых форм

Еще один способ программной модификации управляемых форм

В наличии

Пример программной модификации управляемой формы для случая когда вызов метода СобытияФорм.ПриСозданииНаСервере разработчиком конфигурации не предусмотрен.

Категория:

Описание

Стандартным способом изменения управляемой формы в типовых конфигурациях серии УТ/КА/ERP является разработка (доработка) метода ПриСозданииНаСервере в общем модуле МодификацияКонфигурацииПереопределяемый. Я обычно наследую этот метод в расширение и реализую в нем маршрутизацию до прикладных методов, которые и модифицируют конкретные формы. Со всех сторон прекрасный способ, но как всегда есть но.

И так, в модуле управляемой формы в событии ПриСозданииНаСервере есть вызов переопределяемого метода общего модуля. Примерно так:

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

Но к сожалению этот вызов реализован не во всех формах, соответственно воспользоваться стандартным способом не получиться.

Я предлагаю для решения этой задачи воспользоваться другим общим модулем а именно ОбновлениеИнформационнойБазы. Дело в том, что во всех формах типовых конфигураций в событии ПриСозданииНаСервере идет обращение к методу ПроверитьОбъектОбработан вышеназванного общего модуля. Выглядит это примерно так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

Соответственно, если &Перед вызовом метода выполнить код модификации управляемой формы, то мы не нарушая логики приложения решим свою задачу.

Суть идеи понятна, теперь для примера давайте в конфигурации УТ 11.4 модифицируем форму элемента Плана видов характеристик ДополнительныеРеквизитыИСведения а именно добавим описание (Декорацию) к полю Комментарий. Вот так будет выглядеть конечный результат:

Добавим в конфигурацию расширение со снятым флажком Безопасный режим.

В расширение унаследуем метод ПроверитьОбъектОбработан общего модуля ОбновлениеИнформационнойБазы с директивой &Перед. И реализуем в нем маршрутизацию до прикладного метода, который и будет непосредственно модифицировать форму.

&Перед("ПроверитьОбъектОбработан")
Процедура DEM01_ПроверитьОбъектОбработан(Данные, Форма, ИмяОтложенногоОбработчика, ИмяПроцедурыПрограммногоИнтерфейса) Экспорт
	
	// Тут только маршрутизация
	Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") Тогда
		Если Форма.ИмяФормы = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента" Тогда
			DEM01_МодификацияКонфигурации.ДобавитьЭлементы_ДополнительныеРеквизитыИСведения_ФормаЭлемента(Форма);
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

В расширение добавим новый серверный общий модуль в котором будем реализовывать прикладные методы. Например так:

Реализуем прикладной метод в новом общем модуле:

#Область Модификация_формы_ПВХ_ДополнительныеРеквизитыИСведения
// Вызов из унаследованного ОМ ОбновлениеИнформационнойБазы

Процедура ДобавитьЭлементы_ДополнительныеРеквизитыИСведения_ФормаЭлемента(Форма) Экспорт
	Перем оГруппаРодитель, оЭлементПеред, оЭлемент;
	
	Если Форма.Элементы.Найти("ОстальныеРеквизиты") <> Неопределено
		И Форма.Элементы.Найти("Комментарий") <> Неопределено Тогда
		оГруппаРодитель = Форма.Элементы.ОстальныеРеквизиты;
		оЭлементПеред = Форма.Элементы.Комментарий;
	Иначе
		Возврат;
	КонецЕсли;
	оЭлемент = Форма.Элементы.Вставить("DEM01_КомментарийОписание", Тип("ДекорацияФормы"), оГруппаРодитель, оЭлементПеред);
	оЭлемент.Вид = ВидДекорацииФормы.Надпись;
	оЭлемент.Заголовок = "Добавьте в начало поля Комментарий префикс #Печать# для вывода в печатных формах этого дополнителного реквизита.";
	
КонецПроцедуры

#КонецОбласти

 

Реализацию метода модификации формы делаем максимально безопасным. Добавляем проверки, которые не позволят нарушить дальнейшую работу метода ПроверитьОбъектОбработа.

Все, мы программно модифицировали форму в которой разработчики не предусмотрели вызов переопределяемого метода ПриСозданииНаСервере. Как истинные тру программисты мы не наследовали саму форму в расширение.

В приложенном файле находится расширение конфигурации, которое мы создали.

Разработка и тестирование проводилось на конфигурации 1С Управление торговлей 11.4.8, платформа 8.3.15.1565

has been added to your cart:
Оформление заказа