wwall / 1cFormEditor

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Release

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

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

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

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

Установка

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

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

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

Обновление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Authors

See the list of contributors who participated in this project.

About


Languages

Language:1C Enterprise 99.4%Language:Gherkin 0.6%Language:Batchfile 0.1%