Всем привет! Думаю, многие из вас знакомы с общим модулем «Динамическое формирование интерфейса» (ДФИ). Настойчиво рекомендую ознакомиться с ним перед дальнейшим прочтением.
Мой модуль нисколько не претендует на замену ДФИ, лишь гармонично его дополняет, а именно — добавляет следующий функционал: автогенерацию сеток (строки × колонки) с настройкой весов колонок, массовое создание полей по структуре, готовые виджеты (карточки, сворачиваемые и всплывающие группы, вкладки), а также инструмент визуальной отладки макета через цветовую окраску групп.
Важно! Для корректной работы требуется общий модуль ДФИ.
Основные особенности модуля
1. Ленивое создание группировок
При обычной программной верстке форм создание даже простого двухколоночного макета превращается в рутину: нужно вручную создать контейнер, две группы-колонки, задать каждой группировку, растягивание, отображение, имя — и это ещё без единого поля ввода внутри.
БУФ решает эту проблему через функцию СоздатьСетку. Достаточно указать форму, префикс имён, родителя и желаемые пропорции — и библиотека сгенерирует всю иерархию групп за вас.
![]()

2. Быстрое создание множества полей
Передавайте сразу коллекцию заголовков и реквизитов для быстрого создания множества полей.


3. Готовые UI-компоненты
Возможность быстро создавать различные интерактивные элементы на форме. В их числе — стандартные группы платформы 1С (всплывающая и сворачиваемая), а также кастомные составные компоненты, реализованные поверх ДФИ: «Карточка с картинкой» и «Текстовая карточка».
![]()

![]()


4. Отладка группировок вёрстки
![]()

Общий модуль "Быстрые управляймые формы
// Общий модуль "Быстрые управляймые формы"
// Версия 1.0
// Разработчик: Молчанов Г.А.
//
// Контакты для связи:
// Telegramm: Gosha_Felliny
// Email: GoshaFelliny@yandex.ru
//
// Зависимость: Динамическое формирование интерфейса (ДФИ) //infostart.ru/1c/articles/1284403/?ysclid=mp409x017k630244327
// Функция генерирует контейнер, строки и колонки на основе заданных пропорций.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы сетки.
// ПрефиксИмени - Строка - Базовое имя для генерации имен элементов сетки (по умолчанию "Сетка").
// Родитель - Строка или ГруппаФормы - Имя элемента или сам элемент, внутри которого будет создана сетка.
// КоличествоСтрок - Число - Количество горизонтальных строк (рядов) в сетке (0 - если нужны только колонки).
// НастройкиСтолбцов - Число, Массив или Строка - Настройки ширин колонок (0 - если нужны только строки):
// Число - количество равных колонок.
// Массив - массив чисел, где каждое число - вес колонки.
// Строка - веса колонок через запятую (например, "30, 40, 30").
// РастягиватьГоризонтально - Число - Принимаемые значения: 1 - ИСТИНА, 2 - ЛОЖЬ, 0 - Авто.
// РастягиватьВертикально - Число - Принимаемые значения: 1 - ИСТИНА, 2 - ЛОЖЬ, 0 - Авто.
// МожноДвигать - Булево - Если Истина, группы строк не объединяются (включает стандартные отступы 1С между ячейками).
// ЭлементПеред - Строка или ЭлементФормы - Элемент, перед которым требуется вставить сетку.
//
// Возвращаемое значение:
// Массив - Структура массива зависит от параметров (1D для колонок/строк, 2D для полноценной сетки).
//
Функция СоздатьСетку(Форма,
ПрефиксИмени = "Сетка",
Родитель,
КоличествоСтрок,
НастройкиСтолбцов,
РастягиватьГоризонтально = 0,
РастягиватьВертикально = 0,
МожноДвигать = Ложь,
ЭлементПеред = Неопределено) Экспорт
КонтейнерСетки = ДФИ.СздГруппаОбычная(Форма, ПрефиксИмени, Родитель, "",,,,,ЭлементПеред);
КонтейнерСетки.Отображение = ОтображениеОбычнойГруппы.Нет;
КонтейнерСетки.ОтображатьЗаголовок = Ложь;
КонтейнерСетки.Объединенная = Истина;
ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(КонтейнерСетки, РастягиватьГоризонтально);
ПолучитьСостояниеРастягиванияЭлементаПоВертикали(КонтейнерСетки, РастягиватьВертикально);
МассивШирин = Новый Массив;
Если ТипЗнч(НастройкиСтолбцов) = Тип("Число") Тогда
Для Индекс = 1 По НастройкиСтолбцов Цикл
МассивШирин.Добавить(0);
КонецЦикла;
ИначеЕсли ТипЗнч(НастройкиСтолбцов) = Тип("Массив") Тогда
МассивШирин = НастройкиСтолбцов;
ИначеЕсли ТипЗнч(НастройкиСтолбцов) = Тип("Строка") Тогда
МассивСтрок = СтрРазделить(НастройкиСтолбцов, ",", Ложь);
Для Каждого СтрЗнач Из МассивСтрок Цикл
МассивШирин.Добавить(Число(СтрЗнач));
КонецЦикла;
КонецЕсли;
КоличествоСтолбцов = МассивШирин.Количество();
МассивСетки = Новый Массив;
Если КоличествоСтрок = 0 И КоличествоСтолбцов > 0 Тогда
КонтейнерСетки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
КонтейнерСетки.Объединенная = МожноДвигать;
Для ИндексКолонки = 1 По КоличествоСтолбцов Цикл
ИмяЯчейки = ПрефиксИмени + "Кол" + ИндексКолонки;
ГруппаЯчейка = ДФИ.СздГруппаОбычная(Форма, ИмяЯчейки, КонтейнерСетки, "");
ГруппаЯчейка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаЯчейка.Ширина = МассивШирин[ИндексКолонки - 1];
ГруппаЯчейка.РастягиватьПоГоризонтали = Истина;
ГруппаЯчейка.РастягиватьПоВертикали = Истина;
МассивСетки.Добавить(ГруппаЯчейка);
КонецЦикла;
ИначеЕсли КоличествоСтрок > 0 Тогда
КонтейнерСетки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Для ИндексСтроки = 1 По КоличествоСтрок Цикл
ИмяСтроки = ПрефиксИмени + "Ряд" + ИндексСтроки;
ГруппаСтрока = ДФИ.СздГруппаОбычная(Форма, ИмяСтроки, КонтейнерСетки, "");
ГруппаСтрока.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
ГруппаСтрока.Объединенная = МожноДвигать;
ГруппаСтрока.РастягиватьПоВертикали = Истина;
ГруппаСтрока.РастягиватьПоГоризонтали = Истина;
ГруппаСтрока.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаСтрока.ОтображатьЗаголовок = Ложь;
Если КоличествоСтолбцов > 0 Тогда
СтрокаЯчеек = Новый Массив;
Для ИндексКолонки = 1 По КоличествоСтолбцов Цикл
ИмяЯчейки = ИмяСтроки + "Кол" + ИндексКолонки;
ГруппаЯчейка = ДФИ.СздГруппаОбычная(Форма, ИмяЯчейки, ГруппаСтрока, "");
ГруппаЯчейка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаЯчейка.Ширина = МассивШирин[ИндексКолонки - 1];
ГруппаЯчейка.РастягиватьПоГоризонтали = Истина;
ГруппаЯчейка.РастягиватьПоВертикали = Истина;
ГруппаЯчейка.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаЯчейка.ОтображатьЗаголовок = Ложь;
СтрокаЯчеек.Добавить(ГруппаЯчейка);
КонецЦикла;
МассивСетки.Добавить(СтрокаЯчеек);
Иначе
МассивСетки.Добавить(ГруппаСтрока);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат МассивСетки;
КонецФункции
// Создает поле ввода, настроенное для многострочного ввода текста.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ИмяПоля - Строка - Имя создаваемого элемента на форме.
// Родитель - Строка или ГруппаФормы - Контейнер для поля ввода.
// Заголовок - Строка - Отображаемый заголовок поля ввода.
// ПутьКДанным - Строка - Путь к реквизиту формы или объекта (например, "Объект.Комментарий").
// СтартоваяВысота - Число - Начальная высота поля ввода в строках (по умолчанию 3).
// ЭлементПеред - Строка или ЭлементФормы - Элемент, перед которым требуется вставить поле.
//
// Возвращаемое значение:
// ПолеФормы - Созданный элемент управления типа ПолеВвода.
//
Функция СоздатьМногострочноеПолеВвода(Форма,
ИмяПоля,
Родитель,
Заголовок,
ПутьКДанным = "",
СтартоваяВысота = 3,
ЭлементПеред = Неопределено) Экспорт
Поле = ДФИ.СздПоле(Форма, ИмяПоля, Родитель, Заголовок, 1, ПутьКДанным, ЭлементПеред);
Поле.МногострочныйРежим = Истина;
Поле.АвтоПереносСтрок = Истина;
Поле.Высота = СтартоваяВысота;
Поле.РастягиватьПоВертикали = Ложь;
Возврат Поле;
КонецФункции
// Создает кнопку на форме с автоматическим созданием команды формы (если она еще не создана).
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ИмяКнопки - Строка - Имя создаваемого элемента на форме.
// Родитель - Строка или ГруппаФормы - Контейнер для кнопки.
// Заголовок - Строка - Текст, отображаемый на кнопке.
// ИмяДействия - Строка - Имя процедуры в модуле формы, которая будет вызвана при нажатии.
// ВидКнопки - Число - 1 - Обычная кнопка, 2 - Гиперссылка (по умолчанию 1).
// ЭлементПеред - Строка или ЭлементФормы - Элемент, перед которым требуется вставить кнопку.
//
// Возвращаемое значение:
// КнопкаФормы - Созданный элемент управления кнопка.
//
Функция СоздатьКнопкуСКомандой(Форма, ИмяКнопки, Родитель, Заголовок, ИмяДействия, ВидКнопки = Неопределено, ЭлементПеред = Неопределено) Экспорт
Если ЗначениеЗаполнено(ИмяДействия) И Форма.Команды.Найти(ИмяДействия) = Неопределено Тогда
ДФИ.СоздатьКоманду(Форма, ИмяДействия, Заголовок, ИмяДействия);
КонецЕсли;
Если ВидКнопки = Неопределено Тогда
Кнопка = ДФИ.СздКнопка(Форма, ИмяКнопки, Родитель, Заголовок, ИмяДействия);
Иначе
Кнопка = ДФИ.СздКнопка(Форма, ИмяКнопки, Родитель, Заголовок, ИмяДействия, ВидКнопки,,ЭлементПеред);
КонецЕсли;
Возврат Кнопка;
КонецФункции
// Наполняет существующую группу страниц (вкладок) страницами согласно переданному массиву заголовков.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// Родитель - ГруппаФормы - Обязательный контейнер (с видом ГруппаСтраниц), в который будут добавлены страницы.
// МассивЗаголовков - Массив - Массив строк с отображаемыми заголовками создаваемых страниц.
//
// Возвращаемое значение:
// Структура - Коллекция, где Ключ - Заголовок вкладки, Значение - созданная ГруппаФормы (страница).
//
Функция СоздатьСтраницы(Форма, Родитель, МассивЗаголовков) Экспорт
Результат = Новый Структура;
ТекущийПрефикс = Родитель.Имя;
Для Каждого ЗаголовокВкладки Из МассивЗаголовков Цикл
ИмяБезСпецсимволов = ОчиститьОтЗапрещенныхСимволов(ЗаголовокВкладки);
Если ПустаяСтрока(ИмяБезСпецсимволов) Тогда
ИмяБезСпецсимволов = "Стр" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
КонецЕсли;
ИмяВкладки = ТекущийПрефикс + "" + Трег(ИмяБезСпецсимволов);
Страница = ДФИ.СздСтраница(Форма, ИмяВкладки, Родитель);
Страница.Заголовок = ЗаголовокВкладки;
Страница.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Результат.Вставить(ЗаголовокВкладки, Страница);
КонецЦикла;
Возврат Результат;
КонецФункции
// Создает визуальный блок "Карточка" с картинкой слева и текстом (заголовком и описанием) справа.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ПрефиксИмени - Строка - Базовое имя для генерации имен внутренних элементов карточки.
// Родитель - Строка или ГруппаФормы - Контейнер для карточки.
// ЗаголовокКарточки - Строка - Главный текст карточки (жирным шрифтом).
// ИмяКартинки - Строка - Имя картинки из библиотеки картинок конфигурации.
// ТекстОписания - Строка - Дополнительный поясняющий текст (серым цветом).
// ИмяДействия - Строка - Имя процедуры-обработчика нажатия на заголовок.
// Интерактивная - Булево - Если Истина, заголовок становится гиперссылкой; если Ложь - обычной надписью.
// ЭлементПеред - Строка или ЭлементФормы - Элемент, перед которым требуется вставить карточку.
//
// Возвращаемое значение:
// ГруппаФормы - Главный контейнер (группа) созданной карточки.
//
Функция СоздатьКарточку(Форма, ПрефиксИмени, Родитель, ЗаголовокКарточки, ИмяКартинки, ТекстОписания, ИмяДействия = "", Интерактивная = Истина, ЭлементПеред = Неопределено) Экспорт
Карточка = ДФИ.СздГруппаОбычная(Форма, "Карточка" + ПрефиксИмени, Родитель, "", 3,,,,ЭлементПеред);
Карточка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
Карточка.Отображение = ОтображениеОбычнойГруппы.Нет;
Карточка.ОтображатьЗаголовок = Ложь;
Картинка = ДФИ.СздДекорацияКартинка(Форма, "Картинка" + ПрефиксИмени, Карточка, ИмяКартинки);
Картинка.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеЭлемента.Верх;
Если Интерактивная Тогда
Если ЗначениеЗаполнено(ИмяДействия) Тогда
ДФИ.СоздатьКоманду(Форма, ИмяДействия, "Команда" + ИмяДействия, ИмяДействия);
КонецЕсли;
ЗаголовокЭлемент = ДФИ.СздКнопка(Форма, "КнопкаЗаголовок" + ПрефиксИмени, Карточка, ЗаголовокКарточки, ИмяДействия, 2);
Иначе
ЗаголовокЭлемент = ДФИ.СздДекорацияНадпись(Форма, "НадписьЗаголовок" + ПрефиксИмени, Карточка, ЗаголовокКарточки);
КонецЕсли;
ЗаголовокЭлемент.Шрифт = Новый Шрифт(,, Истина);
ЗаголовокЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;
ЗаголовокЭлемент.РасширеннаяПодсказка.Заголовок = ТекстОписания;
Возврат Карточка;
КонецФункции
// Создает сворачиваемую группу с возможностью задания разных заголовков для состояний.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ИмяГруппы - Строка - Имя создаваемой группы на форме.
// Родитель - Строка или ГруппаФормы - Контейнер для группы.
// Заголовок - Строка - Текст заголовка в развернутом состоянии.
// ИзначальноСвернута - Булево - Если Истина, при создании группа будет свернута.
// ЗаголовокСвернутой - Строка - Текст заголовка в свернутом состоянии. Если Неопределено, равен основному заголовку.
//
// Возвращаемое значение:
// ГруппаФормы - Созданная сворачиваемая группа.
//
Функция СоздатьСворачиваемуюГруппу(Форма, ИмяГруппы, Родитель, Заголовок, ИзначальноСвернута = Истина, ЗаголовокСвернутой = Неопределено) Экспорт
Если ЗаголовокСвернутой = Неопределено Тогда
ЗаголовокСвернутой = Заголовок;
КонецЕсли;
ГруппаСворачиваемая = ДФИ.СздГруппаОбычнаяБезОтображения(Форма, ИмяГруппы, Родитель);
ГруппаСворачиваемая.Заголовок = Заголовок;
ГруппаСворачиваемая.ЗаголовокСвернутогоОтображения = ЗаголовокСвернутой;
ГруппаСворачиваемая.ОтображатьЗаголовок = Истина;
ГруппаСворачиваемая.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
ГруппаСворачиваемая.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаСворачиваемая.Объединенная = Истина;
// Обращение к методам расширения группы формы (доступны только в контексте выполнения)
Если ИзначальноСвернута Тогда
ГруппаСворачиваемая.Скрыть();
Иначе
ГруппаСворачиваемая.Показать();
КонецЕсли;
Возврат ГруппаСворачиваемая;
КонецФункции
// Создает всплывающую группу для отображения дополнительной информации поверх формы.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ИмяГруппы - Строка - Имя создаваемой группы на форме.
// Родитель - Строка или ГруппаФормы - Контейнер для группы.
// Заголовок - Строка - Отображаемый заголовок всплывающего окна.
//
// Возвращаемое значение:
// ГруппаФормы - Созданная всплывающая группа.
//
Функция СоздатьВсплывающуюГруппу(Форма, ИмяГруппы, Родитель, Заголовок) Экспорт
ГруппаВсплывающая = ДФИ.СздГруппаОбычнаяБезОтображения(Форма, ИмяГруппы, Родитель);
ГруппаВсплывающая.Заголовок = Заголовок;
ГруппаВсплывающая.ОтображатьЗаголовок = Истина;
ГруппаВсплывающая.Поведение = ПоведениеОбычнойГруппы.Всплывающая;
ГруппаВсплывающая.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаВсплывающая.Объединенная = Истина;
Возврат ГруппаВсплывающая;
КонецФункции
// Создает текстовую карточку (без картинки) с заголовком и поясняющим текстом.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// ПрефиксИмени - Строка - Базовое имя для генерации имен элементов карточки.
// Родитель - Строка или ГруппаФормы - Контейнер для карточки.
// ЗаголовокКарточки - Строка - Главный текст карточки (жирным шрифтом).
// ТекстОписания - Строка - Дополнительный поясняющий текст (серым цветом).
// ИмяДействия - Строка - Имя процедуры-обработчика нажатия на заголовок.
// Интерактивная - Булево - Если Истина, заголовок становится гиперссылкой; если Ложь - обычной надписью.
// ЭлементПеред - Строка или ЭлементФормы - Элемент, перед которым требуется вставить карточку.
//
// Возвращаемое значение:
// ГруппаФормы - Контейнер созданной карточки.
//
Функция СоздатьТекстовуюКарточку(Форма, ПрефиксИмени, Родитель, ЗаголовокКарточки, ТекстОписания, ИмяДействия = "", Интерактивная = Истина, ЭлементПеред = Неопределено) Экспорт
Карточка = ДФИ.СздГруппаОбычнаяБезОтображения(Форма, "КарточкаТекст" + ПрефиксИмени, Родитель,,,,,ЭлементПеред);
Карточка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Если Интерактивная Тогда
Если ЗначениеЗаполнено(ИмяДействия) Тогда
ДФИ.СоздатьКоманду(Форма, ИмяДействия, "Команда" + ИмяДействия, ИмяДействия);
КонецЕсли;
ЗаголовокЭлемент = ДФИ.СздКнопка(Форма, "КнопкаЗаголовок" + ПрефиксИмени, Карточка, ЗаголовокКарточки, ИмяДействия, 2);
ЗаголовокЭлемент.Шрифт = Новый Шрифт(,, Истина);
Иначе
ЗаголовокЭлемент = ДФИ.СздДекорацияНадпись(Форма, "НадписьЗаголовок" + ПрефиксИмени, Карточка, ЗаголовокКарточки);
ЗаголовокЭлемент.Шрифт = Новый Шрифт(,, Истина);
КонецЕсли;
Описание = ДФИ.СздДекорацияНадпись(Форма, "Описание" + ПрефиксИмени, Карточка, ТекстОписания);
Описание.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Описание.Высота = 2;
Описание.РастягиватьПоГоризонтали = Истина;
Возврат Карточка;
КонецФункции
// Инструмент разработчика для визуальной отладки структуры формы.
// Рекурсивно раскрашивает фон всех групп на форме в контрастные пастельные тона.
//
// Параметры:
// КоллекцияЭлементов - КоллекцияЭлементовФормы - Элементы, которые необходимо раскрасить.
// ГСЧ - ГенераторСлучайныхЧисел - Служебный параметр для рекурсии.
//
Процедура РаскраситьСеткуВерстки(КоллекцияЭлементов, ГСЧ = Неопределено) Экспорт
Если ГСЧ = Неопределено Тогда
ГСЧ = Новый ГенераторСлучайныхЧисел();
КонецЕсли;
Для Каждого ТекущийЭлемент Из КоллекцияЭлементов Цикл
ТипЭл = ТипЗнч(ТекущийЭлемент);
Если ТипЭл = Тип("ГруппаФормы") Тогда
Если ТекущийЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа Тогда
УровеньВложенности = 0;
ТекущийРодитель = ТекущийЭлемент.Родитель;
Пока ТипЗнч(ТекущийРодитель) = Тип("ГруппаФормы") Или ТипЗнч(ТекущийРодитель) = Тип("ТаблицаФормы") Цикл
УровеньВложенности = УровеньВложенности + 1;
ТекущийРодитель = ТекущийРодитель.Родитель;
КонецЦикла;
Остаток = УровеньВложенности % 3;
Если Остаток = 0 Тогда
ЦветР = ГСЧ.СлучайноеЧисло(240, 255);
ЦветГ = ГСЧ.СлучайноеЧисло(180, 210);
ЦветБ = ГСЧ.СлучайноеЧисло(180, 210);
ИначеЕсли Остаток = 1 Тогда
ЦветР = ГСЧ.СлучайноеЧисло(180, 210);
ЦветГ = ГСЧ.СлучайноеЧисло(220, 240);
ЦветБ = ГСЧ.СлучайноеЧисло(240, 255);
Иначе
ЦветР = ГСЧ.СлучайноеЧисло(180, 210);
ЦветГ = ГСЧ.СлучайноеЧисло(240, 255);
ЦветБ = ГСЧ.СлучайноеЧисло(180, 210);
КонецЕсли;
ТекущийЭлемент.ЦветФона = Новый Цвет(ЦветР, ЦветГ, ЦветБ);
КонецЕсли;
РаскраситьСеткуВерстки(ТекущийЭлемент.ПодчиненныеЭлементы, ГСЧ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Создает группу полей ввода на основе переданной коллекции (Соответствия или Структуры).
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// Родитель - Строка или ГруппаФормы - Контейнер для полей ввода.
// КоллекцияПолей - Соответствие ИЛИ Структура - Ключ: ПутьКДанным, Значение: Заголовок.
//
// Возвращаемое значение:
// Массив - Массив созданных элементов управления формы (полей ввода).
//
Функция СоздатьПоля(Форма, Родитель, КоллекцияПолей) Экспорт
СозданныеПоля = Новый Массив;
Для Каждого НастройкаПоля Из КоллекцияПолей Цикл
ПутьКДанным = НастройкаПоля.Ключ;
Заголовок = НастройкаПоля.Значение;
ШифрВида = 1;
ИмяЭлемента = Родитель.Имя + Заголовок;
НовоеПоле = ДФИ.СздПоле(Форма, ИмяЭлемента, Родитель, Заголовок, ШифрВида, ПутьКДанным);
СозданныеПоля.Добавить(НовоеПоле);
КонецЦикла;
Возврат СозданныеПоля;
КонецФункции
// Создает группу полей типа "Флажок" (чекбоксов) на основе переданной коллекции.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма, на которой создаются элементы.
// Родитель - Строка или ГруппаФормы - Контейнер для чекбоксов.
// КоллекцияПолей - Соответствие ИЛИ Структура - Ключ: ПутьКДанным, Значение: Заголовок.
//
// Возвращаемое значение:
// Массив - Массив созданных элементов управления формы (флажков).
//
Функция СоздатьПоляЧекбоксов(Форма, Родитель, КоллекцияПолей) Экспорт
СозданныеПоля = Новый Массив;
Для Каждого НастройкаПоля Из КоллекцияПолей Цикл
ПутьКДанным = НастройкаПоля.Ключ;
Заголовок = НастройкаПоля.Значение;
ШифрВида = 2;
ИмяЭлемента = Родитель.Имя + Заголовок;
НовоеПоле = ДФИ.СздПоле(Форма, ИмяЭлемента, Родитель, Заголовок, ШифрВида, ПутьКДанным);
НовоеПоле.ВидФлажка = ВидФлажка["Флажок"];
СозданныеПоля.Добавить(НовоеПоле);
КонецЦикла;
Возврат СозданныеПоля;
КонецФункции
Процедура ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(Элемент,Состояние)
Если Состояние = 1 Тогда
Элемент.РастягиватьПоГоризонтали = ИСТИНА;
ИначеЕсли Состояние = 2 Тогда
Элемент.РастягиватьПоГоризонтали = ЛОЖЬ;
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьСостояниеРастягиванияЭлементаПоВертикали(Элемент,Состояние)
Если Состояние = 1 Тогда
Элемент.РастягиватьПоВертикали = ИСТИНА;
ИначеЕсли Состояние = 2 Тогда
Элемент.РастягиватьПоВертикали = ЛОЖЬ;
КонецЕсли;
КонецПроцедуры
// Очищает строку от любых символов, кроме букв, цифр и знака подчеркивания.
//
// Параметры:
// ПроверяемаяСтрока - Строка - Исходная строка для очистки.
// ДопРазрешенныеСимволы - Строка - Дополнительные символы, которые не нужно удалять.
//
// Возвращаемое значение:
// Строка - Строка без спецсимволов.
//
Функция ОчиститьОтЗапрещенныхСимволов(ПроверяемаяСтрока, ДопРазрешенныеСимволы = Неопределено)
Если НЕ ЗначениеЗаполнено(ПроверяемаяСтрока) Тогда
Возврат ПроверяемаяСтрока;
КонецЕсли;
ОчищеннаяСтрока = "";
РазрешенныеСимволы = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" +
"abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM" +
"0123456789_";
Если ЗначениеЗаполнено(ДопРазрешенныеСимволы) Тогда
РазрешенныеСимволы = РазрешенныеСимволы + ДопРазрешенныеСимволы;
КонецЕсли;
Для Сч = 1 по СтрДлина(СокрЛП(ПроверяемаяСтрока)) Цикл
ТекСимв = Сред(ПроверяемаяСтрока, Сч, 1);
Если Найти(РазрешенныеСимволы, ТекСимв) > 0 Тогда
ОчищеннаяСтрока = ОчищеннаяСтрока + ТекСимв;
КонецЕсли;
КонецЦикла;
Возврат ОчищеннаяСтрока;
КонецФункции
Пример реализации
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Форма = ЭтаФорма;
МассивСтраниц = Новый Массив;
МассивСтраниц.Добавить("Меню");
МассивСтраниц.Добавить("Реквизиты");
МассивСтраниц.Добавить("Прочее");
ГруппаСтраниц = ДФИ.СздГруппаСтраниц(Форма, "ГруппаВкладок", Форма, 1, 1);
Страницы = БУФ.СоздатьСтраницы(Форма, ГруппаСтраниц, МассивСтраниц);
СеткаМеню = БУФ.СоздатьСетку(Форма, "СеткаМеню", Страницы["Меню"], 1, 2, 2,, Ложь);
// --- СТРАНИЦА МЕНЮ ---
КарточкаНастройка = БУФ.СоздатьКарточку(Форма, "КарточкаНастройки", СеткаМеню[0][0], "Настройки",
"НастройкаОбщие", "Общие настройки конфигурации", "ОткрытьНастройки", Истина);
КарточкаЭП = БУФ.СоздатьКарточку(Форма, "КарточкаЭП", СеткаМеню[0][0], "Настройки электронной подписи",
"НастройкаЭП", "Настройки вашей электронной подписи", "ОткрытьНастройкиЭП", Истина);
КарточкаФайлы = БУФ.СоздатьКарточку(Форма, "КарточкаФайлы", СеткаМеню[0][0], "Настройки файловой системы",
"НастройкаФайлы", "Настройки распределения файлов в 1С", "ОткрытьНастройкиФайлов", Истина);
КарточкаУВ = БУФ.СоздатьКарточку(Форма, "КарточкаУВ", СеткаМеню[0][1], "Уведомления",
"НастройкаУведомления", "Настройки уведомлений в системе взаимодействия", "ОткрытьНастройкиУведомлений", Истина);
КарточкаШтрих = БУФ.СоздатьКарточку(Форма, "КарточкаШтрих", СеткаМеню[0][1], "Штрихкодирование",
"НастройкаШтрихкодирование", "Интеграция сканеров штрихкода", "ОткрытьНастройкиШтрихкодирования", Истина);
КарточкаОбмен = БУФ.СоздатьКарточку(Форма, "КарточкаОбмен", СеткаМеню[0][1], "Обмен данными 1С",
"НастройкаОбменДанными", "Обмен между системами 1С", "ОткрытьНастройкиОбмена", Истина);
// --- СТРАНИЦА РЕКВИЗИТЫ ---
СтруктураНовыхРеквизитов = Новый Структура;
СтруктураНовыхРеквизитов.Вставить("Организация", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Подразделение", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Склад", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Приоритет", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Валюта", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("СуммаДокумента", ДФИ.ОписаниеТипаЧисло(15, 2));
СтруктураНовыхРеквизитов.Вставить("КурсВалюты", ДФИ.ОписаниеТипаЧисло(15, 2));
СтруктураНовыхРеквизитов.Вставить("Налогообложение", ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("Контрагент", ДФИ.ОписаниеТипаСправочник("Контрагенты"));
СтруктураНовыхРеквизитов.Вставить("Договор", ДФИ.ОписаниеТипаСправочник("ВнутренниеДокументы"));
СтруктураНовыхРеквизитов.Вставить("БанковскийСчет", ДФИ.ОписаниеТипаСправочник("БанковскиеСчета"));
СтруктураНовыхРеквизитов.Вставить("КонтактноеЛицо", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Автор", ДФИ.ОписаниеТипаСправочник("Пользователи"));
СтруктураНовыхРеквизитов.Вставить("ДатаСоздания", ДФИ.ОписаниеТипаДатаВремя());
СтруктураНовыхРеквизитов.Вставить("УИДДокумента", ДФИ.ОписаниеТипаСтрока(100));
СтруктураНовыхРеквизитов.Вставить("Комментарий", ДФИ.ОписаниеТипаСтрока(0));
СтруктураНовыхРеквизитов.Вставить("ФЗ", ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("МО", ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("СРО", ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("Мера",ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("БО", ДФИ.ОписаниеТипаБулево());
СтруктураНовыхРеквизитов.Вставить("ГОС", ДФИ.ОписаниеТипаБулево());
ДФИ.СоздатьРеквизиты(Форма, СтруктураНовыхРеквизитов);
СеткаРеквизиты = БУФ.СоздатьСетку(ЭтаФорма, "СеткаРеквизиты", Страницы["Реквизиты"], 1, "30,30,40", 2,, Истина);
ПоляКолонка1 = Новый Структура;
ПоляКолонка1.Вставить("Организация", "Организация");
ПоляКолонка1.Вставить("Подразделение","Подразделение");
ПоляКолонка1.Вставить("Склад", "Склад");
ПоляКолонка1.Вставить("Приоритет", "Приоритет");
БУФ.СоздатьПоля(Форма, СеткаРеквизиты[0][0], ПоляКолонка1);
ПоляКолонка2 = Новый Структура;
ПоляКолонка2.Вставить("Валюта", "Валюта");
ПоляКолонка2.Вставить("СуммаДокумента", "Сумма");
ПоляКолонка2.Вставить("КурсВалюты", "Курс");
ПоляКолонка2.Вставить("Налогообложение", "Включать налоги");
БУФ.СоздатьПоля(Форма, СеткаРеквизиты[0][1], ПоляКолонка2);
БУФ.СоздатьКнопкуСКомандой(Форма, "РегистрацияДокумента", СеткаРеквизиты[0][1],
"Зарегистрировать", "РегистрацияДокумента", 2);
БУФ.СоздатьМногострочноеПолеВвода(ЭтаФорма, "ПолеКомментарий",
СеткаРеквизиты[0][2], "Комментарий", "Комментарий", 5);
СеткаМеток = БУФ.СоздатьСетку(ЭтаФорма, "Метки", СеткаРеквизиты[0][2], 2, 0, 1, 0, Ложь);
СтруктураПолей1 = Новый Структура;
СтруктураПолей1.Вставить("ФЗ", "ФЗ");
СтруктураПолей1.Вставить("МО", "МО");
СтруктураПолей1.Вставить("СРО", "СРО");
СтруктураПолей2 = Новый Структура;
СтруктураПолей2.Вставить("Мера","Мера");
СтруктураПолей2.Вставить("БО", "БО");
СтруктураПолей2.Вставить("ГОС", "ГОС");
БУФ.СоздатьПоляЧекбоксов(ЭтаФорма, СеткаМеток[0], СтруктураПолей1);
БУФ.СоздатьПоляЧекбоксов(ЭтаФорма, СеткаМеток[1], СтруктураПолей2);
ГруппаКонтрагент = БУФ.СоздатьСворачиваемуюГруппу(Форма, "ГруппаКонтрагент",
СеткаРеквизиты[0][0], "Данные контрагента `58;", Истина, "Данные контрагента `60;");
ПоляСворачиваемая = Новый Структура;
ПоляСворачиваемая.Вставить("Контрагент", "Контрагент");
ПоляСворачиваемая.Вставить("Договор", "Договор");
ПоляСворачиваемая.Вставить("БанковскийСчет", "Банковский счёт");
ПоляСворачиваемая.Вставить("КонтактноеЛицо", "Контактное лицо");
БУФ.СоздатьПоля(Форма, ГруппаКонтрагент, ПоляСворачиваемая);
ГруппаСлужебные = БУФ.СоздатьВсплывающуюГруппу(Форма, "ГруппаСлужебные",
Страницы["Реквизиты"], "Служебная информация");
СлужебноеПояснения = БУФ.СоздатьТекстовуюКарточку(ЭтаФорма, "КарточкаСлужебная",
ГруппаСлужебные, "Информация:",
"Данная карточка доступна только разработчикам системы", "", Ложь);
ПоляВсплывающая = Новый Соответствие;
ПоляВсплывающая.Вставить("Автор", "Автор документа");
ПоляВсплывающая.Вставить("ДатаСоздания", "Дата создания");
ПоляВсплывающая.Вставить("УИДДокумента", "УИД документа");
БУФ.СоздатьПоля(Форма, ГруппаСлужебные, ПоляВсплывающая);
БУФ.РаскраситьСеткуВерстки(Элементы);
КонецПроцедуры
&НаКлиенте
Процедура РегистрацияДокумента(Команда)
Сообщить("Документ зарегистрован");
КонецПроцедуры


Это первая версия библиотеки, будет очень приятно услышать любую обратную связь от сообщества.
Проверено на следующих конфигурациях и релизах:
- Документооборот КОРП, релизы 2.1.37.5
Вступайте в нашу телеграмм-группу Инфостарт