Современные типовые конфигурации на УФ часто используют вызов различных серверных методов из процедуры ПриСозданииНаСервере() модуля формы. Это обстоятельство можно использовать для динамической модификации формы, без добавления ее в расширение конфигурации.
Рассмотрим такое решение на конкретном примере. ( Управление предприятием ERP 2.4. )
От производства поступила заявка - в АРМ "Выполнение этапов" добавить колонку с указанием получателя продукции. Стандартными средствами программы настроить такой вывод нельзя, нужные данные находятся в табличной части "Выходные изделия" документа "Этап производства". Для решения задачи требуется модификация динамического списка формы. Вносить изменения в основную конфигурацию не хочется , а с применением расширения необходимо добавить форму и зависимые объекты, что тоже, в перспективе обновления релизов, несет потенциальные проблемы.
Рассмотрим вариант динамического изменения формы нашей обработки. В процедуре ПриСозданииНаСервере() модуля формы присутствует вызов методов из общих модулей, в том числе цепочка серверных вызовов с передачей в качестве параметра нашей формы.
Идея состоит в том, чтобы добавить в расширение общий модуль, и там произвести динамическую модификацию объекта. Сделать это можно с любым модулем из цепочки, но последний понравился по контексту.
Итак, для решения задачи нужно создать расширение, добавить в него общий модуль МодификацияКонфигурацииПереопределяемый и разместить процедуру:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Если Форма.ИмяФормы = "Обработка.ВыполнениеЭтаповПроизводства.Форма.Форма" Тогда
// Изменение запроса динамического списка модифицируемой формы
// Добавление вложенного запроса, выполняющего выборку данных ("Получатель")из
// ТЧ "ВыходныеИзделия"
Форма.Список.ТекстЗапроса= СтрЗаменить(Форма.Список.ТекстЗапроса,
"Документ.ЭтапПроизводства2_2 КАК ЭтапыПереопределяемый",
"Документ.ЭтапПроизводства2_2 КАК ЭтапыПереопределяемый
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВыходныеИзделия.Ссылка КАК Ссылка,
| ВыходныеИзделия.Получатель КАК Получатель
| ИЗ
| Документ.ЭтапПроизводства2_2.ВыходныеИзделия КАК ВыходныеИзделия
| ГДЕ ВыходныеИзделия.НомерСтроки =1 )
| КАК ВложенныйЗапрос
| ПО ЭтапыПереопределяемый.Ссылка = ВложенныйЗапрос.Ссылка
|"
);
Форма.Список.ТекстЗапроса= СтрЗаменить(Форма.Список.ТекстЗапроса,
"ЭтапыПереопределяемый.Распоряжение.Очередь КАК ОчередьРаспоряжения",
"ЭтапыПереопределяемый.Распоряжение.Очередь КАК ОчередьРаспоряжения,
| ВложенныйЗапрос.Получатель КАК Получатель");
// Добаввляем колонку "Получатель" в таблицу "Список" на форме
НоваяКолонка = Форма.Элементы.Добавить("Получатель", Тип("ПолеФормы"), Форма.Элементы.Список );
НоваяКолонка.Заголовок = "Получатель";
НоваяКолонка.Вид = ВидПоляФормы.ПолеНадписи;
НоваяКолонка.ПутьКДанным = "Список.Получатель";
НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
КонецЕсли;
КонецПроцедуры
В результате получаем отображение формы с требуемым результатом.
Прилагаемое к публикации расширение содержит опубликованный выше код, тестировалось на конфигурации 1C:ERP Управление предприятием 2.4.11.43.