При доработке типовых конфигураций, для уменьшения издержек на сопровождение конфигурации при ее обновлении, доработка форм должна производиться с максимальным приоритетом программной доработки.
Целью модуля является упрощенное добавление реквизитов формы, добавление их на форму (в том числе и таблиц), так же добавление групп, команд формы и кнопок к ним.
Установка производится через сравнение/объединения конфигурации с файлом поставки, с установкой на поддержку.
Модуль распространяется поставкой. Зависимостей не имеет.
Обновление производится через обновление с сохранением конфигурации поставщика Для проверки корректности совместимистои версий необходимо открыть обработку тестирования обновляемой версии(которая входит в поставку) на версии, на которую будет обновлен модуль.
Необходимо добавить вызов процедуры, содержащей код программного добавления в самое начало следующих процедур:
- ПриСозданииНаСервере()
- ПриЧтенииНаСервер() - если форма имеет возможность открытия существующего объекта
Пример кода подготовки
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ПрефиксПодготовитьФорму();
//Текст процедуры
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПрефиксПодготовитьФорму();
//Текст процедуры
КонецПроцедуры
&НаСервере
Процедура ПрефиксПодготовитьФорму()
Если РедакторФорм.ФормаПодготовлена(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
//Код изменения формы
КонецПроцедуры
Данная архитектура необходима:
- Для возможности отображения данных, которые находятся не в самом объекте.
- Для корректной настройке формы, которая должна происходить при чтении объекта, до вызовая создания на сервере.
Так же данный подход позволяет использовать типовые процедуры, например УправлениеФормой().
Вариант заполнение свойств элемента после инициализации контекста.
КонтекстФормы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект);
КонтекстФормы.Свойства.Вставить("Вид", ВидГруппыФормы.ОбычнаяГруппа);
КонтекстФормы.Свойства.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно);
КонтекстФормы.Свойства.Вставить("ОтображатьЗаголовок", Ложь);
ЭлементГруппаШапка = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстФормы, "ГруппаШапка");
Вариант определение свойств до создания контекста.
Свойства = Новый Структура("Вид, ОтображатьЗаголовок", ВидГруппыФормы.ОбычнаяГруппа, Ложь);
КонтекстФормы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, , , Свойства);
ЭлементГруппаШапка = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстФормы, "ГруппаШапка");
-
Добавление полей
ДобавитьПолеНаФорму(КонтекстЭлемента, ИмяПоля)
КонтекстПоля = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаЛево); КонтекстПоля.Свойства.Вставить("ПутьКДанным", "Статус"); РедакторФорм.ДобавитьПолеНаФорму(КонтекстПоля, "Статус");
ДобавитьПолеНаФормуРеквизитФормы(КонтекстЭлемента, ИмяРеквизита)
КонтекстЭлемента = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаПраво); РедакторФорм.ДобавитьПолеНаФормуРеквизитФормы(КонтекстЭлемента, "Состояние");
-
Добавление групп
ДобавитьГруппуНаФорму(КонтекстЭлемента, ИмяГруппы)
КонтекстСтраницы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект); КонтекстСтраницы.Свойства.Вставить("Вид", ВидГруппыФормы.Страницы); ГруппаСтраницы = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстСтраницы, "ГруппаСтраницы"); КонтекстСтраницы.Свойства.Вид = ВидГруппыФормы.Страница; КонтекстСтраницы.Родитель = ГруппаСтраницы; КонтекстСтраницы.Свойства.Вставить("Заголовок", "Товары"); СтраницаТовары = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстСтраницы, "СтраницаТовары"); КонтекстСтраницы.Свойства.Вставить("Заголовок", "Услуги"); СтраницаУслуги = РедакторФорм.ДобавитьГруппуНаФорму(КонтекстСтраницы, "СтраницаУслуги");
ДобавитьГруппуСКолонкамиЛевоИПраво(КонтекстЭлемента, ИмяОсновнойГруппы)
КонтекстГруппы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаОсновная); РедакторФорм.ДобавитьГруппуСКолонкамиЛевоИПраво(КонтекстГруппы, "Шапка"); ШапкаЛево = Элементы.ШапкаЛево; ШапкаПраво = Элементы.ШапкаПраво;
ДобавитьГруппуОбычную(КонтекстЭлемента, ИмяЭлемента)
КонтекстГруппы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаСтраницаТовары); ГруппаИтогов = РедакторФорм.ДобыавитьГруппуОбычную(КонтекстГруппы, "ГруппаИтогов");
-
Добавление таблиц
ДобавитьТаблицуНаФорму(КонтекстЭлемента, ИмяПоля, ПутьКДанным, СтруктураКолонок)
КонтекстГруппТаблицы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаИтоговойТаблицы); СтруктураКолонок = Новый Структура; СтруктураКолонок.Вставить("ТаблицаКолонка1", "Колонка1"); СтруктураКолонок.Вставить("ТаблицаКолонка2", "Колонка2"); СтруктураКолонок.Вставить("ТаблицаКолонка3", "Колонка3"); ЭлементТаблицаПроверряемыеМетоды = РедакторФорм.ДобавитьТаблицуНаФорму(КонтекстГруппТаблицы, "ИмяТаблицы", "Объект.ТаблицаОбъекта", СтруктураКолонок);
ДобавитьПолеТабличнойЧастиНаформу(КонтекстЭлемента, ПутьТабличнойЧасти, ИмяКолонкиТабличнойЧасти)
КонтекстФормы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект); РедакторФорм.ДобавитьПолеТабличнойЧастиНаформу(КонтекстФормы, "Объект.ИмяТаблицы", "ИмяКолонки");
-
Добавление команд
ДобавитьКнопкуНаФорму(КонтекстЭлемента, ИмяКнопки, ВидКнопки, ИмяКоманды)
КонтекстГруппыКнопок = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ГруппаКнопок); РедакторФорм.ДобавитьКнопкуНаФорму(КонтекстГруппыКнопок, "ИмяКоманды", ВидКнопкиФормы.ОбычнаяКнопка, "Подключаемый_КомандаИмяКнопки");
ДобавитьКомандуИГиперссылкуНаФорму(КонтекстЭлемента, ИмяКоманды, ПроцедураОбработки, ЗаголовокГиперссылки, ГруппаВывода)
КонтекстКоманды = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.Группа); РедакторФорм.ДобавитьКомандуИГиперссылкуНаФорму(КонтекстКоманды, "ИмяКоманды", "Подключаемый_КомандаИмяКоманды", "Очистить все");
ДобавитьКомандуИКнопкуКоманднойПанели(КонтекстЭлемента, ИмяКоманды, ЗаголовокКнопки)
КонтекстКоманды = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.Группа); КонтекстФормы.Родитель = ЭлементТаблицаПроверряемыеМетоды.КоманднаяПанель; РедакторФорм.ДобавитьКомандуИКнопкуКоманднойПанели(КонтекстФормы, "КомандаКнопки3", "Обновить");
ДобавитьКомандуИКнопкуНаФорму(КонтекстЭлемента, ИмяКоманды, ЗаголовокКнопки)
КонтекстКнопки = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаИтоги); РедакторФорм.ДобавитьКомандуИКнопкуНаФорму(КонтекстКнопки, "ИмяКоманды", "Заголовок");
ДобавитьКомандуНаФорму(КонтекстЭлемента, ИмяКоманды, ИмяДействия, Заголовок, Подсказка)
КонтекстКоманда = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.Группа); РедакторФорм.ДобавитьКомандуНаФорму(КонтекстКоманда, "Обновить", "Подключаемый_Обновить", "Обновить информаци");
-
Добавление реквизитов объекта
ДобавитьРеквизитОбъектаНаФорму(КонтекстЭлемента, ИмяРеквизита)
КонтекстГруппыБулево = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.Группа); РедакторФорм.ДобавитьРеквизитОбъектаНаФорму(КонтекстГруппыБулево, "НовыйРеквизит");
ДобавитьПолеНаФормуРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита)
КонтекстГруппы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГуппаЛево); РедакторФорм.ДобавитьПолеНаФормуРеквизитОбъекта(КонтекстГруппы, "ЭтоНалог");
ДобавитьПолеВШапкуФормыРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита
КонтекстГруппы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаШапкаЛево); РедакторФорм.ДобавитьПолеВШапкуФормыРеквизитОбъекта(КонтекстГруппы, "Подразделение");
ДобавитьМногострочноеПолеРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита, Высота )
КонтекстЭлемента = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаПодвал); РедакторФорм.ДобавитьМногострочноеПолеРеквизитОбъекта(КонтекстЭлемента, "Комментарий");
ДобавитьПолеФлажкаНаФормуРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита)
КонтекстГруппы = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаДополнительно); РедакторФорм.ДобавитьПолеФлажкаНаФормуРеквизитОбъекта(КонтекстГруппы, "ЭтоИнтеграционныйОбъект");
ДобавитьГруппуКнопок(КонтекстЭлемента)
КонтекстПанели = РедакторФорм.СоздатьКонтекстЭлемента(ЭтотОбъект, ЭлементТаблицаПроверяемыеМетоды.КоманднаяПанель); РедакторФорм.ДобавитьГруппуКнопок(КонтекстПанели);
Тесты запускаются через vanessa runner: файл run_vanessa.bat.
See the list of contributors who participated in this project.