Программная работа с реквизитами и элементами формы.
Александр Ф.
29.03.2018
20 понравилось
309 просмотров

Программная работа с реквизитами и элементами формы.

На проектах по внедрению или сопровождения 1С очень часто возникают случаи, когда нужно каким-либо образом изменить типовую форму, отображаемую пользователю.

Конечно, это можно сделать с помощью расширений, или в конфигураторе просто изменить структуру управляемой формы. Но! Если конфигурация на поддержке, то при следующем обновлении в случае с расширениями не будет понятно, что за изменения были внесены, а в случае с изменением формы быстро сравнить/объединить измененную форму с новой формой поставщика не получится.

Старым, добрым и проверенным методом является программное добавление реквизитов и элементов на форму при создании этой формы на сервере.

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

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

  1. Программное переопределение обработчиков событий формы

Данное действие позволит выполняться новой процедуре вместо указанной в свойствах формы:

Определение вызываемой процедуры:

Аналогично можно поступить и с обработчиками элементов формы:

Определение вызываемой процедуры:

Результат выполнения команды в пользовательском режиме:

  1. Программное добавление команды на форму.

Команда, отображаемая на форме, состоит из 2-х частей: сама команда и кнопка формы, вызывающая исполнение этой команды:

Программное добавление команды на форму:

Кроме этого необходимо описать процедуру действия команды в модуле формы:

 

Результат работы в пользовательском режиме:

  1. Программное создание групп формы.

Самый распространенный вариант – это создание группы формы с горизонтальной группировкой и подчиненных ей групп с вертикальной группировкой. Для интересности примера сделаем основную группу свертываемой:

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

 4. Программное создание декораций форм.

В прошлой части мы сделали программные группы, но мы не увидим в пользовательском режиме явно результат выполнения программного кода, пока не поместим в эти группы видимые элементы формы.

Программное добавление надписи на форму:

 Программное добавление картинки на форму:

Посмотрим результат исполнения программного кода в пользовательском режиме:

Эта же группа, но свернута:

  1. Программное создание подменю кнопок

Добавленные на форме команды было бы удобно объединить в группы кнопок или подменю. Программное создание подменю:

 6. Перемещение элементов формы между родителями (изменение родителя элемента формы).

Теперь нужно переместить созданные кнопки формы в сформированное подменю. Программное изменение родителя у элемента формы:

Результат выполнения программного кода в пользовательском интерфейсе:

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

Поместить элемент формы в нужное место группы:

Результат выполнения программного кода в пользовательском интерфейсе:

Добавить элемент формы в нужное место группы:

Результат выполнения программного кода в пользовательском интерфейсе:

  1. Программное создание страниц формы.

Очень часто приходится работать с большим количеством элементов на форме. И для того, чтобы пользователю было визуально удобнее работать с такими формами, используются страницы.

Программное добавление группы страниц формы:

Результат выполнения представлен в следующем пункте. 

  1. Программное добавление реквизита на форму.

При необходимости, на форму можно программно добавить реквизит:

Аналогичным образом можно программно добавить на форму существующий реквизит объекта:

Результат выполнения программного кода в пользовательском интерфейсе:

  1. Программное добавление реквизита табличной части на форму.

Можно добавлять не только реквизиты формы, но и реквизиты табличной части:

Аналогичным образом можно программно добавить на форму существующий реквизит табличной части объекта:

Результат выполнения программного кода в пользовательском интерфейсе:

  1. Программное добавление табличной части на форму.

Усложняемся. Теперь программно добавим табличную часть на форму и отобразим ее:

Результат выполнения программного кода в пользовательском интерфейсе:

  1. Программное добавление динамического списка на форму.

И на последок, самое интересное. Программно добавим и выведем динамический список на форму:

Результат выполнения программного кода в пользовательском интерфейсе:

  1. Листинг программного кода для шпаргалок:

 

//-----------------------------------------------

 

 

// Заменит основное действие формы указанным                

ЭтаФорма.УстановитьДействие("ОбработкаВыбора", "Добавленный_ОбработкаВыбора");

// Заменит основное действие элемента формы указанным

Элементы.СуществующийРеквизитОбъекта.УстановитьДействие("ПриИзменении", "Добавленный_ПриИзменииСуществующегоРеквизитаОбъекта");

 

 

//-----------------------------------------------

 

 

// Добавляет команду на форму              

ДобавленнаяКомандаФормы                                                                     = Команды.Добавить("ДобавленнаяКомандаФормы");      

ДобавленнаяКомандаФормы.Действие                    = "ДействиеДобавленнойКомандыФормы";

ДобавленнаяКомандаФормы.Картинка                    = БиблиотекаКартинок.БизнесПроцессОбъект;

ДобавленнаяКомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;

 

// Добавляет кнопку на форму, связывает ее с добавленной командной и помещает на командную панель формы

ДобавленнаяКнопкаФормы                                                                                               = Элементы.Вставить("ДобавленнаяКнопкаФормы", Тип("КнопкаФормы"),

                                                                                                                                                                                                                                                                                                                                          Элементы.ФормаКоманднаяПанель,

                                                                                                                                                                                                                                                                                                                                          Элементы.ФормаСуществующаяКомандаКоманднойПанелиФормы);

ДобавленнаяКнопкаФормы.Заголовок                     = НСтр("ru='Нажмите на добавленную кнопку формы'");

ДобавленнаяКнопкаФормы.ИмяКоманды              = "ДобавленнаяКомандаФормы"; // Имя ранее добавленной команды

 

 

//-----------------------------------------------

 

 

// Добавляет подменю на командную панель формы

ГруппаПодменюКоманднойПанели                                                                             = Элементы.Добавить("ДобавленноеПодменюКоманднойПанелиФормы", Тип("ГруппаФормы"), Элементы.ФормаКоманднаяПанель);

ГруппаПодменюКоманднойПанели.Вид                                                                  = ВидГруппыФормы.Подменю;

ГруппаПодменюКоманднойПанели.Заголовок                          = НСтр("ru='Добавленное подменю командной панели формы'");

ГруппаПодменюКоманднойПанели.Картинка                            = БиблиотекаКартинок.БыстрыеНастройкиОтчета;

ГруппаПодменюКоманднойПанели.Отображение                  = ОтображениеКнопки.КартинкаИТекст;

 

 

//-----------------------------------------------

 

 

// Перемещает существующую кнопку в созданное подменю

// (При обращении к элементам можно использовать как обращение через "Эелменты", так и переменные, которыми они описаны в процессе создания)

Элементы.Переместить(ДобавленнаяКнопкаФормы, ГруппаПодменюКоманднойПанели);

// Поместим существующий элемент перед уже размещенным в созданной группе:

Элементы.Переместить(Элементы.ФормаСуществующаяКомандаКоманднойПанелиФормы, Элементы.ДобавленноеПодменюКоманднойПанелиФормы, ДобавленнаяКнопкаФормы);

 

 

//-----------------------------------------------

 

 

// Добавляет свертываемую группу формы с горизонтальной группировкой

ДобавленнаяГруппаШапкаФормы = Элементы.Добавить("ДобавленнаяГруппаШапкаФормы", Тип("ГруппаФормы"), ЭтаФорма);

ДобавленнаяГруппаШапкаФормы.Вид                                              = ВидГруппыФормы.ОбычнаяГруппа;

ДобавленнаяГруппаШапкаФормы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;

ДобавленнаяГруппаШапкаФормы.Заголовок      = НСтр("ru='Добавленная сворачиваемая группа формы'");

ДобавленнаяГруппаШапкаФормы.ЗаголовокСвернутогоОтображения = НСтр("ru='Развернуть свернутую группу'");

ДобавленнаяГруппаШапкаФормы.Поведение     = ПоведениеОбычнойГруппы.Свертываемая;

// !Важно! Не прокатит:

//ДобавленнаяГруппаШапкаФормы.Свернута = Истина;

 

// Добавляет левую группу свертываемой группы формы с вертикальной гркппировкой

ДобавленнаяГруппаШапкиФормы_Лево = Элементы.Добавить("ДобавленнаяГруппаШапкиФормы_Лево", Тип("ГруппаФормы"), ДобавленнаяГруппаШапкаФормы);

ДобавленнаяГруппаШапкиФормы_Лево.Вид                                                                                                     = ВидГруппыФормы.ОбычнаяГруппа;

ДобавленнаяГруппаШапкиФормы_Лево.ОтображатьЗаголовок        = Ложь;

ДобавленнаяГруппаШапкиФормы_Лево.Отображение                                                      = ОтображениеОбычнойГруппы.Нет;

ДобавленнаяГруппаШапкиФормы_Лево.Группировка                                                       = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;

 

// Добалвляет правую группу свертываемой группы формы с вертикальной группировкой

ДобавленнаяГруппаШапкиФормы_Право = Элементы.Добавить("ДобавленнаяГруппаШапкиФормы_Право", Тип("ГруппаФормы"), ДобавленнаяГруппаШапкаФормы);

ДобавленнаяГруппаШапкиФормы_Право.Вид                                                                                                  = ВидГруппыФормы.ОбычнаяГруппа;

ДобавленнаяГруппаШапкиФормы_Право.ОтображатьЗаголовок     = Ложь;

ДобавленнаяГруппаШапкиФормы_Право.Отображение                                                   = ОтображениеОбычнойГруппы.Нет;

ДобавленнаяГруппаШапкиФормы_Право.Группировка                                                    = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;

 

 

//-----------------------------------------------

 

 

// Добавляет надпись на левую группу формы

НадписьФормы = Элементы.Добавить("ДобавленнаяНадписьФормы", Тип("ДекорацияФормы"), ДобавленнаяГруппаШапкиФормы_Лево);              

НадписьФормы.Заголовок = НСтр("ru='Добавленная надпись формы'");

У вас есть вопрос, нужна помощь консультанта?

Оставьте номер телефона и мы перезвоним!

 

// Добавляет картинку на правую группу формы

КартинкаФормы = Элементы.Добавить("ДобавленнаяКартинкаФормы", Тип("ДекорацияФормы"), ДобавленнаяГруппаШапкиФормы_Право);           

КартинкаФормы.Заголовок = НСтр("Добавленная картинка формы");

КартинкаФормы.Вид = ВидДекорацииФормы.Картинка;

КартинкаФормы.Картинка = БиблиотекаКартинок.АктивныеПользователи;

 

 

//-----------------------------------------------

 

 

// Добалвяет группу страниц формы

ГруппаСтраницФормы                                     = Элементы.Добавить("ДобавленнаяГруппаСтраницФормы", Тип("ГруппаФормы"), ЭтаФорма);

ГруппаСтраницФормы.Вид   = ВидГруппыФормы.Страницы;

ГруппаСтраницФормы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСлеваГоризонтально;

 

// Добалвяет страницу на форму в гуруппе страниц

ГруппаСтраница1Формы                                                       = Элементы.Добавить("ДобавленнаяСтраница1Формы", Тип("ГруппаФормы"), ГруппаСтраницФормы);

ГруппаСтраница1Формы.Вид                                            = ВидГруппыФормы.Страница;

ГруппаСтраница1Формы.Заголовок     = НСтр("ru='Добавленная страница 1 формы'");

 

 

//-----------------------------------------------

 

 

// Добавляет реквизит формы и выводит его на форму

ДобавленныйРеквизитФормыБулево = Новый РеквизитФормы(

                        "ДобавленныйРеквизитФормыБулево",

                        Новый ОписаниеТипов("Булево"),

                        ,

                        НСтр("ru='Добавленный реквизит формы Булево'"),

                        Ложь);

                       

МассивДобавляемыхРеквизитов = Новый Массив;

МассивДобавляемыхРеквизитов.Добавить(ДобавленныйРеквизитФормыБулево);

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);                       

 

ЭлементФормы = Элементы.Добавить("ЭлементДобавленныйРеквизитФормыБулево", Тип("ПолеФормы"), ГруппаСтраница1Формы);

ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;

ЭлементФормы.ПутьКДанным = "ДобавленныйРеквизитФормыБулево";

 

 

// Выводит на форму добавленный в объекте реквизит

ЭлементФормы = Элементы.Добавить("СуществующийНоНеОтображаемыйРеквизитОбъектаСтрока", Тип("ПолеФормы"), ГруппаСтраница1Формы);

ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;

ЭлементФормы.ПутьКДанным = "Объект.СуществующийНоНеОтображаемыйРеквизитОбъекта";

 

 

 

//-----------------------------------------------

 

 

// Добавяет реквизиты табличной части на форму

ДобавленныйРеквизитТЧОбъектаСтрока = Новый РеквизитФормы(

                        "ДобавленныйРеквизитТЧОбъектаСтрока",

                        Новый ОписаниеТипов("Строка"),

                        "Объект.СуществующаяТЧОбъекта",

                        НСтр("ru='Добавленный строковый реквизит существующей ТЧ Объекта'"),

                        Ложь);

                       

МассивДобавляемыхРеквизитов = Новый Массив;

МассивДобавляемыхРеквизитов.Добавить(ДобавленныйРеквизитТЧОбъектаСтрока);

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);                       

 

// Выводит добавленный реквизиты на форму                      

ЭлементФормы = Элементы.Добавить("ТЧ_ДобавленныйРеквизитТЧОбъектаСтрока", Тип("ПолеФормы"), Элементы.СуществующаяТЧОбъекта);

ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;

ЭлементФормы.ПутьКДанным = "Объект.СуществующаяТЧОбъекта.ДобавленныйРеквизитТЧОбъектаСтрока";

 

 

// Выводит на форму добавленный в объекте реквизит

ЭлементФормы = Элементы.Добавить("ТЧ_СуществующийНоНеОтображаемыйРеквизитТЧОбъектаСтрока", Тип("ПолеФормы"), Элементы.СуществующаяТЧОбъекта);

ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;

ЭлементФормы.ПутьКДанным = "Объект.СуществующаяТЧОбъекта.СуществующийНоНеОтображаемыйРеквизитТЧОбъекта";

 

 

//-----------------------------------------------

 

 

// Добавит таблицу значений на форму

МассивТипов = Новый Массив;

МассивТипов.Добавить(Тип("ТаблицаЗначений"));

ОписаниеТипаТЗ = Новый ОписаниеТипов(МассивТипов);

 

РеквизитФормыТаблицаЗначений = Новый РеквизитФормы(

                        "ДобавленнаяТаблицаЗначенийФормы",

                        ОписаниеТипаТЗ,

                        ,

                        НСтр("ru='Добавленная ТЧ на форму'"),

                        Ложь);

                       

// Добавит на форму реквизит таблицы значений               

РеквизитФормыРеквизитТаблицыЗначений = Новый РеквизитФормы(

                        "ДобавленныйРеквизитДобавленнойТаблицыЗначений",

                        Новый ОписаниеТипов("Строка"),

                        "ДобавленнаяТаблицаЗначенийФормы",

                        НСтр("ru='Добавленный реквизит добавленной таблицы значений'"),

                        Ложь);      

 

МассивДобавляемыхРеквизитов = Новый Массив;

МассивДобавляемыхРеквизитов.Добавить(РеквизитФормыТаблицаЗначений);

МассивДобавляемыхРеквизитов.Добавить(РеквизитФормыРеквизитТаблицыЗначений);

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

 

// Выведет на форму добавленную таблицу значений

ДобавляемаяНаФормуДобавленнаяТаблица = Элементы.Добавить("ДобавляемаяНаФормуДобавленнаяТаблица",

                                                                                                                                                                                                                                           Тип("ТаблицаФормы"),

                                                                                                                                                                                                                                           ГруппаСтраница3Формы);

ДобавляемаяНаФормуДобавленнаяТаблица.ПутьКДанным = "ДобавленнаяТаблицаЗначенийФормы";

// Выведет на форму добавленный реквизит добавленной таблицы значений

ДобавляемыйНаФормуРеквизитДобавленнойТаблицы = Элементы.Добавить("ДобавляемыйНаФормуРеквизитДобавленнойТаблицы",

                                                                                                                                                                                                                                                                                           Тип("ПолеФормы"),

                                                                                                                                                                                                                                                                                           ДобавляемаяНаФормуДобавленнаяТаблица);

ДобавляемыйНаФормуРеквизитДобавленнойТаблицы.ПутьКДанным = "ДобавленнаяТаблицаЗначенийФормы.ДобавленныйРеквизитДобавленнойТаблицыЗначений";

 

 

 

//-----------------------------------------------

 

 

// Создаст реквизит динамического списка на форме

ДобавляемыйРеквизитДинамическогоСписка = Новый РеквизитФормы(

                        "ДобавляемыйРеквизитДинамическогоСписка",

                        Новый ОписаниеТипов("ДинамическийСписок"),

                        ,

                        НСтр("ru='Добавленный динамический список'"),

                        Ложь);

 

МассивДобавляемыхРеквизитов = Новый Массив;

МассивДобавляемыхРеквизитов.Добавить(ДобавляемыйРеквизитДинамическогоСписка);

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

 

 

// Опишем параметры динамического списка    

ЭтаФорма.ДобавляемыйРеквизитДинамическогоСписка.ПроизвольныйЗапрос              = Истина;

ЭтаФорма.ДобавляемыйРеквизитДинамическогоСписка.ТекстЗапроса                                   = "Выбрать * Из Справочник.Валюты";                      

ЭтаФорма.ДобавляемыйРеквизитДинамическогоСписка.ОсновнаяТаблица                        = "Справочник.Валюты";

ЭтаФорма.ДобавляемыйРеквизитДинамическогоСписка.УстановитьОбязательноеИспользование("Ссылка", Истина);

 

//Создание элементов формы

ДобавленныйЭлементТаблицаДинамическогоСписка = Элементы.Добавить("ДобавленныйЭлементТаблицаДинамическогоСписка", Тип("ТаблицаФормы"), ГруппаСтраница4Формы);

ДобавленныйЭлементТаблицаДинамическогоСписка.ПутьКДанным = "ДобавляемыйРеквизитДинамическогоСписка";

ДобавленныйЭлементТаблицаДинамическогоСписка.Отображение = ОтображениеТаблицы.Список;

 

НоваяКолонка = Элементы.Добавить("ДобавленнаяКолонкаДинамическогоСписка_Ссылка", Тип("ПолеФормы"), ДобавленныйЭлементТаблицаДинамическогоСписка);

НоваяКолонка.ПутьКДанным                = "ДобавляемыйРеквизитДинамическогоСписка.Ссылка";

   

НоваяКолонка = Элементы.Добавить("ДобавленнаяКолонкаДинамическогоСписка_ПометкаУдаления", Тип("ПолеФормы"), ДобавленныйЭлементТаблицаДинамическогоСписка);

НоваяКолонка.ПутьКДанным                = "ДобавляемыйРеквизитДинамическогоСписка.ПометкаУдаления";

 

НоваяКолонка = Элементы.Добавить("ДобавленнаяКолонкаДинамическогоСписка_Код", Тип("ПолеФормы"), ДобавленныйЭлементТаблицаДинамическогоСписка);

НоваяКолонка.ПутьКДанным                = "ДобавляемыйРеквизитДинамическогоСписка.Код";

 

НоваяКолонка = Элементы.Добавить("ДобавленнаяКолонкаДинамическогоСписка_Наименование", Тип("ПолеФормы"), ДобавленныйЭлементТаблицаДинамическогоСписка);

НоваяКолонка.ПутьКДанным                = "ДобавляемыйРеквизитДинамическогоСписка.Наименование";

НоваяКолонка.РастягиватьПоГоризонтали   = Ложь;

 

 

//-----------------------------------------------

Эта статья помогла вам?

Теги:

Комментарии ( 0 )

Оставить комментарий