Столкнулся давеча с проблемой: при добавлении реквизита в типовую конфу принято на форму его выводить программно. Сие упрощает дальнейшее обновление, поэтому разработчиками БСП для подобных целей заведён специальный ОМ "МодификацияКонфигурацииПереопределяемый". А в нашем случае нужен конкретный его метод
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
который вызывается из одноимённых процедур каждой формы, сделанной по технологии БСП.
Так вот, чтобы не добавлять туда код вывода реквизита на форму каждый раз, при добавлении нового реквизита в объект конфигурации, и написана эта статья.
Идея такая:
Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец слово (можно не матерное).
На форму объекта новый реквизит далее попадает автоматом в спец группу "Дополнительно".
Для этого в процедуру МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере нужно добавить вызов нижеследующей процедуры, смысл которой понятен из её комментария и текста.
Такой подход особенно подходит к концепции, когда добавляемые на типовую форму реквизиты намеренно выводятся на отдельную закладку.
//Добавляет нетиповые доп реквизиты на форму
//1. реквизит считается дополнительным, если его комментарий начинается со строки "+доп"
//(смысловая нагрузка: "+" = добавить, "доп" = на закладку "Дополнительно")
//2. реквизит добавляется на форму, только если в ней используется механизм доп реквизитов БСП
//(а он используется почти во всех формах элемента)
//определяется это по наличию в элементах формы группы "ГруппаДополнительныеРеквизиты"
//
//Автор: Патриот 2016_07
Процедура _ДобавитьНетиповыеРеквизиты(Форма)
Попытка
ВсеРеквизиты = Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы).Родитель().Реквизиты;
Исключение
//значит у объекта нет коллекции "Реквизиты" (например у "Журналы документов")
Возврат;
КонецПопытки;
Реквизиты = Новый Массив;
Для Каждого Реквизит Из ВсеРеквизиты Цикл
Если ВРег(Лев(Реквизит.Комментарий, 4)) = "+ДОП" Тогда
Реквизиты.Добавить(Реквизит);
КонецЕсли;
КонецЦикла;
Если Реквизиты.Количество() = 0 Тогда
Возврат;
КонецЕсли;
//Добавляем страницу с Доп реквизитами следом за типовой страницей ГруппаДополнительныеРеквизиты
ТиповаяГруппа = Форма.Элементы.Найти("ГруппаДополнительныеРеквизиты");
Если ТиповаяГруппа = Неопределено Тогда
Возврат;
КонецЕсли;
_грДопРеквизиты = Форма.Элементы.Добавить("_грДопРеквизиты", Тип("ГруппаФормы"), ТиповаяГруппа.Родитель);
_грДопРеквизиты.Заголовок = "Доп реквизиты";
//копируем свойства новой группы из типовой
//именно копируем, а не задаём константно, т.к. в разных формах эти свойства м.б. разными
_грДопРеквизиты.Вид = ТиповаяГруппа.Вид;
_грДопРеквизиты.Группировка = ТиповаяГруппа.Группировка;
_грДопРеквизиты.ОтображатьЗаголовок = ТиповаяГруппа.ОтображатьЗаголовок;
_грДопРеквизиты.Отображение = ТиповаяГруппа.Отображение;
Для Каждого Реквизит Из Реквизиты Цикл
НовыйЭлемент = Форма.Элементы.Добавить(Реквизит.Имя, Тип("ПолеФормы"), _грДопРеквизиты);
НовыйЭлемент.ПутьКДанным = "Объект." + Реквизит.Имя;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЦикла;
КонецПроцедуры
ОпосляСкриптум:
1. При необходимости, можно сделать так же и для ТЧ.
2. Можно добавлять группу "_грДопРеквизиты" и при отсутствии группы "ГруппаДополнительныеРеквизиты", например в корень формы или искать группу с типом "страницы" и добавлять в неё в качестве последней страницы, но мне пока такого не требовалось.
ОпосляОпосляСкриптум:
В какой-то мере идея подсмотрена из механизма доп реквизитов БСП, поэтому укажу здесь также на плюсы и минусы этого механизма относительно изложенного в статье.
плюсы доп. реквизитов БСП:
- для добавления доп реквизита БСП не нужен программист
- пользователь может задать условие видимости реквизита
- не требуется обновление БД (а в случае добавления реквизита обновиться динамически нельзя - надо гнать всех пользователей из базы)
плюсы обычных реквизитов:
- работа в запросе (для выбора каждого доп реквизита надо делать соединение с ТЧ доп реквизиты)
- обращение в коде (доп реквизит придётся либо искать по наименованию, чего никому бы не посоветовал, либо хранить на него ссылку в некоем соответствии (в ПВХ или РС) в базе)
- возможность задавать любые свойства реквизита, например, связь по типу или параметры выбора
------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!