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

03.09.19

Разработка - Работа с интерфейсом

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

Скачать исходный код

Наименование Файл Версия Размер
Еще один способ программной модификации управляемых форм:
.cfe 6,70Kb
3
.cfe 6,70Kb 3 Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

управляемые формы программная модификация изменение форм

См. также

Управление дашбордами

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17242    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11761    777    elcoan    47    

109

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    10264    157    acces969    31    

120

Модель состояния для MVC

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4243    kalyaka    4    

31

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9134    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    10080    AtamanovYS    19    

142
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 03.09.19 09:19 Сейчас в теме
чесно говоря не понял зачем такие танцы с бубном?

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

Причем, пабарабану
- есть вызов этого обработчика в основной конфигурации или нет
- есть вызов из общих модулей или нет
- вообще все пабарабану - работает без непоняток и насилия мозга.
davdykin; vv2; +2 4 Ответить
2. infosoft-v 884 03.09.19 09:29 Сейчас в теме
(1)
просто добавляем форму в расширение

Вот именно этого я пытаюсь избежать.
3. vv2 03.09.19 09:38 Сейчас в теме
(2) А для чего вы хотите этого избежать?
davdykin; +1 Ответить
6. infosoft-v 884 03.09.19 09:53 Сейчас в теме
(3) две причины:
1. вместе с наследованием формы в расширение наследуются все ссылочные объекты используемые на форме
2. изменение дизайна формы разработчиком типовой конфигурации будет требовать от меня дополнительного внимания к унаследованной форме
14. dhurricane 04.09.19 00:05 Сейчас в теме
(6) В публикации Вы указали, что тестировали на платформе 8.3.15. Если мне не изменяет память, то уже начиная с платформы 8.3.14 расширение формы не наследует все ссылочные объекты, используемые на форме (если конечно об этом явно не "попросить"), и соответственно, если Вы ничего не меняете в дизайне, то и дополнительного внимания не требуется.
suepifanov; Danil.Potapov; vv2; infosoft-v; FreeArcher; +5 Ответить
15. infosoft-v 884 04.09.19 07:57 Сейчас в теме
(14) Спасибо за комментарий. Как то я упустил это изменение в платформе. Обязательно проверю.
4. VmvLer 03.09.19 09:38 Сейчас в теме
(2) это я понял и код в принципе понял, но если необходима модификация многих форм - допустим 50 форм списков по отборам, то предложенный
5. VmvLer 03.09.19 09:42 Сейчас в теме
код превратиться в громадный линейный код

Если Форма.ИмяФормы = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСв
...
ИначеЕсли
....
ИначеЕсли
....

Адепты копания в куче линейного кода конечно попробуют меня распять,
но к счастью таких аборигенов можно встретить редко.

посему считаю, что добавить форму в расширение это меньшее зло, чем пирамиды кода.
7. infosoft-v 884 03.09.19 09:56 Сейчас в теме
(5) Линейный код маршрутизации это не страшно, он стабилен и хорошо читается.
При добавлении формы в расширение я получаю два побочных эффекта:
1. вместе с наследуемой формой в расширение наследуются все ссылочные объекты используемые на форме
2. изменение дизайна исходной формы разработчиком типовой конфигурации будет требовать от меня дополнительного внимания к унаследованной форме
SlavaKron; +1 Ответить
8. VmvLer 03.09.19 10:08 Сейчас в теме
(7) мне больше нечего сказать по теме, если найдутся еще пару адептов линейного кода, то можете создать свое королевство и отправить ко мне дракона.
12. SlavaKron 03.09.19 16:00 Сейчас в теме
(8) А что не так с линейным кодом?
dima_home; +1 Ответить
13. VmvLer 03.09.19 16:14 Сейчас в теме
(12) да все ок с ним, просто на любителя и по ситуации.

в этой ситуации он вреден и выше я разжевал почему.
9. EVKash 15 03.09.19 10:50 Сейчас в теме
(7) Чтобы все это хозяйство не лезло в расширение, достаточно создать пустую конфу с тем же режимом совместимости, создать справочник или документ с таким же названием, проверить ключевые параметры(типа длина наименования), создать пустую форму с таким же названием, эту форму в расширение и там уже в ПриСозданиииНаСервере прописать СобытияФорм.ПриСозданииНаСервере
В основную конфу такое расширение прекрасно загружается и работает.
ASDF2; nomad_irk; skif47; for_sale; infosoft-v; +5 Ответить
10. infosoft-v 884 03.09.19 10:55 Сейчас в теме
11. dandykry 10 03.09.19 15:47 Сейчас в теме
Только недавнечко, 7 месяцев назад, перевели 99% изменений форм в такой модуль. Полет нормальный

http://prntscr.com/p17r85
Оставьте свое сообщение