1cFormEditor icon indicating copy to clipboard operation
1cFormEditor copied to clipboard

Release

Модуль изменения управляемых форм

При доработке типовых конфигураций, для уменьшения издержек на сопровождение конфигурации при ее обновлении, доработка форм должна производиться с максимальным приоритетом программной доработки.

Целью модуля является упрощенное добавление реквизитов формы, добавление их на форму (в том числе и таблиц), так же добавление групп, команд формы и кнопок к ним.

Быстренько посмотреть актуральный код модуля

Установка

Установка производится через сравнение/объединения конфигурации с файлом поставки, с установкой на поддержку.

Предварительные требования

Модуль распространяется поставкой. Зависимостей не имеет.

Обновление

Обновление производится через обновление с сохранением конфигурации поставщика Для проверки корректности совместимистои версий необходимо открыть обработку тестирования обновляемой версии(которая входит в поставку) на версии, на которую будет обновлен модуль.

Начало работы

Предварительная подготовка

Необходимо добавить вызов процедуры, содержащей код программного добавления в самое начало следующих процедур:

  • ПриСозданииНаСервере()
  • ПриЧтенииНаСервер() - если форма имеет возможность открытия существующего объекта
Пример кода подготовки
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	ПрефиксПодготовитьФорму();
	//Текст процедуры	
КонецПроцедуры 	

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ПрефиксПодготовитьФорму();
	//Текст процедуры	
КонецПроцедуры 

&НаСервере	
Процедура ПрефиксПодготовитьФорму()
	Если РедакторФорм.ФормаПодготовлена(ЭтаФорма) Тогда
		Возврат;
	КонецЕсли;
	//Код изменения формы
КонецПроцедуры 

Данная архитектура необходима:

  • Для возможности отображения данных, которые находятся не в самом объекте.
  • Для корректной настройке формы, которая должна происходить при чтении объекта, до вызовая создания на сервере.

Так же данный подход позволяет использовать типовые процедуры, например УправлениеФормой().

Использование

Базовый пример использования

Вариант заполнение свойств элемента после инициализации контекста.
КонтекстФормы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект);	
КонтекстФормы.Свойства.Вставить("Вид", ВидГруппыФормы.ОбычнаяГруппа);
КонтекстФормы.Свойства.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно);
КонтекстФормы.Свойства.Вставить("ОтображатьЗаголовок", Ложь);
ЭлементГруппаШапка = РедакторФорм.НоваяГруппаФормы(КонтекстФормы, "ГруппаШапка"); 
Вариант определение свойств до создания контекста.
Свойства = Новый Структура("Вид, ОтображатьЗаголовок", ВидГруппыФормы.ОбычнаяГруппа, Ложь);
КонтекстФормы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, , , Свойства);	
ЭлементГруппаШапка = РедакторФорм.НоваяГруппаФормы(КонтекстФормы, "ГруппаШапка"); 

Программный интерфейс

  • Добавление полей

    НовоеПолеФормы(КонтекстЭлемента, ИмяПоля)
    онтекстПоля = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаЛево);	
    онтекстПоля.Свойства.Вставить("ПутьКДанным", "Статус");
    едакторФорм.НовоеПолеФормы(КонтекстПоля, "Статус");
    
    НовоеПолеРеквизитаФормы(КонтекстЭлемента, ИмяРеквизита)
    онтекстЭлемента = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаПраво);
    едакторФорм.НовоеПолеРеквизитаФормы(КонтекстЭлемента, "Состояние");
    
  • Добавление групп

    НоваяГруппаФормы(КонтекстЭлемента, ИмяГруппы)
    онтекстСтраницы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект);
    онтекстСтраницы.Свойства.Вставить("Вид", ВидГруппыФормы.Страницы);
    руппаСтраницы = РедакторФорм.НоваяГруппаФормы(КонтекстСтраницы, "ГруппаСтраницы");
    
    онтекстСтраницы.Свойства.Вид = ВидГруппыФормы.Страница;	
    онтекстСтраницы.Родитель = ГруппаСтраницы;
    онтекстСтраницы.Свойства.Вставить("Заголовок", "Товары");
    траницаТовары = РедакторФорм.НоваяГруппаФормы(КонтекстСтраницы, "СтраницаТовары");	
    
    онтекстСтраницы.Свойства.Вставить("Заголовок", "Услуги");
    траницаУслуги = РедакторФорм.НоваяГруппаФормы(КонтекстСтраницы, "СтраницаУслуги");
    
    НоваяГруппаКолонкиЛевоПраво(КонтекстЭлемента, ИмяОсновнойГруппы)
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаОсновная);
    едакторФорм.НоваяГруппаКолонкиЛевоПраво(КонтекстГруппы, "Шапка");
    апкаЛево = Элементы.ШапкаЛево;
    апкаПраво = Элементы.ШапкаПраво;
    
    НоваяГруппаОбычная(КонтекстЭлемента, ИмяЭлемента)
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаСтраницаТовары);
    руппаИтогов = РедакторФорм.ДобыавитьГруппуОбычную(КонтекстГруппы, "ГруппаИтогов");
    
  • Добавление таблиц

    НоваяТаблицаФормы(КонтекстЭлемента, ИмяПоля, ПутьКДанным, СтруктураКолонок)
    онтекстГруппТаблицы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаИтоговойТаблицы);
    
    труктураКолонок = Новый Структура;
    труктураКолонок.Вставить("ТаблицаКолонка1", "Колонка1");
    труктураКолонок.Вставить("ТаблицаКолонка2", "Колонка2");
    труктураКолонок.Вставить("ТаблицаКолонка3", "Колонка3");
    лементТаблицаПроверряемыеМетоды = РедакторФорм.НоваяТаблицаФормы(КонтекстГруппТаблицы, "ИмяТаблицы", "Объект.ТаблицаОбъекта", СтруктураКолонок);	
    
    НовоеПолеТабличнойЧастиформы(КонтекстЭлемента, ПутьТабличнойЧасти, ИмяКолонкиТабличнойЧасти)
    онтекстФормы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ИмяТаблицы);
    едакторФорм.НовоеПолеТабличнойЧастиформы(КонтекстФормы, "Объект.ИмяТаблицы", "ИмяКолонки");
    
    НовыйДинамическийСписокФормы(КонтекстЭлемента, ИмяСписка, ОсновнаяТаблица)
    екстЗапоса = "ВЫБРАТЬ
    		|	1 Как Номер
    		|
    		|ОБЪЕДИНИТЬ ВСЕ
    		|
    		|ВЫБРАТЬ
    		|	2";				
    труктураСвойств = Новый Структура();
    труктураСвойств.Вставить("ТекстЗапроса", ТекстЗапоса);			
    труктураСвойств.Вставить("ПроизвольныйЗапрос", Истина);	
    онтекстФормы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаМногострочноеПоле, , СтруктураСвойств);				
    едакторФорм.НовыйДинамическийСписокФормы(КонтекстФормы, "ДинамическийСписок", "");	
    
    труктураКолонок = Новый Структура();
    труктураКолонок.Вставить("Номер", "Номер");			
    едакторФорм.НоваяТаблицаФормы(КонтекстФормы, "ДинамическийСписок", "ДинамическийСписок", СтруктураКолонок);	
    
  • Добавление команд

    НоваяКнопкаФормы(КонтекстЭлемента, ИмяКнопки, ВидКнопки, ИмяКоманды)
    онтекстГруппыКнопок = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ГруппаКнопок);
    едакторФорм.НоваяКнопкаФормы(КонтекстГруппыКнопок, "ИмяКоманды", ВидКнопкиФормы.ОбычнаяКнопка, "Подключаемый_КомандаИмяКнопки");
    
    НаКлиенте
    роцедура Подключаемый_ИмяКоманды(Команда)
    
    онецПроцедуры
    
    НоваяКомандаИГиперссылкаФормы(КонтекстЭлемента, ИмяКоманды, ПроцедураОбработки, ЗаголовокГиперссылки, ГруппаВывода)
    онтекстКоманды = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.Группа);
    едакторФорм.НоваяКомандаИГиперссылкаФормы(КонтекстКоманды, "ИмяКоманды", "Подключаемый_КомандаИмяКоманды", "Очистить все");
    
    НаКлиенте
    роцедура Подключаемый_ИмяКоманды(Команда)
    
    онецПроцедуры
    
    НоваяКомандаИКнопкаКоманднойПанели(КонтекстЭлемента, ИмяКоманды, ЗаголовокКнопки)
    онтекстКоманды = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.Группа);
    онтекстФормы.Родитель = ЭлементТаблицаПроверряемыеМетоды.КоманднаяПанель;
    едакторФорм.НоваяКомандаИКнопкаКоманднойПанели(КонтекстФормы, "КомандаКнопки3", "Обновить");
    
    НаКлиенте
    роцедура Подключаемый_КомандаКнопки3(Команда)
    
    онецПроцедуры
    
    НоваяКомандаИКнопкаФормы(КонтекстЭлемента, ИмяКоманды, ЗаголовокКнопки)
    онтекстКнопки = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаИтоги);
    едакторФорм.НоваяКомандаИКнопкаФормы(КонтекстКнопки, "ИмяКоманды", "Заголовок");
    
    НаКлиенте
    роцедура Подключаемый_ИмяКоманды(Команда)
    
    онецПроцедуры
    
    НоваяКомандаФормы(КонтекстЭлемента, ИмяКоманды, ИмяДействия, Заголовок, Подсказка)
    онтекстКоманда = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект);	
    едакторФорм.НоваяКомандаФормы(КонтекстКоманда, "Обновить", "Подключаемый_Обновить", "Обновить информаци");
    
    НаКлиенте
    роцедура Подключаемый_Обновить(Команда)
    
    онецПроцедуры
    
  • Добавление реквизитов объекта

    НовыйРеквизитОбъектаФормы(КонтекстЭлемента, ИмяРеквизита)
    онтекстГруппыБулево = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.Группа);
    едакторФорм.НовыйРеквизитОбъектаФормы(КонтекстГруппыБулево, "НовыйРеквизит");
    
    НовоеПолеФормыРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита)
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГуппаЛево);
    едакторФорм.НовоеПолеФормыРеквизитОбъекта(КонтекстГруппы, "ЭтоНалог");
    
    НовоеПолеШапкиФормыРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаШапкаЛево);
    едакторФорм.НовоеПолеШапкиФормыРеквизитОбъекта(КонтекстГруппы, "Подразделение");
    
    НовоеМногострочноеПолеРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита, Высота )
    онтекстЭлемента = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаПодвал);
    едакторФорм.НовоеМногострочноеПолеРеквизитОбъекта(КонтекстЭлемента, "Комментарий");	
    
    НовоеПолеФлажокФормыРеквизитОбъекта(КонтекстЭлемента, ИмяРеквизита)
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.ГруппаДополнительно);
    едакторФорм.НовоеПолеФлажокФормыРеквизитОбъекта(КонтекстГруппы, "ЭтоИнтеграционныйОбъект");
    
    НоваяГруппаКнопок(КонтекстЭлемента)
    онтекстПанели = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, ЭлементТаблицаПроверяемыеМетоды.КоманднаяПанель);
    едакторФорм.НоваяГруппаКнопок(КонтекстПанели);
    
  • Прочие элементы формы

    НоваяДекорацияНадпись(КонтекстЭлемента, ИмяРеквизита)
    онтекстГруппы = РедакторФорм.НовыйКонтекстЭлемента(ЭтотОбъект, Элементы.Группа);
    едакторФорм.НоваяДекорацияНадпись(КонтекстГруппы, "Новая декорация");
    

Запуск тестов

Тесты запускаются через vanessa runner: файл run_vanessa.bat.

Authors

See the list of contributors who participated in this project.