Еще один способ программной модификации управляемых форм
Разработка - Работа с интерфейсом
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Стандартным способом изменения управляемой формы в типовых конфигурациях серии УТ/КА/ERP является разработка (доработка) метода ПриСозданииНаСервере в общем модуле МодификацияКонфигурацииПереопределяемый. Я обычно наследую этот метод в расширение и реализую в нем маршрутизацию до прикладных методов, которые и модифицируют конкретные формы. Со всех сторон прекрасный способ, но как всегда есть но.
И так, в модуле управляемой формы в событии ПриСозданииНаСервере есть вызов переопределяемого метода общего модуля. Примерно так:
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
Но к сожалению этот вызов реализован не во всех формах, соответственно воспользоваться стандартным способом не получиться.
Я предлагаю для решения этой задачи воспользоваться другим общим модулем а именно ОбновлениеИнформационнойБазы. Дело в том, что во всех формах типовых конфигураций в событии ПриСозданииНаСервере идет обращение к методу ПроверитьОбъектОбработан вышеназванного общего модуля. Выглядит это примерно так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
Соответственно, если &Перед вызовом метода выполнить код модификации управляемой формы, то мы не нарушая логики приложения решим свою задачу.
Суть идеи понятна, теперь для примера давайте в конфигурации УТ 11.4 модифицируем форму элемента Плана видов характеристик ДополнительныеРеквизитыИСведения а именно добавим описание (Декорацию) к полю Комментарий. Вот так будет выглядеть конечный результат:

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

Реализуем прикладной метод в новом общем модуле:
#Область Модификация_формы_ПВХ_ДополнительныеРеквизитыИСведения
// Вызов из унаследованного ОМ ОбновлениеИнформационнойБазы
Процедура ДобавитьЭлементы_ДополнительныеРеквизитыИСведения_ФормаЭлемента(Форма) Экспорт
Перем оГруппаРодитель, оЭлементПеред, оЭлемент;
Если Форма.Элементы.Найти("ОстальныеРеквизиты") <> Неопределено
И Форма.Элементы.Найти("Комментарий") <> Неопределено Тогда
оГруппаРодитель = Форма.Элементы.ОстальныеРеквизиты;
оЭлементПеред = Форма.Элементы.Комментарий;
Иначе
Возврат;
КонецЕсли;
оЭлемент = Форма.Элементы.Вставить("DEM01_КомментарийОписание", Тип("ДекорацияФормы"), оГруппаРодитель, оЭлементПеред);
оЭлемент.Вид = ВидДекорацииФормы.Надпись;
оЭлемент.Заголовок = "Добавьте в начало поля Комментарий префикс #Печать# для вывода в печатных формах этого дополнителного реквизита.";
КонецПроцедуры
#КонецОбласти
Реализацию метода модификации формы делаем максимально безопасным. Добавляем проверки, которые не позволят нарушить дальнейшую работу метода ПроверитьОбъектОбработа.
Все, мы программно модифицировали форму в которой разработчики не предусмотрели вызов переопределяемого метода ПриСозданииНаСервере. Как истинные тру программисты мы не наследовали саму форму в расширение.
В приложенном файле находится расширение конфигурации, которое мы создали.
Разработка и тестирование проводилось на конфигурации 1С Управление торговлей 11.4.8, платформа 8.3.15.1565
Вступайте в нашу телеграмм-группу Инфостарт