Библиотека программного изменения формы (УФ)

07.08.20

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Библиотека программного изменения формы (УФ):
.epf 8,81Kb ver:1.1
42
42 Скачать (1 SM) Купить за 1 850 руб.

Для ускорения быстродействия, во всех процедурах библиотеки отсутствуют проверки корректности введенных имен и значений! Для исключения появления ошибок, я приведу подробное описание всех передаваемых в процедуры параметров.

  1. Необходимо разместить в дереве элементов формы уже добавленный реквизит объекта, либо реквизит формы.

// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  МассивРеквизитов  - Массив структур - содержит:
//     * Имя  - Имя добавляемого реквизита
//     * Значение - Структура - содержит (все свойства не обязательные):
//        ** ИмяГруппы 			- Строка - имя элемента родителя
//        ** ПутьКДанным		- Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
//        ** ВидПоляФормы		- ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
//        ** Видимость 			- Булево - значение свойства Видимость
//        ** ТолькоПросмотр 	- Булево - значение свойства ТолькоПросмотр
//        ** Доступность 		- Булево - значение свойства Доступность
//        ** ПоместитьПеред		- Строка - имя элемента, перед которым необходимо разместить
//        ** ОбработкаСобытий 	- Массив структур - содержит:
//           *** Событие 	- Строка - имя события элемента
//           *** Действие 	- Строка - имя процедуры исполнителя события
//
Процедура РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов) Экспорт

	Для каждого ТекРеквизит Из МассивРеквизитов Цикл
		
		ИмяРеквизита 		= ТекРеквизит.Имя;
		ПараметрыРеквизита 	= ТекРеквизит.Значение;
				
		Если ПараметрыРеквизита.Свойство("ИмяГруппы") Тогда
			ЭлементРодитель = Форма.Элементы[ПараметрыРеквизита.ИмяГруппы];	
		Иначе
			ЭлементРодитель = Форма;
		КонецЕсли;
		
		Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементРодитель);
				
		Если ПараметрыРеквизита.Свойство("ПутьКДанным") Тогда
			Элемент.ПутьКДанным = ПараметрыРеквизита.ПутьКДанным;
		Иначе 
			Элемент.ПутьКДанным = "Объект." + ИмяРеквизита;
		КонецЕсли; 
		
		Если ПараметрыРеквизита.Свойство("ВидПоляФормы") Тогда		
			Элемент.Вид = ПараметрыРеквизита.ВидПоляФормы;	
		Иначе
			Элемент.Вид = ВидПоляФормы.ПолеВвода;
		КонецЕсли;                               	
		
		Если ПараметрыРеквизита.Свойство("Видимость") Тогда
			Элемент.Видимость = ПараметрыРеквизита.Видимость;	
		КонецЕсли; 		
		
		Если ПараметрыРеквизита.Свойство("ТолькоПросмотр") Тогда
			Элемент.ТолькоПросмотр = ПараметрыРеквизита.ТолькоПросмотр;	
		КонецЕсли; 		
		
		Если ПараметрыРеквизита.Свойство("Доступность") Тогда
			Элемент.Доступность = ПараметрыРеквизита.Доступность;	
		КонецЕсли; 		
				
		Если ПараметрыРеквизита.Свойство("ПоместитьПеред") Тогда
			Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПараметрыРеквизита.ПоместитьПеред]);	
		КонецЕсли; 		
		
		//--- обработчики событий
		Если ПараметрыРеквизита.Свойство("ОбработкаСобытий")
			И ТипЗнч(ПараметрыРеквизита.ОбработкаСобытий) = Тип("Массив") Тогда
			
			Для каждого ТекСобытие Из ПараметрыРеквизита.ОбработкаСобытий Цикл
				Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);		
			КонецЦикла; 			
			
		КонецЕсли; 
		
	КонецЦикла; 	
	
КонецПроцедуры

Первым параметром идет форма, на которой необходимо разместить новые элементы.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.

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

Элементом массива (второго параметра) является структура с двумя свойствами - Имя и Значение:

    Имя - тип Строка - Имя, которое будет присвоено новому элементу формы. Имя должно быть уникальным!

    Значение - тип Структура - Структура свойств добавляемого элемента. Все свойства являются не обязательными, т.е. чтобы просто разместить реквизит в конце дерева элементов, нужно передать пустую структуру. Далее пойдет описание свойств струткуры:

        ИмяГруппы - тип Строка - Имя элемента формы, который будет выступать родителем для создаваемого элемента, например группа формы или таблица формы. На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство не определено, то родителем будет выступать сама Форма.

        ПутьКДанным - тип Строка - Данный параметр определяет свойство нового элемента ПутьКДанным, например для реквизита Номенклатура табличной части Товары путь к данным будет выглядеть как "Объект.Товары.Номенклатура". Если передать некорректный путь к данным, то возникнет ошибкаЕсли данное свойство не определено, то по умолчанию путь к данным будет выглядеть как "Объект.<ИмяРеквизита>".

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

        Видимость - тип Булево - Определяет свойство нового элемента Видимость. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.

        ТолькоПросмотр - тип Булево - Определяет свойство нового элемента ТолькоПросмотр. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Ложь.

        Доступность - тип Булево - Определяет свойство нового элемента Доступность. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.

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

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

            Событие - тип Строка - Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.

            Действие - тип Строка - Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.

 2. Необходимо изменить несколько свойств для нескольких элементов формы.

// Изменяет свойства элементов формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  СтруктураЭлементов  - Структура - содержит:
//     * Ключ  - Имя редактируемого элемента формы
//     * Значение - Массив структур - содержит:
//        ** Имя 		- Строка - имя свойства элемента
//        ** Значение 	- Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов) Экспорт

	Для каждого ТекРеквизит Из СтруктураЭлементов Цикл
		
		ИмяЭлемента 	= ТекРеквизит.Ключ;
		МассивСвойств 	= ТекРеквизит.Значение;
		
		Элемент = Форма.Элементы[ИмяЭлемента];
		
		Для каждого СвойствоЭлемента Из МассивСвойств Цикл
		
			Элемент[СвойствоЭлемента.Имя] = СвойствоЭлемента.Значение;
		
		КонецЦикла;
		
	КонецЦикла; 	
	
КонецПроцедуры

Первым параметром идет форма, на которой необходимо изменить свойства элементов.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.

Вторым параметром идет структура, которую будем обходить в цикле.
Тип параметра - Структура. Параметр является обязательным.

    Ключ - Имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!

    Значение - тип Массив - Массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.

        Имя - тип Строка - Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.

        Значение - тип Произвольный и зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.

3. Необходимо изменить несколько свойств элемента формы.

// Изменяет свойства элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  МассивСвойств  - Массив структур - содержит:
//     * Имя 		- Строка - имя свойства элемента
//     * Значение 	- Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементаФормы(Форма, ИмяЭлемента, МассивСвойств) Экспорт

	СтруктураЭлементов = Новый Структура(ИмяЭлемента, МассивСвойств);
	ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов);
	
КонецПроцедуры

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

Первым параметром идет форма, на которой необходимо изменить свойства элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.

Вторым параметром идет имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.

    Имя - тип Строка - Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.

    Значение - тип Произвольный и зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.

4. Необходимо изменить одно свойство элемента формы.

// Изменяет свойства элементов формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  ИмяСвойства  - Строка - имя свойства элемента
//
//  ЗначениеСвойства  - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойствоЭлементаФормы(Форма, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	Элемент[ИмяСвойства] = ЗначениеСвойства;
	
КонецПроцедуры

Первым параметром идет форма, на которой необходимо изменить свойство элемента.
Тип параметра - ФормаКлиентскогоПриложения. Параметр является обязательным.

Вторым параметром идет имя элемента формы, свойство которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.
Тип параметра - Строка. Параметр является обязательным.

Четвертым параметром идет произвольное значение, которое зависит от изменяемого свойства - Новое значение, которое необходимо установить свойству элемента формы. Если передавать значение, которое не соответствует свойству элемента, то возникнет ошибка.
Тип параметра - "Произвольный". Параметр является обязательным.

5. Необходимо установить несколько обработчиков событий для элемента формы.

// Устанавливает обработчики событий для элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  МассивСобытий  - Массив структур - содержит:
//     *Событие 	- Строка - имя события элемента
//     *Действие 	- Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытияЭлементаФормы(Форма, ИмяЭлемента, МассивСобытий) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	
	Для каждого ТекСобытие Из МассивСобытий Цикл
		Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);		
	КонецЦикла; 			

КонецПроцедуры

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

Вторым параметром идет имя элемента формы, для которого необходимо установить обработчики событий. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет массив структур для установки обработчиков событий элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.

    Событие - тип Строка - Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.

    Действие - тип Строка - Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.

6. Необходимо установить обработчик события для элемента формы.

// Устанавливает обработчик события для элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  Событие  - Строка - имя события элемента
//
//  Действие  - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытиеЭлементаФормы(Форма, ИмяЭлемента, Событие, Действие) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	Элемент.УстановитьДействие(Событие, Действие);		

КонецПроцедуры

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

Вторым параметром идет имя элемента формы, для которого необходимо установить обработчик события. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.
Тип параметра - Строка. Параметр является обязательным.

Четвертым параметром идет имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.
Тип параметра - Строка. Параметр является обязательным.

7. Необходимо добавить на форму новую группу.

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

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

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

Вторым параметром идет имя новой группы формы. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет имя элемента формы, который будет выступать родителем для создаваемой группы. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка! Если данный параметр не заполнен, то родителем будет выступать сама Форма.
Тип параметра - Строка. Параметр является НЕ обязательным.

Четвертым параметром идет вид группы формы. Если передать вид группы, который не совместим с текущим родителем создаваемой группы, то возникнет ошибка. Если данный параметр не заполнен, то вид группы будет "Обычная группа".
Тип параметра - ВидГруппыФормы. Параметр является НЕ обязательным.

Пятым параметром идет вариант группировки элементов внутри создаваемой группы. Если данный параметр не заполнен, то вариант группировки будет "Горизонтальная если возможно".
Тип параметра - ГруппировкаПодчиненныхЭлементовФормы. Параметр является НЕ обязательным.

Шестым параметром идет признак, нужно ли отображать заголовок создаваемой группы. Если данный параметр не заполнен, то заголовок отображаться не будет.
Тип параметра - Булево. Параметр является НЕ обязательным.

Седьмым параметром идет текст заголовка создаваемой группы. Если шестой параметр не заполнен, либо имеет значение Ложь, то заголовок отображаться не будетЕсли данный параметр не заполнен, то заголовок будет пустым.
Тип параметра - Строка. Параметр является НЕ обязательным.

8. Необходимо добавить на форму новые реквизиты формы.

// Добавляет новые реквизиты формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  МассивРеквизитов  - Массив структур - содержит:
//     *ИмяРеквизита  - Строка - имя нового реквизита формы
//     *ТипРевизита  - ОписаниеТипов - тип реквизита. По умолчанию строка неограниченной длины
//     *ЗаголовокРеквизита  - Строка - отображаемый текст реквизита. Не обязательный
//     *Путь  - Строка  - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//     *СохраняемыеДанные  - Булево  - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//     *РодительЭлемента  - Строка - имя родителя элемента формы,
//	   *ИмяЭлемента  - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
//							По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитыФормы(Форма, МассивРеквизитов) Экспорт

	ДобавляемыеРеквизиты 	= Новый Массив;
	РеквизитыДляРазмещения 	= Новый Массив;
	
	Для каждого ОписаниеРеквизита Из МассивРеквизитов Цикл
		
		ИмяРеквизита = ОписаниеРеквизита.ИмяРеквизита;
		
		Если ОписаниеРеквизита.Свойство("ТипРевизита") Тогда
			ТипРевизита = ОписаниеРеквизита.ТипРевизита;	
		Иначе
			ТипРевизита = Новый ОписаниеТипов("Строка");
		КонецЕсли;
		
		ЗаголовокРеквизита = "";
		
		Если ОписаниеРеквизита.Свойство("ЗаголовокРеквизита") Тогда
			ЗаголовокРеквизита = ОписаниеРеквизита.ЗаголовокРеквизита;	
		КонецЕсли;
		
		Путь = "";	
		
		Если ОписаниеРеквизита.Свойство("Путь") Тогда
			Путь = ОписаниеРеквизита.Путь;	
		КонецЕсли;
		
		СохраняемыеДанные = Ложь;	
		
		Если ОписаниеРеквизита.Свойство("СохраняемыеДанные") Тогда
			СохраняемыеДанные = ОписаниеРеквизита.СохраняемыеДанные;	
		КонецЕсли;
		
		РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, ТипРевизита, Путь, ЗаголовокРеквизита, СохраняемыеДанные);
		
		ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
		
		//+ Дополнительное размещение реквизитов на форме
		Если ОписаниеРеквизита.Свойство("РодительЭлемента") Тогда
		
			СтруктураЭлемента = Новый Структура;
			СтруктураЭлемента.Вставить("ИмяГруппы", ОписаниеРеквизита.РодительЭлемента);
			
			Если ОписаниеРеквизита.Свойство("Путь") Тогда
				Шаблон = "%1.%2";
				ПутьКДанным = СтрШаблон(Шаблон, ОписаниеРеквизита.Путь, ИмяРеквизита); 	
			Иначе
				ПутьКДанным = ИмяРеквизита;
			КонецЕсли;
			
			СтруктураЭлемента.Вставить("ПутьКДанным", ПутьКДанным);
			
			ИмяЭлемента = ИмяРеквизита;
			
			Если ОписаниеРеквизита.Свойство("ИмяЭлемента") Тогда
				ИмяЭлемента = ОписаниеРеквизита.ИмяЭлемента;	
			КонецЕсли;
			
			СтруктураРеквизитов = Новый Структура;
			СтруктураРеквизитов.Вставить(ИмяЭлемента, СтруктураЭлемента);
			
			РеквизитыДляРазмещения.Добавить(СтруктураРеквизитов);
		
		КонецЕсли;
		//- Дополнительное размещение реквизитов на форме
	
	КонецЦикла;
	
	Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	РазместитьРеквизитыНаФорме(Форма, РеквизитыДляРазмещения);
								
КонецПроцедуры

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

Вторым параметром идет массив структур для определения свойств новых реквизитов формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра - Массив. Параметр является обязательным.

    ИмяРеквизита - тип Строка - Имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!

    ТипРевизита - тип ОписаниеТипов - Данный параметр определяет, какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данное свойство не определено, то типом данных будет Строка неограниченной длины.

    ЗаголовокРеквизита - тип Строка - Отображаемый заголовок нового реквизита формы. Если данное свойство не определено, то в качестве заголовка будет свойство ИмяРеквизита.

    Путь - тип Строка - Данное свойство используется, если создаваемый реквизит относится к другому реквизиту формы, например к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данное свойство не определено, то новый реквизит будет принадлежать непосредственно форме.

    СохраняемыеДанные - тип Булево - Если новый реквизит формы будет содержать сохраняемые данные, то необходимо передать в качестве данного свойства Истина. Если данное свойство не определено, то по умолчанию значение будет Ложь.

    РодительЭлемента - тип Строка - Если, помимо создания реквизита формы, его нужно разместить в дереве элементов, то необходимо определить у структуры данное свойство. Значение данного свойства определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого свойства должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство определено, то его необходимо использовать в паре с процедурой "РеквизитыДляРазмещения" из п.1. Если данное свойство не определено, то реквизит не будет размещен в дереве элементов формы. Если данное свойство определено и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.

    ИмяЭлемента - тип Строка - Используется только в паре со свойством РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальнымЕсли данное свойство не определено, то именем будет ИмяРеквизита.

9. Необходимо добавить на форму новый реквизит формы.

// Добавляет новый реквизит формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяРеквизита  - Строка - имя нового реквизита формы
//
//  ТипРевизита  - ОписаниеТипов - тип реквизита. По умолчанию строка
//
//  ЗаголовокРеквизита  - Строка - отображаемый текст реквизита. Не обязательный
//
//  Путь  - Строка  - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//
//  СохраняемыеДанные  - Булево  - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//
//  РодительЭлемента  - Строка - имя родителя элемента формы,
//								если дополнительно необходимо разместить на форме. Не обязательный
//
//  ИмяЭлемента  - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
//							По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитФормы(Форма, ИмяРеквизита, ЗаголовокРеквизита = "", Путь = "",
							СохраняемыеДанные = Ложь, РодительЭлемента = "", ИмяЭлемента = "") Экспорт

	СтруктураРеквизита = Новый Структура;
	СтруктураРеквизита.Вставить("ИмяРеквизита", ИмяРеквизита);
	
	Если ЗначениеЗаполнено(ЗаголовокРеквизита) Тогда
		СтруктураРеквизита.Вставить("ЗаголовокРеквизита", ЗаголовокРеквизита);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Путь) Тогда
		СтруктураРеквизита.Вставить("Путь", Путь);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(СохраняемыеДанные) Тогда
		СтруктураРеквизита.Вставить("СохраняемыеДанные", СохраняемыеДанные);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(РодительЭлемента) Тогда
		СтруктураРеквизита.Вставить("РодительЭлемента", РодительЭлемента);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ИмяЭлемента) Тогда
		СтруктураРеквизита.Вставить("ИмяЭлемента", ИмяЭлемента);
	КонецЕсли;
	
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(СтруктураРеквизита);
	
	ДобавитьРеквизитыФормы(Форма, МассивРеквизитов);
								
КонецПроцедуры

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

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

Вторым параметром идет имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет описание какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данный параметр не заполнен, то типом данных будет Строка неограниченной длины.
Тип параметра - ОписаниеТипов. Параметр является НЕ обязательным.

Четвертым параметром идет значение отображаемого заголовка нового реквизита формы. Если данный параметр не заполнен, то в качестве заголовка будет параметр ИмяРеквизита.
Тип параметра - Строка. Параметр является НЕ обязательным.

Пятым параметром идет путь к другому реквизиту формы и используется, если создаваемый реквизит относится, например, к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данный параметр не заполнен, то новый реквизит будет принадлежать непосредственно форме.
Тип параметра - Строка. Параметр является НЕ обязательным.

Шестым параметром идет признак, что новый реквизит формы будет содержать сохраняемые данные. Если данный параметр не заполнен, то по умолчанию значение будет Ложь.
Тип параметра - Булево. Параметр является НЕ обязательным.

Седьмым параметром идет имя родительского элемента формы. Данный параметр используется, если, помимо создания реквизита формы, его нужно разместить в дереве элементов. Значение данного параметра определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого параметра должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данный параметр используется, то его необходимо использовать в паре с процедурой "РеквизитыДляРазмещения" из п.1. Если данный параметр не заполнен, то реквизит не будет размещен в дереве элементов формы. Если данный параметр заполнен и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.
Тип параметра - Строка. Параметр является НЕ обязательным.

Восьмым параметром идет имя элемента формы, к которому будет относится новый реквизит формы. Используется только в паре с параметром РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальнымЕсли данный параметр не заполнен, то именем будет ИмяРеквизита.
Тип параметра - Строка. Параметр является НЕ обязательным.

10. Необходимо добавить для формы новую команду и разместить ее на форме.

// Добавляет новую команду формы. Дополнительно можно сразу разменить кнопку на форме
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяКоманды  - Строка - имя новой команды формы
//
//  ДействиеКоманды  - Строка - имя обработчика для команды
//
//  ИмяГруппы  - Строка - имя родительского элемента, если необходимо разместить команду на форме
//			   - Неопределено - если нужно только создать новую команду
//								По умолчанию команда размещается в корне формы
//
//  ВидКнопки  - ВидКнопкиФормы   - вид кнопки формы. По умолчанию ОбычнаяКнопка или КнопкаКоманднойПанели,
//														зависит от родителя
//
//  Заголовок  - Строка  - заголовок кнопки формы. Не обязательный
//
//  ПоместитьПеред  - Строка - имя элемента, перед которым необходимо разместить кнопку формы. Не обязательный
//
//  Картинка  - Картинка - картинка кнопки формы. Не обязательный
//
//  ОтображениеКнопки  - ОтображениеКнопки - вариант отражение кнопки на форме. Учитывается только если
//												заполнен параметр Картинка. Не обязательный
//
Процедура ДобавитьРазместитьКомандуФормы(Форма, ИмяКоманды, ДействиеКоманды, ИмяГруппы = "", ВидКнопки = Неопределено,
										Заголовок = "", ПоместитьПеред = "",
										Картинка = Неопределено, ОтображениеКнопки = Неопределено) Экспорт

	Команда = Форма.Команды.Добавить(ИмяКоманды);
	Команда.Действие = ДействиеКоманды;
	
	Если ЗначениеЗаполнено(Заголовок) Тогда
		Команда.Заголовок = Заголовок;
	КонецЕсли;
	
	Если Картинка <> Неопределено Тогда
	
		Команда.Картинка = Картинка;
		
		Если ОтображениеКнопки <> Неопределено Тогда
			Команда.Отображение = ОтображениеКнопки;
		КонецЕсли;
	
	КонецЕсли;
	
	Если ИмяГруппы = Неопределено Тогда
		Возврат;	
	ИначеЕсли ЗначениеЗаполнено(ИмяГруппы) Тогда
		ЭлементРодитель = Форма.Элементы[ИмяГруппы];
	Иначе
		ЭлементРодитель = Форма;
	КонецЕсли;
	
	КнопкаФормы = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементРодитель);
	КнопкаФормы.ИмяКоманды = ИмяКоманды;
	
	Если ВидКнопки <> Неопределено Тогда
		КнопкаФормы.Вид = ВидКнопки;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
		Форма.Элементы.Переместить(КнопкаФормы, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);	
	КонецЕсли; 		

КонецПроцедуры

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

Вторым параметром идет имя, которое будет присвоено новой команде. Имя должно быть уникальным!
Тип параметра - Строка. Параметр является обязательным.

Третьим параметром идет имя процедуры обработчика для новой команды. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать команда не будет.
Тип параметра - Строка. Параметр является обязательным.

Четвертым параметром идет имя родительского элемента формы, если команду необходимо разместить на форме. Если в качестве данного параметра передать Неопределено, то процедура завершится и команда на форме размещена не будет. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибкаЕсли данный параметр заполнен пустой строкой, то родителем будет сама Форма. Если данный параметр не заполнен, то команда на форме будет размещена и родителем будет сама Форма.
Тип параметра - Строка или Неопределено. Параметр является НЕ обязательным.

Пятым параметром идет вид кнопки, к которой будет привязана команда. Если данный параметр не заполнен, то вид кнопки будет либо ОбычнаяКнопка, либо КнопкаКоманднойПанели, в зависимости от родителя.
Тип параметра - ВидКнопкиФормы. Параметр является НЕ обязательным.

Шестым параметром идет заголовок новой кнопки формы. Если данный параметр не заполнен, то заголовок будет определяться от имени команды.
Тип параметра - Строка. Параметр является НЕ обязательным.

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

Восьмым параметром идет картинка для новой кнопки формы.
Тип параметра - Картинка. Параметр является НЕ обязательным.

Девятым параметром идет вариант отображения новой кнопки на форме. Данный параметр будет учитываться только, если заполнен параметр Картинка.
Тип параметра - ОтображениеКнопки. Параметр является НЕ обязательным.

К данной статье я прилагаю обработку, в модуле объекта которой есть:

  • все эти процедуры,
  • дополнительная процедура, которую можно использовать в паре с процедурой общего модуля СобытияФорм.ПриСозданииНаСервере (если в вашей конфигурации она имеется),
  • примеры использования процедур библиотеки.

Управляемые Формы УФ Изменение Библиотека

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159364    872    399    

861

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7759    55    22    

66

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    23422    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8500 руб.

10.11.2023    10409    36    20    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15389    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3120 руб.

14.01.2013    187968    1138    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17298    6    32    

42

Инструментарий разработчика Программист Платные (руб)

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

1800 руб.

21.02.2023    7693    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4790 07.08.20 19:52 Сейчас в теме
Накаркал. Только сегодня поминал про добавление элементов на форму, и вот очередное на эту тему. Воистину, неоскудевающий поток, не хуже перенумераторов)

Оформлено аккуратно, да. Но баян же неимоверный.
nekit_rdx; tsmult; sapervodichka; +3 Ответить
6. BuriyLesha 596 10.08.20 12:12 Сейчас в теме
(1) баян, а так, чтобы взял и вставил готовое в свою конфигурацию, я не нашел :)
поэтому и решил написать статью сам, чтобы всегда было под рукой :)
2. markers 277 08.08.20 04:07 Сейчас в теме
Извините, я не скачивал файл, не могу определить, где предполагается выполнять в частности методы:
ИзменитьСвойстваЭлементовФормы
ИзменитьСвойстваЭлементаФормы
ИзменитьСвойствоЭлементаФормы
Но если предполагается выполнение на стороне клиента, то перед установкой значения, стоит выполнить проверку на тот случай, что данное значение уже установлено. Чтобы например при установке свойства "Видимость", не вызывать лишний раз сервер.
За публикацию - спасибо!
7. BuriyLesha 596 10.08.20 12:18 Сейчас в теме
(2) на рабочей я базе я добавил в процедуру СобытияФорм.ПриСозданииНаСервере вызов экспортной процедуры уже из своего модуля ПрограммнаяМодификацияУФ.МодифицироватьФорму
процедура из модуля СобытияФорм вызывается абсолютно из всех интерактивных форм в конфигурации
а в своей процедуре я, в зависимости от имени открываемой формы, передаю управление в отдельную процедуру для каждой формы, и там вызываю методы библиотеки
но, чтобы было совсем бесшовно, можно использовать и расширение, но нам такой метод не подошел
3. Cmapnep 19 08.08.20 13:42 Сейчас в теме
Интересная реализация, прежде всего тем, что параметры передаются через структуры, а значит они легко расширяются без необходимости изменения существующего кода

Но есть несколько моментов:
1. Нужно бы включить в библиотеку функции инициализации структур для параметров - не верится чтобы вы их вручную создавали для каждого добавляемого реквизита - значит они существуют)
2. Не хватает примеров использования, так сказать best practices
3. Часть функций принимает вместо структуры "сарафан" параметров - имеет смысл их так же привести к единой структуре. Понимаю, что так быстрее и удобнее их использовать, но теряются плюсы, указанные выше
kalyaka; TerveRus; igee12; sapervodichka; +4 Ответить
4. Yashazz 4790 08.08.20 21:50 Сейчас в теме
(3)
Интересная реализация, прежде всего тем, что параметры передаются через структуры, а значит они легко расширяются без необходимости изменения существующего кода
Этой "интересной реализации" сто лет в обед, это одна из хороших практик неимоверной давности, и общеизвестная.
chrnv; ivv1970; tsmult; sapervodichka; +4 Ответить
5. Cmapnep 19 09.08.20 14:40 Сейчас в теме
(4) Кто спорит-то? Все приемы программирования давно описаны )
Но те реализации программной модификации форм, которые мне попадались, принимают с десяток-другой параметров буквально для всех свойств элементов
А тут коллега сделал "красиво", да еще и выложил для всех - такое можно только приветствовать!
9. BuriyLesha 596 10.08.20 12:31 Сейчас в теме
(4) да, написанное мною общеизвестно и опубликовано на этом и других ресурсах. но когда лично у меня возникла потребность найти такую "библиотеку", которую бери готовую и внедряй себе, я не нашел ни на этом, ни на других ресурсах. поэтому пришлось делать самому. а теперь я делюсь с вами!
вся функциональная часть выложена в открытом доступе. если хотите совсем ничего не делать, то скачивайте обработку, копируйте и наслаждайтесь :)
abasovit; AlexeyMalko; Рамзес; semagin@gmail.com; +4 Ответить
8. BuriyLesha 596 10.08.20 12:27 Сейчас в теме
(3) 1. функций инициализации нет. тут немного другой подход: не нужно передавать ВСЕ, передавай только то, что НУЖНО. именно поэтому я все свойства структуры проверяю через метод "Свойство", чтобы точно знать, что его нужно обработать, а иначе "по умолчанию" ;)

2. с примерами - да, их предостаточно в приложенной обработке, но можно пару простых примеров вынести в сам текст статьи (я подумаю). Но я постарался объяснить все передаваемые свойства и параметры довольно подробно, чтобы вопросов не оставалось ни у кого.

3. пока не понимаю, как вы хотите все процедуры привести к общей структуре? мало общего у размещения реквизита в дерево элементов и изменения свойств элементов
10. Cmapnep 19 10.08.20 17:54 Сейчас в теме
(8)
3 - Имел в виду разные структуры, конечно. В частности для добавления группы и добавления реквизитА
1 - Ну вот, допустим мне нужно добавить 2 элемента с разным составом заполняемый свойств
Для вашей реализации это будет выглядеть примерно так:

МассивРеквизитов  = Новый Массив;

СтруктураРеквизита = Новый Структура("Имя, Значение", "Элемент1", Новый Структура);
СтруктураРеквизита.Значение.Вставить("ИмяГруппы", "ГруппаШапка");
СтруктураРеквизита.Значение.Вставить("ВидПоляФормы", ВидПоляФормы.ПолеНадписи);
СтруктураРеквизита.Значение.Вставить("ПоместитьПеред", "ГруппаШапка.Дата");
МассивРеквизитов.Добавить(СтруктураРеквизита);

СтруктураРеквизита = Новый Структура("Имя, Значение", "Элемент2", Новый Структура);
СтруктураРеквизита.Значение.Вставить("ИмяГруппы", "ГруппаТаблица");
СтруктураРеквизита.Значение.Вставить("ПоместитьПеред", "ГруппаТаблица.Цена");
СтруктураРеквизита.Значение.Вставить("ОбработкаСобытий", Новый Массив);
СтруктураОбработчика = Новый Структура("Событие, Действие", "ПриИзменении", "Элемент2ПриИзменении");
СтруктураРеквизита.Значение.ОбработкаСобытий.Добавить(СтруктураОбработчика);
МассивРеквизитов.Добавить(СтруктураРеквизита);

ОбщийМодуль.РазместитьРеквизитыНаФорме(ЭтаФорма, МассивРеквизитов);
Показать


Как-то читабельность получается так себе
А если то же самое сделать через инициализацию структур (в которых устанавливаются значения по умолчанию):

МассивРеквизитов  = Новый Массив;

СтруктураРеквизита = ОбщийМодуль.СтруктураНовогоЭлемента("Элемент1");
СтруктураРеквизита.Значение.ИмяГруппы = "ГруппаШапка";
СтруктураРеквизита.Значение.ВидПоляФормы = ВидПоляФормы.ПолеНадписи;
СтруктураРеквизита.Значение.ПоместитьПеред = "ГруппаШапка.Дата";
МассивРеквизитов.Добавить(СтруктураРеквизита);

СтруктураРеквизита = ОбщийМодуль.СтруктураНовогоЭлемента("Элемент2");
СтруктураРеквизита.Значение.ИмяГруппы = "ГруппаТаблица";
СтруктураРеквизита.Значение.ПоместитьПеред = "ГруппаТаблица.Цена";
СтруктураОбработчика = ОбщийМодуль.СтруктураНовогоОбработчика("ПриИзменении", "Элемент2ПриИзменении");
СтруктураРеквизита.Значение.ОбработкаСобытий.Добавить(СтруктураОбработчика);
МассивРеквизитов.Добавить(СтруктураРеквизита);

ОбщийМодуль.РазместитьРеквизитыНаФорме(ЭтаФорма, МассивРеквизитов);
Показать


Так, ИМХО, более читабельно и меньше кода писать
Ну а в функциях вместо существования свойств можно проверять ЗначениеЗаполнено()
11. BuriyLesha 596 11.08.20 04:09 Сейчас в теме
(10) в моей базе это выглядит так
Процедура МодифицироватьФорму_КонтактныеЛицаПартнеров_ФормаЭлемента(Форма)
	
	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("ИмяГруппы", 		"ГруппаОсновныеСведения");
	СтруктураПараметров.Вставить("ПоместитьПеред", 	"ГруппаРодители");
	
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(ПолучитьЗаполненнуюСтруктуру("ДолжностьДляПечати", СтруктураПараметров));
	
	РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов);
		
КонецПроцедуры	

// Создает новую структуру для добавления элемента формы, и заполняет ее 
//
// Параметры:
//  ИмяРеквизита  - Строка - Имя добавляемого элемента
//
//  ПараметрыРеквизита  - Структура - см. описание РазместитьРеквизитыНаФорме
//
// Возвращаемое значение:
//   Структура   - заполненная структура
//
Функция ПолучитьЗаполненнуюСтруктуру(Имя, Значение)

	СтруктураПараметров = Новый Структура;
	
	СтруктураПараметров.Вставить("Имя", 	 Имя);
	СтруктураПараметров.Вставить("Значение", Значение);
	
	Возврат СтруктураПараметров;

КонецФункции
Показать


как по мне, так очень даже читабельно :) думаю на вкус и цвет все мы разные :)


Ну а в функциях вместо существования свойств можно проверять ЗначениеЗаполнено()

специально избегал ЗначениеЗаполнено, ибо это свойство может быть не передано, и с-но красная ошибка. при работе со структурами предпочитаю использовать именно метод свойство, т.к. этого свойства там может и не быть
12. Cmapnep 19 11.08.20 09:18 Сейчас в теме
(11) Ну какая-то инициализация структуры все таки присутствует (ПолучитьЗаполненнуюСтруктуру)

думаю на вкус и цвет все мы разные :)

Тут не могу не согласиться))
13. dandykry 11 18.08.20 09:53 Сейчас в теме
14. BuriyLesha 596 18.08.20 09:58 Сейчас в теме
(13) может быть у Вас есть что-то, чем можно расширить мою библиотеку!
15. dandykry 11 18.08.20 10:01 Сейчас в теме
(14) Это текущее состояние реализации в боевой. Есть улучшенное состояние, с исправлением предыдущих ошибок на основании опыта, но еще не внедренное и прошедшее боевое крещение. Когда-нибудь будет время, выложу, или может нет, потому что "баяны" не качают)
16. BuriyLesha 596 18.08.20 12:15 Сейчас в теме
(15) эх, как часто ищешь на просторе интернета какой-нибудь "баян", чтобы быстро внедрить его себе, но их никто не пишет, ибо "баян"...
17. dandykry 11 18.08.20 12:36 Сейчас в теме
(16) Развивай тему библиотеки и будь первым. Это ж ниша для майнинга стартманей)
Собери активное сообщество, экосистему, можете даже на гитхаб выложить или сделать альфа/бетта версию, красиво все оформить в публикации и за реальные денюшки продавать)

У меня раньше были такие мысли, но что-то как то они поубавились)
18. retr0 20.08.21 10:04 Сейчас в теме
Так в ДО уже давно реализован модуль РаботаСФормами, уже есть че надо, можно расшарить по мере необходимости.
BuriyLesha; +1 Ответить
19. infosoft-v 927 31.08.21 09:24 Сейчас в теме
(18) Добрый день. ДО это конфигурация Документооборот 8 ред.2.1? Не могу найти в ней общий модуль РаботаСФормами. Уточните пожалуйста наименование конфигурации и общего модуля.
20. Дмитрий74Чел 239 02.12.21 15:01 Сейчас в теме
(19) ДО 3.0.4.41 - но очень примитивные методы на 3 строчки. Хуже чем в ЕРПУХ (УХ).
21. piipji 15.06.23 20:37 Сейчас в теме
Дополню) На мой взгляд свойства элемента стоит менять через ЗаполнитьЗначенияСвойств. Например свойство "Ширина" есть не у всех элементов
Оставьте свое сообщение