Предлагаю альтернативный вариант добавления элементов, реквизитов и обработчиков данных добавленных элементов.
Вашему вниманию хочу представить общий модуль и ...общий макет. От разработчика не нужно будет писать ни одной строчки кода, все параметры создаваемых элементов добавляются в макет, и добавляются на форму "ПриСозданииНаСервере".
Итак что нужно сделать.
1) Создать Общий Серверный модуль и скопировать из модуля обработки в модуль код.
2 Создать ОбщийМакет с наименованием "NF_ПФ_MXL_ДопЭлементыФорм" и скопировать макет из обработки в ваш общий макет.
3) Если конфигурация на БАЗЕ БСП или есть модуль "МодификацияКонфигурацииПереопределяемый" тогда добавить вызов в функцию "ПриСозданииНа Сервере"
ИмяОбластиПоУмолчанию=СтрЗаменить(Форма.ИмяФормы,".","_");
ИмяОбщегоМодуляизПункта1.ДобавитьЭлементыНаФормуПоМакету(Форма,ИмяОбластиПоУмолчанию);
Если же такого модуля нет то можно вставить данный код в формы "ПриСозданииНаСервере"
Все в части программирования закончено.
Теперь что умеет делать этот макет..да почти все.
1 Добавить реквизиты формы
2 Добавить элементы формы, в том числе и декорации, кнопки и.т.д.
3 Добавить, изменить обработчики элементов формы.
Итак что бы добавить что нибудь на форму нужно.
1) Добавить в макет горизонтальную область с полным именем формы, где точки заменены на "_" Пример
Документ_КорректировкаПриобретения_Форма_ФормаДокумента |
В макете определены 7 вертикальных областей они подписаны, в каждой области есть колонки которые отвечают за создание элементов, реквизитов, или кнопок.
1-ая область "ДанныеЭлемента" содержит 8 колонок.
- ИмяЭлемента - Это собственно как будет называться ваш элемент на форме, если не хотите его создавать, например вам нужен реквизит, без связанного элемента в этой колонке нужно написать "НеСоздавать". Поле обязательное.
- ТипЭлемента - Тип создаваемого элемента ПолеФормы,ТаблицаФормы,ГруппаФормы,КнопкаФормы, и т.д. то что есть в конфигурации
- ВидЭлемента - Ну тут понятно из названия, это и есть вид создаваемого элемента, ВидПоляФормы.ПолеВвода,ВидДекорацииФормы.Надпись, т.е. так же как вы бы писали это в коде. - обязательное поле если хотите увидеть свой элемент
- ПутьКданным - Собственно путь к данным элемента, например "Объект.Дата", или если это реквизит формы то просто "Дата"
- РодительЭлемента - Тут указывается куда будет добавлен элемент, наименование элемента родителя , если не указать будет вставлен на форму
- СоздаватьКолонки - Не используется.
- ИменаКолонок - Не используется.
- ВставитьПеред - Наименование элемента перед которым вы хотите вставить свой -не обязательное поле
2-ая область "ДопСвойстваЭлемента" 1 колонка.
- ДопСвойстваЭлемента Здесь указываются свойства элемента, свойства зависят от типа и вида элемента т.е здесь можно перечислить свойства элемента как они заданы в конфигураторе . Формат в данном поле"НаименованиеСвойства,ЗначениеСвойства",Отделяются свойства точкой с запятой примеры,если тип значения Свойства текст, то значение пишется в кавычках, в остальных случаях без. примеры есть в прилагаемом макете.
3-ая область "ДанныеРеквизита" данная область заполняется только тогда когда вам помимо элемента нужен еще и связанный с ним реквизит, ну или вы просто хотите добавить реквизит без элемента содержит три колонки.
- ИмяРеквизита - Ну тут все понятно, это как ваш реквизит будет называться.
- ТипРеквизита - Здесь указываете ТипСоздаваемого реквизита пока без поддержки составного типа. т.е если тип Число пишите тут "число". в общем так же как и в функции Новый ОписаниеТипа( ТипРеквизита ) только тут не тип а как раз то что в в функцию тип попадет Тип("ТипРеквизита")
- Путь - Тут указывается путь к реквизиту родителю, если вы хотите допустим добавить колонку в таблицу то тут будет что то типа "Товары", тогда реквизит будет создан как Товары.ИмяРеквизита.
4-ая область "ДопСвойстваРеквизита" аналогична ДопСвойстваЭлемента, только для реквизита 1 колонка
5-ая область "ДанныеКнопки" заполнять нужно если вы указали элемент как кнопку и хотите потом как то обработать нажатие данной кнопки, 2 колонки
- ИмяКоманды - Собственно как и в конфигураторе имякоманды.
- ДействиеКоманды - А вот тут вы прописываете как будет называться обработчик данной команды, потом в форме или в расширении формы вам нужно будет прописать процедуру с таким же именем, что бы у вас отработала кнопка.
6-ая область "ДопСвойстваКоманды" - аналогична другим доп свойствам.
7-ая область "ОбработчикиСобытий" , А вот тут можно прописать обработчики событий элементов которые вы добавили, или же заменить обработчик элемента на свой собственный( сейчас в связи с расширением это не актуально) но для своих элементов нужно
- ИменаОбработчиков - Через запятую перечислите имена обработчиков которые вы хотите потом в коде прописать(обработчики зависят от типа и вида элемента), Пример для элемента полеВвода с наименованием "Тратата" здесь можно написать "ПриИзменении", тогда в форме или расширении Процедура будет называться
ДОП_ТрататаПриИзменении(Элемент)
Обратите внимание на то что наименование процедуры практически такое же как если бы вы формировали ее из конфигуратора, только спереди добавляется префикс "ДОП_"
Ну вот собственно и все.
Да есть одна интересная вещь в ЕРП , если вы макет оставите наименование таким как есть, то там можно изменять макеты прямо из базы. Т.е. можно добавить элемент даже не заходя в конфигуратор, открываете макет в базе добавляете строку, сохраняете и вуаля при следующем открытии формы у вас уже виден добавленный элемент.
Данный код работает уже более года на ЕРП в макете более тысячи строк записей, торможений не замечено.
В прилагаемом макете есть несколько записей для примера как нужно их заполнять.
Тестировалось все на платформе 8.3.13.1865
Конфигурация ЕРП 2.4.6.207 и более ранних версиях.