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