В публикации представлен модуль программного добавления реквизитов и пример его использования при доработке типовых форм.
Концепция модуля: Модуль поставляется через поставку. Проверка обратной совместимости новых версий модуля, обеспечивается обработкой тестирования, обновляющейся версии. Модуль имеет сборочную линию на Jenkins, собирающую релиз из проекта EDT и запускающую сценарий тестирования ADD(не опубликована).
Программный интерфейс, добавляющий элементы на форму всегда использует контекст элемента, создается функцией СоздатьКонтекстЭлемента.
Контекст элемента - структура, со свойствами:
- Форма - Форма добавления элемента.
- Родитель - Группа добавляемого элемента
- РасположитьПередЭлементом - элемент, перед которым будет расположен элемент.
- Свойства - структура, содержащая свойства элемента, которые будут установлены новому элементу.
Остальная логика реализована в функциях, отвечающих за добавление соответствующих элементов.
Полная документация: https://github.com/huxuxuya/1cFormEditor/blob/master/README.md
Область применения: доработка всех типовых форм, для облегчения последующей поддержки конфигурации(обновления).
Основные возможности:
- Добавление групп на форму
- Добавление таблиц на форму
- Добавление команд и вывод на форму
- Добавление элементов формы и объекта
Зачем нужен модуль?
Меньше строк
Лучше читабельность
Пример формы полностью сгенерированной модулем:
Описание демонстрационного примера использования:
- В примере показывается добавление модуля в типовую конфигурацию, изначально, находящуюся на поддержке, с добавлением конфигурации поставщика поставляемого модуля.
- Добавление реквизитов и табличной части в метаданные документа.
- Программный вывод элементов на форму:
- Новой страницы
- Булевого реквизита
- Числового реквизита
- Многострочного реквизита
- Табличной части документа с колонками
Код демонстрационного примера:
//Добавление страницы
КонтекстСтраницы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект);
КонтекстСтраницы.Свойства.Вставить("Вид", ВидГруппыФормы.Страница);
КонтекстСтраницы.Свойства.Вставить("Заголовок", "График оплат");
КонтекстСтраницы.Родитель = Элементы.Страницы;
СтраницаГрафикОплат = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстСтраницы, "префикс_СтраницаГрафикОплат");
//Добавление таблицы на форму
КонтекстГрафикОплат = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, СтраницаГрафикОплат);
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("префикс_ГрафикОплатДатаОплаты", "ДатаОплаты");
СтруктураКолонок.Вставить("префикс_ГрафикОплатПроцентОплаты", "ПроцентОплаты");
ЭлементТаблицаОплат = РедакторФорм.ДобавитьТаблицуНаФорму(КонтекстГрафикОплат, "префикс_ГрафикОплаты", "Объект.префикс_ГрафикОплаты", СтруктураКолонок);
//Добавление многострочного поля
КонтекстОписания = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, СтраницаГрафикОплат);
РедакторФорм.ДобавитьМногострочноеПолеРеквизитОбъекта(КонтекстОписания, "префикс_ОписаниеЭтаповОплаты");
//Добавление группы скидки
КонтекстГруппаСкидка = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ЭтотОбъект, Элементы.ОтветственныйКомментарий);
КонтекстГруппаСкидка.Свойства.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда);
ГруппаСкидка = РедакторФорм.ДобавитьГруппуОбычную(КонтекстГруппаСкидка, "ГруппаСкидка");
КонтекстСумма = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаСкидка);
ЭлементПроцентСкидки = РедакторФорм.ДобавитьРеквизитОбъектаНаФорму(КонтекстСумма, "префикс_ПроцентСкидки");
КонтекстСумма.Свойства.Вставить("ТолькоПросмотр", Истина);
ЭлементСуммаСкидки = РедакторФорм.ДобавитьРеквизитОбъектаНаФорму(КонтекстСумма, "префикс_СуммаСкидки");
//Добавление группы менеджера
КонтекстМенеджерГруппа = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ШапкаСправа);
РедакторФорм.ДобавитьГруппуСКолонкамиЛевоИПраво(КонтекстМенеджерГруппа, "ГруппаМенеджер");
КонтекстМенеджер = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаМенеджерЛево);
ЭлементЕстьМенеджер = РедакторФорм.ДобавитьРеквизитОбъектаНаФорму(КонтекстМенеджер, "префикс_ЕстьМенеджер");
КонтекстМенеджер.Родитель = Элементы.ГруппаМенеджерПраво;
КонтекстМенеджер.Свойства.Вставить("ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет);
КонтекстМенеджер.Свойства.Вставить("РастягиватьПоГоризонтали", Ложь);
КонтекстМенеджер.Свойства.Вставить("Ширина", 35);
ЭлементМенеджер = РедакторФорм.ДобавитьРеквизитОбъектаНаФорму(КонтекстМенеджер, "префикс_Менеджер");
Видеозапись разработки примера для демонстрации использования модуля и добавление его через поставку для типовой конфигурации(видео без звука).
Платформы на которых протестирована работа конфигурации:
8.3.13.1644
8.3.14.1630
8.3.16.869
8.3.16.1063