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

03.09.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Еще один способ программной модификации управляемых форм:
.cfe 6,70Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

См. также

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

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63460    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19287    27    6    

42

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

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

1500 руб.

06.10.2020    10585    7    7    

11

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

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

20.08.2024    19445    mrXoxot    44    

126

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    9164    smielka    37    

103

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

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

27.12.2023    17169    1191    elcoan    50    

123

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

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

2 стартмани

10.04.2023    12304    165    acces969    31    

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

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

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

Вот именно этого я пытаюсь избежать.
3. vv2 03.09.19 09:38 Сейчас в теме
(2) А для чего вы хотите этого избежать?
davdykin; +1 Ответить
6. infosoft-v 933 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 933 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 933 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 16 03.09.19 10:50 Сейчас в теме
(7) Чтобы все это хозяйство не лезло в расширение, достаточно создать пустую конфу с тем же режимом совместимости, создать справочник или документ с таким же названием, проверить ключевые параметры(типа длина наименования), создать пустую форму с таким же названием, эту форму в расширение и там уже в ПриСозданиииНаСервере прописать СобытияФорм.ПриСозданииНаСервере
В основную конфу такое расширение прекрасно загружается и работает.
ASDF2; nomad_irk; skif47; for_sale; infosoft-v; +5 Ответить
10. infosoft-v 933 03.09.19 10:55 Сейчас в теме
11. dandykry 11 03.09.19 15:47 Сейчас в теме
Только недавнечко, 7 месяцев назад, перевели 99% изменений форм в такой модуль. Полет нормальный

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