Голосов: 0
#1
Нам часто приходится дорабатывать различные управляемые формы. Проще внести изменения непосредственно на самой форме, но, для дальнейшего поддержания конфигурации, удобнее вносить все изменения на форме программно. Предлагаю Вам библиотеку для программного изменения управляемых форм, которую можно внедрить в конфигурацию либо совсем бесшовно, либо практически бесшовно.
Для ускорения быстродействия, во всех процедурах библиотеки отсутствуют проверки корректности введенных имен и значений! Для исключения появления ошибок, я приведу подробное описание всех передаваемых в процедуры параметров.
1. Необходимо разместить в дереве элементов формы уже добавленный реквизит объекта, либо реквизит формы.
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// * Имя - Имя добавляемого реквизита
// * Значение - Структура - содержит (все свойства не обязательные):
// ** ИмяГруппы - Строка - имя элемента родителя
// ** ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ** ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// ** Видимость - Булево - значение свойства Видимость
// ** ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// ** Доступность - Булево - значение свойства Доступность
// ** ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ** ОбработкаСобытий - Массив структур - содержит:
// *** Событие - Строка - имя события элемента
// *** Действие - Строка - имя процедуры исполнителя события
//
Процедура РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов) Экспорт
Для каждого ТекРеквизит Из МассивРеквизитов Цикл
ИмяРеквизита = ТекРеквизит.Имя;
ПараметрыРеквизита = ТекРеквизит.Значение;
Если ПараметрыРеквизита.Свойство("ИмяГруппы") Тогда
ЭлементРодитель = Форма.Элементы[ПараметрыРеквизита.ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементРодитель);
Если ПараметрыРеквизита.Свойство("ПутьКДанным") Тогда
Элемент.ПутьКДанным = ПараметрыРеквизита.ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + ИмяРеквизита;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ВидПоляФормы") Тогда
Элемент.Вид = ПараметрыРеквизита.ВидПоляФормы;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Видимость") Тогда
Элемент.Видимость = ПараметрыРеквизита.Видимость;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ТолькоПросмотр") Тогда
Элемент.ТолькоПросмотр = ПараметрыРеквизита.ТолькоПросмотр;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Доступность") Тогда
Элемент.Доступность = ПараметрыРеквизита.Доступность;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ПоместитьПеред") Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПараметрыРеквизита.ПоместитьПеред]);
КонецЕсли;
//--- обработчики событий
Если ПараметрыРеквизита.Свойство("ОбработкаСобытий")
И ТипЗнч(ПараметрыРеквизита.ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ПараметрыРеквизита.ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Первым параметром идет форма, на которой необходимо разместить новые элементы.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет массив, элементами которого являются структуры с описанием размещаемого реквизита. Каждый элемент массива отвечает за размещение отдельного элемента формы.
Тип параметра - Массив. Параметр является обязательным.
Элементом массива (второго параметра) является структура с двумя свойствами - Имя и Значение:
Имя - тип Строка - Имя, которое будет присвоено новому элементу формы. Имя должно быть уникальным!
Значение - тип Структура - Структура свойств добавляемого элемента. Все свойства являются не обязательными, т.е. чтобы просто разместить реквизит в конце дерева элементов, нужно передать пустую структуру. Далее пойдет описание свойств струткуры:
ИмяГруппы - тип Строка - Имя элемента формы, который будет выступать родителем для создаваемого элемента, например группа формы или таблица формы. На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство не определено, то родителем будет выступать сама Форма.
ПутьКДанным - тип Строка - Данный параметр определяет свойство нового элемента ПутьКДанным, например для реквизита Номенклатура табличной части Товары путь к данным будет выглядеть как "Объект.Товары.Номенклатура". Если передать некорректный путь к данным, то возникнет ошибка! Если данное свойство не определено, то по умолчанию путь к данным будет выглядеть как "Объект.<ИмяРеквизита>".
ВидПоляФормы - тип ВидПоляФормы - Определяет какой будет вид поля нового элемента. Если передать вид поля заведомо не совместимый с типом размещаемого реквизита, то платформа определит вид поля по умолчанию для данного типа реквизита. Если данное свойство не определено, то по умолчанию будет установлено ПолеВвода.
Видимость - тип Булево - Определяет свойство нового элемента Видимость. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.
ТолькоПросмотр - тип Булево - Определяет свойство нового элемента ТолькоПросмотр. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Ложь.
Доступность - тип Булево - Определяет свойство нового элемента Доступность. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.
ПоместитьПеред - тип Строка - Если необходимо поместить новый элемент перед каким-либо уже существующим элементом формы, то, в качестве этого параметра, необходимо передать Имя существующего элемента. Если передать имя элемента, которого нет в дереве элементов в рамках одного родителя, то возникнет ошибка, т.е. у нового элемента и существующего элемента должен быть один и тот же родитель, чтобы осуществилось перемещение. Если данное свойство не определено, то по умолчанию новый элемент всегда размещается в конце ветки дерева элементов в рамках своего родителя.
ОбработкаСобытий - тип Массив - Данное свойство может быть не определено и используется, когда для нового элемента необходимо определить обработчики событий. Содержит Структуры со следующими свойствами:
Событие - тип Строка - Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.
Действие - тип Строка - Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.
2. Необходимо изменить несколько свойств для нескольких элементов формы.
// Изменяет свойства элементов формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// СтруктураЭлементов - Структура - содержит:
// * Ключ - Имя редактируемого элемента формы
// * Значение - Массив структур - содержит:
// ** Имя - Строка - имя свойства элемента
// ** Значение - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов) Экспорт
Для каждого ТекРеквизит Из СтруктураЭлементов Цикл
ИмяЭлемента = ТекРеквизит.Ключ;
МассивСвойств = ТекРеквизит.Значение;
Элемент = Форма.Элементы[ИмяЭлемента];
Для каждого СвойствоЭлемента Из МассивСвойств Цикл
Элемент[СвойствоЭлемента.Имя] = СвойствоЭлемента.Значение;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Первым параметром идет форма, на которой необходимо изменить свойства элементов.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет структура, которую будем обходить в цикле.
Тип параметра - Структура. Параметр является обязательным.
Ключ - Имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Значение - тип Массив - Массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Имя - тип Строка - Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.
Значение - тип Произвольный и зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.
3. Необходимо изменить несколько свойств элемента формы.
// Изменяет свойства элемента формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// МассивСвойств - Массив структур - содержит:
// * Имя - Строка - имя свойства элемента
// * Значение - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементаФормы(Форма, ИмяЭлемента, МассивСвойств) Экспорт
СтруктураЭлементов = Новый Структура(ИмяЭлемента, МассивСвойств);
ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов);
КонецПроцедуры
Данная процедура преобразует параметры и передает их в процедуру из пункта 2. Она используется для упрощения, когда нужно изменить свойства только одного элемента.
Первым параметром идет форма, на которой необходимо изменить свойства элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.
Имя - тип Строка - Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.
Значение - тип Произвольный и зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.
4. Необходимо изменить одно свойство элемента формы.
// Изменяет свойства элементов формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// ИмяСвойства - Строка - имя свойства элемента
//
// ЗначениеСвойства - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойствоЭлементаФормы(Форма, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент[ИмяСвойства] = ЗначениеСвойства;
КонецПроцедуры
Первым параметром идет форма, на которой необходимо изменить свойство элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя элемента формы, свойство которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.
Тип параметра - Строка. Параметр является обязательным.
Четвертым параметром идет произвольное значение, которое зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.
Тип параметра - "Произвольный". Параметр является обязательным.
5. Необходимо установить несколько обработчиков событий для элемента формы.
// Устанавливает обработчики событий для элемента формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// МассивСобытий - Массив структур - содержит:
// *Событие - Строка - имя события элемента
// *Действие - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытияЭлементаФормы(Форма, ИмяЭлемента, МассивСобытий) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Для каждого ТекСобытие Из МассивСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецПроцедуры
Первым параметром идет форма, на которой необходимо установить обработчики событий элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя элемента формы, для которого необходимо установить обработчики событий. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет массив структур для установки обработчиков событий элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.
Событие - тип Строка - Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.
Действие - тип Строка - Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.
6. Необходимо установить обработчик события для элемента формы.
// Устанавливает обработчик события для элемента формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// Событие - Строка - имя события элемента
//
// Действие - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытиеЭлементаФормы(Форма, ИмяЭлемента, Событие, Действие) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент.УстановитьДействие(Событие, Действие);
КонецПроцедуры
Первым параметром идет форма, на которой необходимо установить обработчик события элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя элемента формы, для которого необходимо установить обработчик события. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.
Тип параметра - Строка. Параметр является обязательным.
Четвертым параметром идет имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.
Тип параметра - Строка. Параметр является обязательным.
7. Необходимо добавить на форму новую группу.
// Добавляет в дерево элементов формы новую группу
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяГруппы - Строка - имя новой группы
//
// РодительГруппы - Строка - родитель группы. Не обязательно
//
// ВидГруппы - ВидГруппыФормы - вид группы. По умолчанию ОбычнаяГруппа
//
// Группировка - ГруппировкаПодчиненныхЭлементовФормы - вариант группировки. По умолчанию ГоризонтальнаяЕслиВозможно
//
// ОтображатьЗаголовок - Булево - значение свойства ОтображатьЗаголовок группы. По умолчанию Ложь
//
// Заголовок - Строка - заголовок группы. По умолчанию заголовок пустой
//
Процедура ДобавитьГруппуНаФорму(Форма, ИмяГруппы, РодительГруппы = "",
ВидГруппы = Неопределено,
Группировка = Неопределено,
ОтображатьЗаголовок = Ложь,
Заголовок = Неопределено) Экспорт
Если НЕ ПустаяСтрока(РодительГруппы) Тогда
ЭлементРодитель = Форма.Элементы[РодительГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
ГруппаФормы = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭлементРодитель);
ГруппаФормы.Вид = ?(ВидГруппы = Неопределено, ВидГруппыФормы.ОбычнаяГруппа, ВидГруппы);
ГруппаФормы.Группировка = ?(Группировка = Неопределено,
ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно,
Группировка);
ГруппаФормы.ОтображатьЗаголовок = ОтображатьЗаголовок;
ГруппаФормы.Заголовок = Заголовок;
КонецПроцедуры
Первым параметром идет форма, на которую необходимо добавить новую группу.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя новой группы формы. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет имя элемента формы, который будет выступать родителем для создаваемой группы. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка! Если данный параметр не заполнен, то родителем будет выступать сама Форма.
Тип параметра - Строка. Параметр является НЕ обязательным.
Четвертым параметром идет вид группы формы. Если передать вид группы, который не совместим с текущим родителем создаваемой группы, то возникнет ошибка. Если данный параметр не заполнен, то вид группы будет "Обычная группа".
Тип параметра - ВидГруппыФормы. Параметр является НЕ обязательным.
Пятым параметром идет вариант группировки элементов внутри создаваемой группы. Если данный параметр не заполнен, то вариант группировки будет "Горизонтальная если возможно".
Тип параметра - ГруппировкаПодчиненныхЭлементовФормы. Параметр является НЕ обязательным.
Шестым параметром идет признак, нужно ли отображать заголовок создаваемой группы. Если данный параметр не заполнен, то заголовок отображаться не будет.
Тип параметра - Булево. Параметр является НЕ обязательным.
Седьмым параметром идет текст заголовка создаваемой группы. Если шестой параметр не заполнен, либо имеет значение Ложь, то заголовок отображаться не будет. Если данный параметр не заполнен, то заголовок будет пустым.
Тип параметра - Строка. Параметр является НЕ обязательным.
8. Необходимо добавить на форму новые реквизиты формы.
// Добавляет новые реквизиты формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// *ИмяРеквизита - Строка - имя нового реквизита формы
// *ТипРевизита - ОписаниеТипов - тип реквизита. По умолчанию строка неограниченной длины
// *ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
// *Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
// *СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
// *РодительЭлемента - Строка - имя родителя элемента формы,
// *ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитыФормы(Форма, МассивРеквизитов) Экспорт
ДобавляемыеРеквизиты = Новый Массив;
РеквизитыДляРазмещения = Новый Массив;
Для каждого ОписаниеРеквизита Из МассивРеквизитов Цикл
ИмяРеквизита = ОписаниеРеквизита.ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ТипРевизита") Тогда
ТипРевизита = ОписаниеРеквизита.ТипРевизита;
Иначе
ТипРевизита = Новый ОписаниеТипов("Строка");
КонецЕсли;
ЗаголовокРеквизита = "";
Если ОписаниеРеквизита.Свойство("ЗаголовокРеквизита") Тогда
ЗаголовокРеквизита = ОписаниеРеквизита.ЗаголовокРеквизита;
КонецЕсли;
Путь = "";
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Путь = ОписаниеРеквизита.Путь;
КонецЕсли;
СохраняемыеДанные = Ложь;
Если ОписаниеРеквизита.Свойство("СохраняемыеДанные") Тогда
СохраняемыеДанные = ОписаниеРеквизита.СохраняемыеДанные;
КонецЕсли;
РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, ТипРевизита, Путь, ЗаголовокРеквизита, СохраняемыеДанные);
ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
//+ Дополнительное размещение реквизитов на форме
Если ОписаниеРеквизита.Свойство("РодительЭлемента") Тогда
СтруктураЭлемента = Новый Структура;
СтруктураЭлемента.Вставить("ИмяГруппы", ОписаниеРеквизита.РодительЭлемента);
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Шаблон = "%1.%2";
ПутьКДанным = СтрШаблон(Шаблон, ОписаниеРеквизита.Путь, ИмяРеквизита);
Иначе
ПутьКДанным = ИмяРеквизита;
КонецЕсли;
СтруктураЭлемента.Вставить("ПутьКДанным", ПутьКДанным);
ИмяЭлемента = ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ИмяЭлемента") Тогда
ИмяЭлемента = ОписаниеРеквизита.ИмяЭлемента;
КонецЕсли;
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить(ИмяЭлемента, СтруктураЭлемента);
РеквизитыДляРазмещения.Добавить(СтруктураРеквизитов);
КонецЕсли;
//- Дополнительное размещение реквизитов на форме
КонецЦикла;
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РазместитьРеквизитыНаФорме(Форма, РеквизитыДляРазмещения);
КонецПроцедуры
Первым параметром идет форма, на которую необходимо добавить новые реквизиты формы.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет массив структур для определения свойств новых реквизитов формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.
ИмяРеквизита - тип Строка - Имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!
ТипРевизита - тип ОписаниеТипов - Данный параметр определяет, какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данное свойство не определено, то типом данных будет Строка неограниченной длины.
ЗаголовокРеквизита - тип Строка - Отображаемый заголовок нового реквизита формы. Если данное свойство не определено, то в качестве заголовка будет свойство ИмяРеквизита.
Путь - тип Строка - Данное свойство используется, если создаваемый реквизит относится к другому реквизиту формы, например к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данное свойство не определено, то новый реквизит будет принадлежать непосредственно форме.
СохраняемыеДанные - тип Булево - Если новый реквизит формы будет содержать сохраняемые данные, то необходимо передать в качестве данного свойства Истина. Если данное свойство не определено, то по умолчанию значение будет Ложь.
РодительЭлемента - тип Строка - Если, помимо создания реквизита формы, его нужно разместить в дереве элементов, то необходимо определить у структуры данное свойство. Значение данного свойства определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого свойства должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство определено, то его необходимо использовать в паре с процедурой "РеквизитыДляРазмещения" из п.1. Если данное свойство не определено, то реквизит не будет размещен в дереве элементов формы. Если данное свойство определено и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.
ИмяЭлемента - тип Строка - Используется только в паре со свойством РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальным! Если данное свойство не определено, то именем будет ИмяРеквизита.
9. Необходимо добавить на форму новый реквизит формы.
// Добавляет новый реквизит формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяРеквизита - Строка - имя нового реквизита формы
//
// ТипРевизита - ОписаниеТипов - тип реквизита. По умолчанию строка
//
// ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
//
// Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//
// СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//
// РодительЭлемента - Строка - имя родителя элемента формы,
// если дополнительно необходимо разместить на форме. Не обязательный
//
// ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитФормы(Форма, ИмяРеквизита, ЗаголовокРеквизита = "", Путь = "",
СохраняемыеДанные = Ложь, РодительЭлемента = "", ИмяЭлемента = "") Экспорт
СтруктураРеквизита = Новый Структура;
СтруктураРеквизита.Вставить("ИмяРеквизита", ИмяРеквизита);
Если ЗначениеЗаполнено(ЗаголовокРеквизита) Тогда
СтруктураРеквизита.Вставить("ЗаголовокРеквизита", ЗаголовокРеквизита);
КонецЕсли;
Если ЗначениеЗаполнено(Путь) Тогда
СтруктураРеквизита.Вставить("Путь", Путь);
КонецЕсли;
Если ЗначениеЗаполнено(СохраняемыеДанные) Тогда
СтруктураРеквизита.Вставить("СохраняемыеДанные", СохраняемыеДанные);
КонецЕсли;
Если ЗначениеЗаполнено(РодительЭлемента) Тогда
СтруктураРеквизита.Вставить("РодительЭлемента", РодительЭлемента);
КонецЕсли;
Если ЗначениеЗаполнено(ИмяЭлемента) Тогда
СтруктураРеквизита.Вставить("ИмяЭлемента", ИмяЭлемента);
КонецЕсли;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(СтруктураРеквизита);
ДобавитьРеквизитыФормы(Форма, МассивРеквизитов);
КонецПроцедуры
Данная процедура преобразует параметры и передает их в процедуру из пункта 8. Она используется для упрощения, когда нужно добавить только один реквизит формы.
Первым параметром идет форма, на которую необходимо добавить новый реквизит формы.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет описание какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данный параметр не заполнен, то типом данных будет Строка неограниченной длины.
Тип параметра - ОписаниеТипов. Параметр является НЕ обязательным.
Четвертым параметром идет значение отображаемого заголовка нового реквизита формы. Если данный параметр не заполнен, то в качестве заголовка будет параметр ИмяРеквизита.
Тип параметра - Строка. Параметр является НЕ обязательным.
Пятым параметром идет путь к другому реквизиту формы и используется, если создаваемый реквизит относится, например, к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данный параметр не заполнен, то новый реквизит будет принадлежать непосредственно форме.
Тип параметра - Строка. Параметр является НЕ обязательным.
Шестым параметром идет признак, что новый реквизит формы будет содержать сохраняемые данные. Если данный параметр не заполнен, то по умолчанию значение будет Ложь.
Тип параметра - Булево. Параметр является НЕ обязательным.
Седьмым параметром идет имя родительского элемента формы. Данный параметр используется, если, помимо создания реквизита формы, его нужно разместить в дереве элементов. Значение данного параметра определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого параметра должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данный параметр используется, то его необходимо использовать в паре с процедурой "РеквизитыДляРазмещения" из п.1. Если данный параметр не заполнен, то реквизит не будет размещен в дереве элементов формы. Если данный параметр заполнен и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.
Тип параметра - Строка. Параметр является НЕ обязательным.
Восьмым параметром идет имя элемента формы, к которому будет относится новый реквизит формы. Используется только в паре с параметром РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальным! Если данный параметр не заполнен, то именем будет ИмяРеквизита.
Тип параметра - Строка. Параметр является НЕ обязательным.
10. Необходимо добавить для формы новую команду и разместить ее на форме.
// Добавляет новую команду формы. Дополнительно можно сразу разменить кнопку на форме
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяКоманды - Строка - имя новой команды формы
//
// ДействиеКоманды - Строка - имя обработчика для команды
//
// ИмяГруппы - Строка - имя родительского элемента, если необходимо разместить команду на форме
// - Неопределено - если нужно только создать новую команду
// По умолчанию команда размещается в корне формы
//
// ВидКнопки - ВидКнопкиФормы - вид кнопки формы. По умолчанию ОбычнаяКнопка или КнопкаКоманднойПанели,
// зависит от родителя
//
// Заголовок - Строка - заголовок кнопки формы. Не обязательный
//
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить кнопку формы. Не обязательный
//
// Картинка - Картинка - картинка кнопки формы. Не обязательный
//
// ОтображениеКнопки - ОтображениеКнопки - вариант отражение кнопки на форме. Учитывается только если
// заполнен параметр Картинка. Не обязательный
//
Процедура ДобавитьРазместитьКомандуФормы(Форма, ИмяКоманды, ДействиеКоманды, ИмяГруппы = "", ВидКнопки = Неопределено,
Заголовок = "", ПоместитьПеред = "",
Картинка = Неопределено, ОтображениеКнопки = Неопределено) Экспорт
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = ДействиеКоманды;
Если ЗначениеЗаполнено(Заголовок) Тогда
Команда.Заголовок = Заголовок;
КонецЕсли;
Если Картинка <> Неопределено Тогда
Команда.Картинка = Картинка;
Если ОтображениеКнопки <> Неопределено Тогда
Команда.Отображение = ОтображениеКнопки;
КонецЕсли;
КонецЕсли;
Если ИмяГруппы = Неопределено Тогда
Возврат;
ИначеЕсли ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
КнопкаФормы = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементРодитель);
КнопкаФормы.ИмяКоманды = ИмяКоманды;
Если ВидКнопки <> Неопределено Тогда
КнопкаФормы.Вид = ВидКнопки;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(КнопкаФормы, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
КонецПроцедуры
Первым параметром идет форма, для которой необходимо добавить новую команду.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.
Вторым параметром идет имя, которое будет присвоено новой команде. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.
Третьим параметром идет имя процедуры обработчика для новой команды. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать команда не будет.
Тип параметра - Строка. Параметр является обязательным.
Четвертым параметром идет имя родительского элемента формы, если команду необходимо разместить на форме. Если в качестве данного параметра передать Неопределено, то процедура завершится и команда на форме размещена не будет. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данный параметр заполнен пустой строкой, то родителем будет сама Форма. Если данный параметр не заполнен, то команда на форме будет размещена и родителем будет сама Форма.
Тип параметра - Строка или Неопределено. Параметр является НЕ обязательным.
Пятым параметром идет вид кнопки, к которой будет привязана команда. Если данный параметр не заполнен, то вид кнопки будет либо ОбычнаяКнопка, либо КнопкаКоманднойПанели, в зависимости от родителя.
Тип параметра - ВидКнопкиФормы. Параметр является НЕ обязательным.
Шестым параметром идет заголовок новой кнопки формы. Если данный параметр не заполнен, то заголовок будет определяться от имени команды.
Тип параметра - Строка. Параметр является НЕ обязательным.
Седьмым параметром идет имя элемента формы, перед которым необходимо разместить новую кнопку формы. Если передать имя элемента, которого нет в дереве элементов в рамках одного родителя, то возникнет ошибка, т.е. у новой кнопки и существующего элемента должен быть один и тот же родитель, чтобы осуществилось перемещение. Если данный параметр не заполнен, то новая кнопка будет размещена в конце дерева элементов формы.
Тип параметра - Строка. Параметр является НЕ обязательным.
Восьмым параметром идет картинка для новой кнопки формы.
Тип параметра - Картинка. Параметр является НЕ обязательным.
Девятым параметром идет вариант отображения новой кнопки на форме. Данный параметр будет учитываться только, если заполнен параметр Картинка.
Тип параметра - ОтображениеКнопки. Параметр является НЕ обязательным.
В модуле объекта обработки есть:
- все эти процедуры,
- дополнительная процедура, которую можно использовать в паре с процедурой общего модуля СобытияФорм.ПриСозданииНаСервере (если в вашей конфигурации она имеется),
- примеры использования процедур библиотеки.
Для просмотра содержимого вам необходимо зарегистрироваться!Для просмотра содержимого вам необходимо зарегистрироваться!
Последнее редактирование модератором:
- Статус
- В этой теме нельзя размещать новые ответы.