Этюды по программированию: Создание элементов на форме. Примеры и код функции для компактной записи

26.08.25

Разработка - Работа с интерфейсом

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

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

Рано или поздно приходят мысли убрать простыни кода, например автор предыдущей публикации предлагает огромный и сложный модуль, куда вынесен основной код: [Общий модуль] Динамическое формирование интерфейса, что на мой взгляд избыточно для большинства применений.

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

Вашему вниманию предлагаю одну компактную функцию, которая:

  1. Обеспечит добавление элемента в одну компактную строку.
  2. Позволит в этой строке указать все необходимые свойства и обработчики событий.

Примеры вызовов:

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


//Пример вывода поля ввода: 
мо_ВывестиЭлементУниверсально(ЭтаФорма, ЭтаФорма.Элементы.Эксплуатация,"akrИнвестиционнаяЗаявка",Новый Структура("АвтоМаксимальнаяШирина,МаксимальнаяШирина",Ложь,25));

//Пример вывода флажка: 
мо_ВывестиЭлементУниверсально(ЭтотОбъект, Элементы.ГруппаПроведениеИнвентаризации,"akrПровереноАудитором",Новый Структура("Вид",ВидПоляФормы.ПолеФлажка));

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

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

//"ИмяРеквизита" - Если не установлено, будет совпадать с параметром "ИмяЭлемента". Полю ввода устанавливается свойство ПутьКДанным = "Объект."+ИмяРеквизита; 
//Для более сложных вариантов можно задать свойство структуры "ПутьКДанным" непосредственно.

//"ТипЭлемента" - по умолчанию = Тип("ПолеФормы")
//"Вид" - по умолчанию для поля формы = ВидПоляФормы.ПолеВвода
//"ПредшествующийЭлемент" - не обязательно, при указании перемещает новый элемент формы на нужную позицию 
//"ИмяОбработчикаПриИзменении"  - указывает имя соответвующего обработчика

//"ИмяОбработчикаНачалоВыбора"  - указывает имя соответвующего обработчика

//"ИмяОбработчикаНажатие"  - указывает имя соответвующего обработчика
// Пример обработчика нажатия на гиперссылку
//&НаКлиенте
//Процедура ПерейтиПоСсылке();
//	ПараметрыФормы = Новый Структура("", );
//	ОткрытьФорму("РегистрСведений.ПрогнозныеКурсыСценариев.ФормаСписка", ПараметрыФормы);
//КонецПроцедуры


//Примеры вызова:
//Создание простой группы элементов без отображения
//ГруппаДанныеДляПФ=мо_ВывестиЭлементУниверсально(ЭтаФорма, ЭтаФорма.Элементы.ГруппаПланированиеЗапасов,"ГруппаНСИВложенный_akr1",Новый Структура("ТипЭлемента,Вид,Заголовок,Отображение,ОтображатьЗаголовок", Тип("ГруппаФормы"),ВидГруппыФормы.ОбычнаяГруппа,"НСИ вложенный akr1",ОтображениеОбычнойГруппы.Нет,Ложь));

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


//Пример вывода поля ввода: 
//мо_ВывестиЭлементУниверсально(ЭтаФорма, ЭтаФорма.Элементы.Эксплуатация,"akrИнвестиционнаяЗаявка",Новый Структура("АвтоМаксимальнаяШирина,МаксимальнаяШирина",Ложь,25));

//Пример вывода флажка: 
//мо_ВывестиЭлементУниверсально(ЭтотОбъект, Элементы.ГруппаПроведениеИнвентаризации,"akrПровереноАудитором",Новый Структура("Вид",ВидПоляФормы.ПолеФлажка));


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

 

Другие этюды по программированию и другие публикации автора : //infostart.ru/profile/48714/

 

Другие разработки автора:

Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Электронный обходной лист (расширение) для ERP, ЗУП, КА
Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)
Excel Studio for 1CExcel Studio for 1C
Настраиваемый управленческий балансНастраиваемый управленческий баланс
Динамические отчеты СКД
Динамические отчеты СКД
Фоновая отправка уведомлений
Генератор кодаГенератор кода

 

Проверено на следующих конфигурациях и релизах: 1С:ERP Управление предприятием 2 (2.5.22.72)  и 1С:Предприятие 8.3 (8.3.27.1606) 

Вступайте в нашу телеграмм-группу Инфостарт

Программное создание элементов формы

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

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

28800 руб.

27.03.2025    12008    24    17    

34

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

Стандартные конфигурации ERP, КА, УТ 11 позволяют работать с штрихкодированием серий. Есть только одно суровое ограничение – на упаковке должна быть этикетка для номенклатуры и отдельно для серии. Во многих случаях это критически неудобно.

18000 руб.

19.04.2021    25851    59    51    

72

Работа с интерфейсом Рабочее место 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    65751    45    60    

84

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    21415    31    6    

48

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    39718    dimanich70    83    

156

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    20406    YA_418728146    8    

174

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    5806    92    progmaster    15    

4

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    12203    kalyaka    8    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 339 26.08.25 11:11 Сейчас в теме
Вероятно, СтруктураНастроек нужно с Знач сделать. Чтобы не было побочного эффекта.
2. lefthander 26.08.25 16:34 Сейчас в теме
Спасибо очень пригодилась. Сейчас как раз много форм надо будет динамически менять в УТ...
Для отправки сообщения требуется регистрация/авторизация