[Шпаргалка] Программное создание элементов формы
Разработка - Работа с интерфейсом
Добрый день, Коллеги!
//+++ Обновление публикации от 31.08.2020 г.
// Посмотрите новую статью "Динамическое формирование интерфейса"
//--- Обновление публикации от 31.08.2020 г.
Предлагаю вашему вниманию шпаргалку, шаблоны кода для применения в разработке динамического интерфейса – программное формирование элементов управляемой формы. Особенно будет полезно начинающим разработчикам.
Применение
Есть определенные ситуации, когда без программного формирования элементов формы не обойтись:
- Заранее неизвестно какое количество элементов необходимо разместить на форме (Примеры: Система тестирования, где при формирование тестового задания заранее неизвестно сколько будет вопросов или документ корректировки регистров, когда так же заранее не известно какие колонки будут у таблицы формы).
- Доработка типового функционала. Программное размещение элементов впоследствии упрощает обновление типовых конфигураций. Многие разработчики даже придерживаются данного правила при работе с «расширениями».
Шпаргалка
Оглавление
Группа – Тип("ГруппаФормы"). 2
Декорация – Тип("ДекорацияФормы"). 3
Кнопка – Тип("КнопкаФормы"). 3
Бонус – общий модуль с готовыми функциями. 4
Введение
В публикации будет разработан пример создания интерфейса с задействованием практически всех популярных элементов формы. Одно из исключений - таблица, вариант программного создания таблицы описывал ранее - программное создание динамического списка. Ниже пример интерфейса, который будет разобран (тестировалось на платформе 8.3.15.1534):

Общее
Создание элементов, реквизитов и команд лучше производить в процедуре «ПриСозданииНаСервере».
Есть два варианта размещения элементов на форме – «добавить» и «вставить».
ЭтаФорма.Элементы.Добавить([Название нового элемента], [Тип элемента], [Элемент-родитель]) – Элемент будет добавлен на размещаемый элемент-родитель в конец списка.
ЭтаФорма.Элементы.Вставить([Название нового элемента], [Тип элемента], [Элемент-родитель], [Последующий элемент]) – Элемент будет добавлен на размещаемый элемент-родитель и вставлен перед желаемым элементом.
После создания элемента, мы можем определить ему свойства. Свойства практически всегда совпадают с названиями на панели свойств элемента.
Группа – Тип("ГруппаФормы")
Элементы формы, которые можно создать с типом «ГруппаФормы»:
- ГруппаКнопок
- ГруппаКолонок
- КоманднаяПанель
- КонтекстноеМеню
- ОбычнаяГруппа
- Подменю
- Страницы
- Страница
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
Поле – Тип("ПолеФормы")
Для работы элемента формы «Поле» необходимо наличие источника данных – реквизита. Если необходимого реквизита нет, его нужно предварительно создать.
Элементы формы, которые можно создать с типом «ПолеФормы»:
- ПолеHTMLДокумента
- ПолеВвода
- ПолеГеографическойСхемы
- ПолеГрафическойСхемы
- ПолеДендрограммы
- ПолеДиаграммы
- ПолеДиаграммыГанта
- ПолеИндикатор
- ПолеКалендарь
- ПолеКартинки
- ПолеНадписи
- ПолеПереключателя
- ПолеПланировщика
- ПолеПолосыРегулирования
- ПолеТабличногоДокумента
- ПолеТекстовогоДокумента
- ПолеФлажок
- ПолеФорматированногоДокумента
Создаем реквизит
При создании важно понимать, что указывается не "тип", а "описание типов" и для часто используемых типов: "строка", "число" и "дата", необходимо указывать квалификатор. Рассмотрим на примере ниже.
//Создание реквизитов
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
НовыйРеквизит = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("ПометкаУдаления",Новый ОписаниеТипов("Булево"));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
Создаем Поле
При создании поля указываем тип «ПолеФормы», принцип мало чем отличается от создания группы:
//Создание полей
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Номер", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Номер";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Дата", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Дата";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Наименование", Тип("ПолеФормы"),ГруппаШапка);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Наименование";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Комментарий", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Комментарий";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ПометкаУдаления", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "ПометкаУдаления";
Декорация – Тип("ДекорацияФормы")
Обе существующие декорации имеют один тип, но разный вид.
Декорация «Надпись»
//Декорация надпись
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ЗаголовокТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "Глобус";
Декорация «Картинка»
//Декорация картинка
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
Кнопка – Тип("КнопкаФормы")
Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно.
Создание команды
Важно, для работы команды должно быть определено действие. Действие - это основная процедура команды, программно его создать не получится.
&НаКлиенте
Процедура ОбщееДействие(Команда)
ШифрКоманды = ПолучитьШифрКоманды(ТекущийЭлемент.Имя);
Если ШифрКоманды = 1 Тогда
Сообщить("Привет, мир!");
ИначеЕсли ШифрКоманды = 2 Тогда
Сообщить(Строка(ЭтотОбъект.Номер + ЭтотОбъект.Номер));
ИначеЕсли ШифрКоманды = 3 Тогда
Сообщить(Формат(ТекущаяДата(),"ДЛФ=DDT"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьШифрКоманды(ИмяКнопки)
Возврат Число(СтрЗаменить(ИмяКнопки,"Кнопка",""));
КонецФункции
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем только имя процедуры
Создание кнопок
//Создание кнопок
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"),СтраницаТовары);
НовыйЭлемент.Заголовок = "Привет мир!";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка2", Тип("КнопкаФормы"),СтраницаДополнительно);
НовыйЭлемент.Заголовок = "Сложить номер";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка3", Тип("КнопкаФормы"),СтраницаДополнительно);
НовыйЭлемент.Заголовок = "Текущее время";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
//+++ Обновление публикации от 10.02.2020 г.
Таблица формы и колонки
Для работы таблицы формы необходимо наличие реквизита "Таблица значений" или "Динамический список". Не забывайти про путь, если таблица находиться в объекте, тогда указываем полный путь, пример: "Объект.Товары" и так же для колонок "Объект.Товары.Номенклатура".
Создание таблицы
ТаблицаФормы = Элементы.Добавить("МояТаблицаТоваров", Тип("ТаблицаФормы"),ЭтотОбъект);
ТаблицаФормы.ПутьКДанным = "Объект.Товары";
Создание колонок
//Создаем колонку для выбора и ввода
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровНоменклатура",Тип("ПолеФормы"),ТаблицаФормы);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Номенклатура";
//Создаем колонку для булево
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровПроведен",Тип("ПолеФормы"),ТаблицаФормы);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Используется";
//--- Обновление публикации от 10.02.2020 г.
Бонус – общий модуль с готовыми функциями
«Лень - двигатель прогресса» и костылей J
Я пошел дальше, создал общий модуль, где описал создание всех выше описанных элементов формы. Поэтому предлагаю вам с ним познакомиться. Для этого создайте новый модуль:

// +++ Обновление публикации от 30.03.2021 г.
// --- Обновление публикации от 30.03.2021 г.
И скопируйте в него код:
///////////////////////////////////////////////////////////////////////////////////
//Модуль - Программное создание элементов формы
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//Создание описание типов
&НаСервере
Функция ОписаниеТипаСтрока(ДлинаСтроки = 0) Экспорт
Возврат Новый ОписаниеТипов("Строка",,кСтрока(ДлинаСтроки));
КонецФункции
&НаСервере
Функция ОписаниеТипаЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт
Возврат Новый ОписаниеТипов("Число",кЧисло(ДлинаЧисла,ТочностьЧисла));
КонецФункции
//ДатаВремя - строка, значения "Дата", "Время", "ДатаВремя"
&НаСервере
Функция ОписаниеТипаДатаВремя(ДатаВремя = "ДатаВремя") Экспорт
Возврат Новый ОписаниеТипов("Дата",,,кДатаВремя(ДатаВремя));
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание квалификаторов
&НаСервере
Функция кСтрока(ДлинаСтроки = 0) Экспорт
Возврат Новый КвалификаторыСтроки(ДлинаСтроки);
КонецФункции
&НаСервере
Функция кЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт
Возврат Новый КвалификаторыЧисла(ДлинаЧисла,ТочностьЧисла);
КонецФункции
//ДатаВремя - строка, значения "Дата", "Время", "ДатаВремя"
&НаСервере
Функция кДатаВремя(ДатаВремя = "ДатаВремя") Экспорт
Возврат Новый КвалификаторыДаты(ЧастиДаты[ДатаВремя]);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание реквизитов
//Если требуется создать один реквизит
&НаСервере
Процедура СоздатьРеквизит(ИмяРеквизита,ОписаниеТипа,ТекущаяФорма) Экспорт
структураРеквизитов = Новый Структура;
структураРеквизитов.Вставить(ИмяРеквизита,ОписаниеТипа);
СоздатьРеквизиты(структураРеквизитов,ТекущаяФорма);
КонецПроцедуры
//Если требуется создать несколько реквизитов
&НаСервере
Процедура СоздатьРеквизиты(структураРеквизитов,ТекущаяФорма) Экспорт
ДобавляемыеРеквизиты = Новый Массив;
Для Каждого тРеквизит Из структураРеквизитов Цикл
НовыйРеквизит = Новый РеквизитФормы(тРеквизит.Ключ,тРеквизит.Значение);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
КонецЦикла;
ТекущаяФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////
//Создание элементов
&НаСервере
Функция СоздатьОбычнуюГруппуБезОтображения(ЭтаФорма,
ИмяГруппы,
РодительГруппы,
ГруппировкаОбычнойГруппы = 0,
РастягиватьГоризонтально = 0,
РастягиватьВертикально = 0,
СтруктураСвойств = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Перем ВидГруппы;
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);
КонецЕсли;
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.Нет;
НовыйЭлемент.ОтображатьЗаголовок = ЛОЖЬ;
Если ГруппировкаОбычнойГруппы = 1 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
КонецЕсли;
Если РастягиватьГоризонтально = 1 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;
ИначеЕсли РастягиватьГоризонтально = 2 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;
КонецЕсли;
Если РастягиватьВертикально = 1 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;
ИначеЕсли РастягиватьВертикально = 2 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;
КонецЕсли;
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СоздатьОбычнуюГруппу(ЭтаФорма,
ИмяГруппы,
РодительГруппы,
Заголовок = "",
ГруппировкаОбычнойГруппы = 0,
РастягиватьГоризонтально = 0,
РастягиватьВертикально = 0,
СтруктураСвойств = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Перем ВидГруппы;
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);
КонецЕсли;
НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение;
НовыйЭлемент.ОтображатьЗаголовок = ИСТИНА;
Если ГруппировкаОбычнойГруппы = 1 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
КонецЕсли;
Если РастягиватьГоризонтально = 1 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;
ИначеЕсли РастягиватьГоризонтально = 2 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;
КонецЕсли;
Если РастягиватьВертикально = 1 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;
ИначеЕсли РастягиватьВертикально = 2 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;
КонецЕсли;
Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СоздатьГруппуСтраницы(ЭтаФорма,
ИмяГруппы,
РодительГруппы,
РастягиватьГоризонтально = 0,
РастягиватьВертикально = 0,
ПриСменеСтраницы = "",
СтруктураСвойств = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Перем ВидГруппы;
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);
КонецЕсли;
НовыйЭлемент.Вид = ВидГруппыФормы.Страницы;
Если РастягиватьГоризонтально = 1 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;
ИначеЕсли РастягиватьГоризонтально = 2 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;
КонецЕсли;
Если РастягиватьВертикально = 1 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;
ИначеЕсли РастягиватьВертикально = 2 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;
КонецЕсли;
Если ПриСменеСтраницы <> "" Тогда НовыйЭлемент.ПриСменеСтраницы = ПриСменеСтраницы КонецЕсли;
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СоздатьСтраницу(ЭтаФорма,
ИмяСтраницы,
ГруппаСтраницы,
Заголовок = "",
ГруппировкаОбычнойГруппы = 0,
РастягиватьГоризонтально = 0,
РастягиватьВертикально = 0,
СтруктураСвойств = Неопределено,
СтраницаПеред = Неопределено) Экспорт
Перем ВидГруппы;
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
Если СтраницаПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяСтраницы, Тип("ГруппаФормы"),ГруппаСтраницы);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяСтраницы, Тип("ГруппаФормы"),ГруппаСтраницы,СтраницаПеред);
КонецЕсли;
НовыйЭлемент.Вид = ВидГруппыФормы.Страница;
Если ГруппировкаОбычнойГруппы = 1 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
КонецЕсли;
Если РастягиватьГоризонтально = 1 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;
ИначеЕсли РастягиватьГоризонтально = 2 Тогда
НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;
КонецЕсли;
Если РастягиватьВертикально = 1 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;
ИначеЕсли РастягиватьВертикально = 2 Тогда
НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;
КонецЕсли;
Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СоздатьГруппу(ЭтаФорма,
ИмяГруппы,
РодительГруппы,
СтруктураСвойств,
ЭлементПеред = Неопределено) Экспорт
Перем ВидГруппы;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);
КонецЕсли;
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
//Общая функция создания элемента Поле
&НаСервере
Функция СоздатьПоле(ЭтаФорма,
ИмяПоля,
РодительПоля,
ШифрВидаПоля = 0,
ПутьКДанным = "",
СтруктураСвойств = Неопределено,
СтруктураСобытий = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Перем ВидПоля;
Если ШифрВидаПоля <> 0 Тогда
НаборВидов = "ПолеВвода
|ПолеФлажка
|ПолеИндикатора
|ПолеПереключателя
|ПолеПериода
|ПолеHTMLДокумента";
ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,ШифрВидаПоля));
КонецЕсли;
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
Если СтруктураСобытий = Неопределено Тогда
СтруктураСобытий = Новый Структура;
КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяПоля, Тип("ПолеФормы"),РодительПоля);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяПоля, Тип("ПолеФормы"),РодительПоля,ЭлементПеред);
КонецЕсли;
Если ШифрВидаПоля <> 0 Тогда НовыйЭлемент.Вид = ВидПоляФормы[ВидПоля] КонецЕсли;
Если ПутьКДанным <> "" Тогда НовыйЭлемент.ПутьКДанным = ПутьКДанным КонецЕсли;
Для Каждого Свойства Из СтруктураСвойств Цикл
НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;
КонецЦикла;
Для Каждого События Из СтруктураСобытий Цикл
НовыйЭлемент.УстановитьДействие(События.Ключ,События.Значение);
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
//Быстрая функция по созданию декорации надпись
&НаСервере
Функция СоздатьДекорациюНадпись(ЭтаФорма,
ИмяДекорации,
РодительДекорации,
ЗаголовокДекорации,
РастягиватьПоГоризонтали = ИСТИНА,
ЭлементПеред = Неопределено) Экспорт
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации,ЭлементПеред);
КонецЕсли;
НовыйЭлемент.Заголовок = ЗаголовокДекорации;
НовыйЭлемент.РастягиватьПоГоризонтали = РастягиватьПоГоризонтали;
Возврат НовыйЭлемент;
КонецФункции
//Общая функция создания декорации с видом надпись и картинка
&НаСервере
Функция СоздатьДекорацию(ЭтаФорма,
ИмяДекорации,
РодительДекорации,
СтруктураСвойств = Неопределено,
СтруктураСобытий = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Если СтруктураСвойств = Неопределено Тогда СтруктураСвойств = Новый Структура; КонецЕсли;
Если СтруктураСобытий = Неопределено Тогда СтруктураСобытий = Новый Структура; КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации,ЭлементПеред);
КонецЕсли;
Для Каждого Свойства Из СтруктураСвойств Цикл
НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;
КонецЦикла;
Для Каждого События Из СтруктураСобытий Цикл
НовыйЭлемент.УстановитьДействие(События.Ключ,События.Значение);
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СоздатьКнопку(ЭтаФорма,
ИмяКнопки,
РодительКнопки,
ЗаголовокКнопки = "",
ИмяКоманды = "",
СтруктураСвойств = Неопределено,
ЭлементПеред = Неопределено) Экспорт
Если СтруктураСвойств = Неопределено Тогда СтруктураСвойств = Новый Структура; КонецЕсли;
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"),РодительКнопки);
Иначе
НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяКнопки, Тип("КнопкаФормы"),РодительКнопки,ЭлементПеред);
КонецЕсли;
Если ЗаголовокКнопки <> "" Тогда НовыйЭлемент.Заголовок = ЗаголовокКнопки; КонецЕсли;
Если ИмяКоманды <> "" Тогда НовыйЭлемент.ИмяКоманды = ИмяКоманды; КонецЕсли;
Для Каждого Свойства Из СтруктураСвойств Цикл
НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание команды
&НаСервере
Процедура СоздатьКоманду(ЭтаФорма,ИмяКоманды,КомандаЗаголовок,КомандаДействия) Экспорт
НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
НоваяКоманда.Заголовок = КомандаЗаголовок;
НоваяКоманда.Действие = КомандаДействия;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////
//Создание динамического списка
&НаСервере
Процедура СозданиеДинамическогоСписка(ЭтаФорма,
ИмяСписка = "Список", //тип строка - имя будущего списка на форме и реквизита
ТекстЗапроса = "", //тип строка - запрос, если он не указан, необходимо указать таблицу
МассивКолонок, //тип массив - массив создаваемых колонок, значения тип строка. Пример: "Д,ДоговораКонтрагента" значит будет создана колонка
// с заголовком "Д" и колонкой списка "ДоговораКонтрагента". Если указать просто "ДоговораКонтрагента",
// заголовок будет идентичен заголовку по умолчанию типа "Договор контрагента".
СписокДействий = Неопределено, //типа структура - структура содержит действия (свойства) динамического списка, можно указать только те которые необходимы.
// пример: СписокДействий = Новый Структура("Выбор,ПриАктивизацииСтроки","СписокВыбор","СписокПриАктивизацииСтроки")
ТаблицаСписка = "", //тип строка - содержит имя основной таблицы, пример: "Документ.РеализацияТоваровУслуг"
ДобавитьВ = "", //тип строка - имя элемента на который будет размещен список, если пустое, тогда добавляется на форму
ВставитьПеред = "", //тип строка - имя элемента перед которым будет размещен список, если пустое, будет просто добавлен в конец
СвояКоманднаяПанель = ЛОЖЬ, //тип булево - если ИСТИНА, скрывает стандартную панель и создает свою пустую для будушего наполнения ИмяСписка+"КоманднаяПанель2"
ПараметрыЗапроса = Неопределено)//тип структура - содержит перечень параметров, если они используются в запросе.
//Защита от дурака
Если ТекстЗапроса = "" И ТаблицаСписка = "" Тогда Сообщить("Ошибка формирования динамического списка, укажите запрос или таблицу"); Возврат; КонецЕсли;
//Создаем свою командную панель, тот случай когда я не нашел способа снять галочку "Автозаполнение"
Если СвояКоманднаяПанель Тогда
Если ВставитьПеред = "" Тогда
ГруппаДинамическогоСписка = ЭтаФорма.Элементы.Добавить("Группа" + ИмяСписка
+ "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]));
Иначе
ГруппаДинамическогоСписка = ЭтаФорма.Элементы.Вставить("Группа" + ИмяСписка
+ "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]);
КонецЕсли;
ГруппаДинамическогоСписка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДинамическогоСписка.ОтображатьЗаголовок = Ложь;
ГруппаДинамическогоСписка.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДинамическогоСписка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
КоманднаяПанельСписка = ЭтаФорма.Элементы.Добавить(ИмяСписка + "КоманднаяПанель2",Тип("ГруппаФормы"),ГруппаДинамическогоСписка);
КоманднаяПанельСписка.Вид = ВидГруппыФормы.КоманднаяПанель;
КонецЕсли;
//Создаем реквизит формы
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип("ДинамическийСписок"));
ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);
ДинамическийСписок = Новый РеквизитФормы(ИмяСписка, ОписаниеТиповДляРеквизита,,"",ЛОЖЬ); //Имя реквизита
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(ДинамическийСписок);
//Задаем свойства реквизиту
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РеквизитДинамическийСписок = ЭтаФорма[ИмяСписка]; //Имя реквизита
Если ТекстЗапроса = "" Тогда
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ;
РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка;
Иначе
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА;
РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли;
КонецЕсли;
//Заполняем параметры если они были указаны
Если ПараметрыЗапроса <> Неопределено Тогда
Для Каждого Параметра из ПараметрыЗапроса Цикл
РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение);
КонецЦикла;
КонецЕсли;
//Размещаем реквизит на форме
Если ЛОЖЬ
ИЛИ ВставитьПеред = ""
ИЛИ СвояКоманднаяПанель //Если своя командная панель тогда нет логики уже в параметре ВставитьПеред
Тогда
ТаблицаФормы = ЭтаФорма.Элементы.Добавить(ИмяСписка,Тип("ТаблицаФормы"),
?(СвояКоманднаяПанель,ГруппаДинамическогоСписка,?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ])));
Иначе
ТаблицаФормы = ЭтаФорма.Элементы.Вставить(ИмяСписка,Тип("ТаблицаФормы"),
?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]);
КонецЕсли;
ТаблицаФормы.ПутьКДанным = ИмяСписка; //Имя реквизита
//Если своя панель тогда скрываем стандартную
Если СвояКоманднаяПанель Тогда
ЭтаФорма.Элементы[ИмяСписка].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
КонецЕсли;
//Создание колонок на основание МассивКолонок
Для Каждого Элемента Из МассивКолонок Цикл
ПараметрыКолонки = СтрЗаменить(Элемента,",",Символы.ПС);
Если СтрЧислоСтрок(ПараметрыКолонки) > 1 Тогда
Заголовок = СтрПолучитьСтроку(ПараметрыКолонки, 1);
ИмяКолонки = СтрПолучитьСтроку(ПараметрыКолонки, 2);
Иначе
Заголовок = "";
ИмяКолонки = ПараметрыКолонки;
КонецЕсли;
НоваяКолонкаТаблицы = ЭтаФорма.Элементы.Добавить(ИмяСписка + ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы);
Если Заголовок <> "" Тогда НоваяКолонкаТаблицы.Заголовок = Заголовок; КонецЕсли;
НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки;
КонецЦикла;
//Задаем действия (События) на основание СписокДействий, если он определен
Если СписокДействий <> Неопределено Тогда
ПереченьСвойств = "ПриИзменении
|Выбор
|ПриАктивизацииСтроки
|ВыборЗначения
|ПриАктивизацииПоля
|ПриАктивизацииЯчейки
|ПередНачаломДобавления
|ПередНачаломИзменения
|ПередУдалением
|ПриНачалеРедактирования
|ПередОкончаниемРедактирования
|ПриОкончанииРедактирования
|ОбработкаВыбора
|ПередРазворачиванием
|ПередСворачиванием
|ПослеУдаления
|ПриСменеТекущегоРодителя
|ОбработкаЗаписиНового
|ПриСохраненииПользовательскихНастроекНаСервере
|ПередЗагрузкойПользовательскихНастроекНаСервере
|ПриЗагрузкеПользовательскихНастроекНаСервере
|ПриОбновленииСоставаПользовательскихНастроекНаСервере
|ОбработкаЗапросаОбновления
|ПриПолученииДанныхНаСервере
|НачалоПеретаскивания
|ПроверкаПеретаскивания
|ОкончаниеПеретаскивания
|Перетаскивание";
Для Счетчик = 1 по 28 Цикл
ИмяСвойства = СтрПолучитьСтроку(ПереченьСвойств, Счетчик);
ЭтаФорма.Элементы[ИмяСписка].УстановитьДействие(ИмяСвойства,?(СписокДействий.Свойство(ИмяСвойства),СписокДействий[ИмяСвойства],""));
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Удобно или нет - решать вам. Приведу лишь пример кода, созданного выше с помощью и без помощи общего модуля.
&НаСервере
Процедура ПрограмноеСозданиеЭлементовРеквизитовКоманд()
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
//Создание реквизитов
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
НовыйРеквизит = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы("ПометкаУдаления",Новый ОписаниеТипов("Булево"));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
//Создание полей
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Номер", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Номер";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Дата", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Дата";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Наименование", Тип("ПолеФормы"),ГруппаШапка);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Наименование";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Комментарий", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Комментарий";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ПометкаУдаления", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "ПометкаУдаления";
//Декорация надпись
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ЗаголовокТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "Глобус";
//Декорация картинка
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие";
//Создание кнопок
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"),СтраницаТовары);
НовыйЭлемент.Заголовок = "Привет мир!";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка2", Тип("КнопкаФормы"),СтраницаДополнительно);
НовыйЭлемент.Заголовок = "Сложить номер";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка3", Тип("КнопкаФормы"),СтраницаДополнительно);
НовыйЭлемент.Заголовок = "Текущее время";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
КонецПроцедуры
&НаСервере
Процедура СозданиеЭлементовФормыЧерезОбщийМодуль()
//Создание обычной группы без отображения
ГруппаДатаНомер = проЭлементы.СоздатьОбычнуюГруппуБезОтображения(ЭтаФорма,"ГруппаДатаНомер",ЭтаФорма,3);
//Создание обычной группы
ГруппаШапка = проЭлементы.СоздатьОбычнуюГруппу(ЭтаФорма,"ГруппаШапка",ЭтаФорма,"Основные реквизиты",1);
//Создание группы страниц
ГруппаСтраницы = проЭлементы.СоздатьГруппуСтраницы(ЭтаФорма,"ГруппаСтраницы",ЭтаФорма,1);
//Создание страниц
СтраницаТовары = проЭлементы.СоздатьСтраницу(ЭтаФорма,"СтраницаТовары",ГруппаСтраницы,"Товары");
СтраницаДополнительно = проЭлементы.СоздатьСтраницу(ЭтаФорма,"СтраницаДополнительно",ГруппаСтраницы,"Дополнительно");
//Пример создания одного реквизита
проЭлементы.СоздатьРеквизит("Комментарий",проЭлементы.ОписаниеТипаСтрока(200),ЭтаФорма);
//Пример создания нескольких реквизитов
структураРеквизитов = Новый Структура;
структураРеквизитов.Вставить("Номер",проЭлементы.ОписаниеТипаЧисло(10,0));
структураРеквизитов.Вставить("Дата",проЭлементы.ОписаниеТипаДатаВремя());
структураРеквизитов.Вставить("Наименование",проЭлементы.ОписаниеТипаСтрока(100));
структураРеквизитов.Вставить("ПометкаУдаления",Новый ОписаниеТипов("Булево"));
проЭлементы.СоздатьРеквизиты(структураРеквизитов,ЭтаФорма);
//Создание полей
проЭлементы.СоздатьПоле(ЭтаФорма,"Номер",ГруппаДатаНомер,1,"Номер");
проЭлементы.СоздатьПоле(ЭтаФорма,"Дата",ГруппаДатаНомер,1,"Дата");
СтруктураСвойства = Новый Структура;
СтруктураСвойства.Вставить("РастягиватьПоГоризонтали",ИСТИНА);
проЭлементы.СоздатьПоле(ЭтаФорма,"Наименование",ГруппаШапка,1,"Наименование",СтруктураСвойства);
проЭлементы.СоздатьПоле(ЭтаФорма,"Комментарий",СтраницаДополнительно,1,"Комментарий");
проЭлементы.СоздатьПоле(ЭтаФорма,"ПометкаУдаления",СтраницаДополнительно,2,"ПометкаУдаления");
//Создаем декорацию - отдельная функция для надписи
проЭлементы.СоздатьДекорациюНадпись(ЭтаФорма,"ЗаголовокТовара",СтраницаТовары,"Глобус");
//Создаем декорацию универсальной функцией, картинка
СтруктураСвойства = Новый Структура;
СтруктураСвойства.Вставить("Вид",ВидДекорацииФормы.Картинка);
СтруктураСвойства.Вставить("Картинка",БиблиотекаКартинок.ГеографическаяСхема);
СтруктураСвойства.Вставить("РазмерКартинки",РазмерКартинки.Растянуть);
СтруктураСвойства.Вставить("Ширина",20);
СтруктураСвойства.Вставить("Высота",8);
проЭлементы.СоздатьДекорацию(ЭтаФорма,"КартинкаТовара",СтраницаТовары,СтруктураСвойства);
//Создаем общую команду
проЭлементы.СоздатьКоманду(ЭтаФорма,"ОбщаяКоманда","Общая команда","ОбщееДействие");
//Создание кнопок
проЭлементы.СоздатьКнопку(ЭтаФорма,"Кнопка1",СтраницаТовары,"Привет мир!","ОбщаяКоманда");
проЭлементы.СоздатьКнопку(ЭтаФорма,"Кнопка2",СтраницаДополнительно,"Сложить номер","ОбщаяКоманда");
проЭлементы.СоздатьКнопку(ЭтаФорма,"Кнопка3",СтраницаДополнительно,"Текущее время","ОбщаяКоманда");
КонецПроцедуры
Всем удачного кодинга!
Другие полезные шпаргалки:
Публикации по работе с интерфейсом:
Вступайте в нашу телеграмм-группу Инфостарт
UI UX Интерфейс Элементы Управляемая форма ЭтаФорма Кнопка Поле Группа Динамический список программно программное
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)
Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!
31720 руб.
27.03.2025 92358 69 44
Консолидация данных Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)
Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.
6088 руб.
17.10.2025 3673 3 0
Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)
Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.
36600 руб.
28.08.2025 10372 2 2
Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна
20.08.2024 57450 mrXoxot 44
Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.
27.05.2024 30015 smielka 39
Инструментарий разработчика Работа с интерфейсом Разработчик 1С 8.3 Абонемент ($m)
Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.
1 стартмани
10.04.2023 19491 190 acces969 31
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Питничная фантазия на возможности в разработке интерфейсов формы с помощью Платформы 1С - делаем свою подсказку. Публикация содержит готовую библиотеку программного формирования данной подсказки.
12.08.2022 16979 top_1c 39
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.
1 стартмани
05.07.2022 17979 kalyaka 8
пара замечаний, ну куда ж без них
1. Напишите жирным шрифтом
синтаксис ЭтаФорма.Элементы.
использовать только если этот фрагмент кода расположена в методе с параметром
ЭтаФорма, например Функция СоздатьГруппуФормы(ЭтаФорма, ПараметрыГруппы)
если же этот фрагмент кода будет расположен в модуле формы, то достаточно
написать Элементы.
Когда будет копипастить код из этой шпаргалки, то всегда думайте чтобы НЕ рукоягодничить.
2. Практически все примеры представленного функционала можно найти в общих модулях типовых конфигураций и если вы изучите эту шпаргалку, то логичнее не
плодить еще тонну кода в типовой, а использовать аналоги оттуда.
пожалуй все остальное чики-пуки, больше замечаний нет.
Ну вы бы сказали куда смотреть хотя бы для старта.
Так что, господа, попрыгаете на грабли программной доработки формы (особенно чужой и криво сделанной), поймёте. Лет через 5 вернёмся к этой теме)
А во вторых, кто на этих расширениях уже что называется "собаку съел" советуют новые элементы форм создавать в расширениях программно, что бы потом не было проблем с обновлениями.
Наоборот, за пределами 1С моветон рисовать формы. Даже в декларативном стиле, как это на управляемых сделано. Весь веб-интерфейс описывается кодом. Все эти конструктора для Веб'а канули в лету.
Наоборот, функционал для программной работы с формами давно напрашивается в БСП. Но он почему-то есть только в выборочных конфигурациях (как мне говорили, в Документообороте 3 есть такой модуль).
Если сделана грамотная декомпозиция методов по созданию элементов, команд, реквизитов и обработчиков, то трудозатраты на доработку программно-генерируемого интерфейса формы лишь незначительно больше, чем на изучение и разработку в конструкторе.
Давайте процитирую мой исходный комментарий:
Разве я в нем сравнивал разработчиков 1С и разработчиков, пишущих на других языках? Только подчеркнул факт, что 1С-никам надо чаще писать качественный и сопровождаемый код. Желательно с соблюдением стандартов. Весь посыл.
При чем тут другой форум, я так и не понял.
Ваша фраза "Среди 1С-ников качественный и осмысленный код встречается не столь часто.". По моему мнению означает, что вы встречали код в разработках не на платформе 1С, написанный гораздо качественней с вашей точки зрения.
Заранее извиняюсь за ошибки, которые вам "режут глаз".
открывается форма "Выбор реквизита" в которой помимо реквизитов (колонки) есть еще реквизит Строка[0]
в которой тоже присутствуют колонки. Может кто то подсказать, как и для чего используется реквизит Сnрока[0]? или ссылку где можно почитать? Изображение прикреплено.
Спасибо заранее.
P.S. Я немного слукавил. В УТ используется не первая строка таблицы, а текущая. Подход немного другой, но сути это не меняет.
Функция ВозможныеПараметрыДекорации()
ПараметрыДекорации = Новый Структура("Ширина, Высота, Вид");
Возврат ПараметрыДекорации;
КонецФункции;поможет напомнить, что конкретно можно передать.
ТаблицаФормы например Форма.Элементы.Товары
&НаСервере
Функция СозЭлементТаблицаКолонкаПолеВвода(Форма,
ТаблицаФормы,
ИмяКолонки,
ПутьКДанным,
Заголовок = "",
ВставитьПеред = Неопределено) Экспорт
Если ВставитьПеред = Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);
КонецЕсли;
Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = ПутьКДанным;
Возврат НовыйЭлемент;
КонецФункции
&НаСервере
Функция СозЭлементТаблицаКолонкаФлажок(Форма,
ТаблицаФормы,
ИмяКолонки,
ПутьКДанным,
Заголовок = "",
ВставитьПеред = Неопределено) Экспорт
Если ВставитьПеред = Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);
КонецЕсли;
Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = ПутьКДанным;
Возврат НовыйЭлемент;
КонецФункции ПоказатьНовыйЭлемент = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);
КонецЕсли;
А тут зачем так ? Можно всегда метод "Вставить" использовать, последний параметр не обязателен. В справке написано "Элемент, перед которым должен быть вставлен новый элемент. Если не указан, то элемент будет вставлен в конец."
Случайно наткнулся на вашу статью и не смог пройти мимо. Программное создание элементов на форме использовал ранее в конфигурации и было ровно также реализовано, через общий модуль и далее вызов всего этого "чуда" при создании формы.
Да, соглашусь, проблему на типовое обновление это решает вопрос, но вот когда база стала расти, пользователей в базе стало больше 300 активных, вот тут мы стали получать проблему производительности, так как, каждый раз при открытии формы создаются программно элементы. Когда пользователей стало более 1000 было принято решение перехода на расширения, так как, показатели производительности стремились к нулю.
А после, я где-то на ИТС встетил информацию, что сами разработчики 1С не рекомендуют использовать программное создание элементов на форме, ровно по той причине, которую я выше описал. Так сказать, получил практический опыт, как делать не нужно.
А так, статья хорошая, но наверное не стоит злоупотреблять программным созданием элементов + помнить, что чем больше активных пользователей. тем медленнее будет работать система.
Опять же я создавал 120 элементов. Разница в миллисекундах вышла почти в два раза. Грубо говоря расширением 82 мс, программно 179 мс :) ну и конечно речь идёт про повторное открытие, при первом открытие формы разница не так велика, где-то 195 (расширение) против 207 (программно).
ИзменитьРеквизиты (ChangeAttributes)
Синтаксис:
ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
Параметры:
<ДобавляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий объекты типа РеквизитФормы.
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект.<Имя реквизита>.
<УдаляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
Удалять можно только ранее программно добавленные реквизиты.
Допустим удаляя динамический список - не нужно удалять каждую колонку, достаточно удалить элемент динамического списка.
ИмяЭлемента = "ИмяВашегоЭлемента";
Элементы.Удалить(Элементы[ИмяЭлемента]);НовоеПоле.УстановитьДействие("ПриИзменении", "ПолеПриИзменении");
и собственно Процедура ПолеПриИзменении(Элемент)
Сам как-то столкнулся с подобным вопросом. К сожалению, не все возможно сделать программно. Эту галку поставить при программном создании невозможно.
Заменил :
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
......
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;
На:
Если СтруктураСвойств <> Неопределено Тогда
Для Каждого Свойства Из СтруктураСвойств Цикл
НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;
КонецЦикла;
КонецЕсли;
Но в целом большое спасибо за работу, у самого был подобный модуль,
но у Вас все удобнее и красивее )).
Интерактивно это делается примерно так
код по добавлению элемента управления
НовыйЭлемент = Элементы.Добавить("СтрокаПоиска", Тип("ДополнениеЭлементаФормы"), Элементы.ГруппаОтбора);
НовыйЭлемент.Вид = ВидДополненияЭлементаФормы.ОтображениеСтрокиПоиска;
//НовыйЭлемент.Источник = ??? //нет свойства источник
В расширение добавлен регистр сведений. Желаю в регистр сведений сделать запись, источником данных для которой, являются динамически(программно) созданные реквизиты на форме элемента справочника.
Никак не могу получить значение "своего" реквизита.
Подскажите пожалуйста выход из тупика, или как его обойти.
НовыйЭлемент.Высота = 20; НовыйЭлемент.АвтоМаксимальнаяВысота = Ложь; НовыйЭлемент.МаксимальнаяВысота = 20;
НовыйЭлемент.Ширина = 50; НовыйЭлемент.АвтоМаксимальнаяШирина = Ложь; НовыйЭлемент.МаксимальнаяШирина = 50;Теперь масштабирование не работает)))
вот код, в котором я создал реквизит, создал группу, поле ввода и поместил его в созданную группу.
//Создание Группы
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
НовыйРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Команда на добавление реквезитов из массива
//Создание полей для реквизитов
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Номер2", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Номер";
ПоказатьЕсли вдруг у кого-то будет такая же проблема, то вот решение:
Идея заключается в том, что мы:
1) Создаем объект(в нашем случае Массив), в котором будут храниться значения, из которых надо будет выбирать.
2) Создаем "Реквизит", в котором сохраним наше значение и к которому будем обращаться в дальнейшем, если например, это значение нам понадобится.
3) Создаем поле ввода, которое отображается на форме, и с которым взаимодействует пользователь. Добавляем возможность выбора значения в данном поле, значения берутся из Массива, созданного нами же в первом пункте.
Ниже привел код, описал каждую строчку, для максимального понимания процесса:
//Задаем массив значений, в котором будут элементы, из которых будем выбирать
МассивЗначенийВыбора = Новый Массив; //новый массив куда будем добавлять элементы
МассивЗначенийВыбора.Добавить("Строка"); //добавляем в массив элемент, значение которого "Строка"
МассивЗначенийВыбора.Добавить("Число"); //добавляем в массив элемент, значение которого "Число"
//описываем свойства нового реквизита и имя
НовыйРеквизит = Новый РеквизитФормы("ИмяНовогоРеквизита", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); //добавляем описанный выше реквизит на форму
//добавляем на форму элемент(само "окошко", с которым будет взаимодействовать пользователь)
Элемент = ЭтаФорма.Элементы.Добавить("ЭлементПолеВыбораТипа", Тип("ПолеФормы"), Элементы.ТипЗначения); //добавляем элемент на форму "ЭлементПолеВыбораТипа" - имя элемента, может быть любым
Элемент.Вид = ВидПоляФормы.ПолеВвода; //указываем вид элемента
Элемент.ПутьКДанным = ИмяНовогоРеквизита; //имя реквизита, созданного выше
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; //настройка "отображать заголовок или нет"(не обязательная строка)
Элементы["ЭлементПолеВыбораТипа"].РежимВыбораИзСписка = Истина; //включаем режи выбора из списка, если не включить, то мы получим просто поле для ввода(примечание: Элементы[ИмяЭлемента] - способ обращения к добавленному программно элементу на форму, например для получения значения или установки значения)
Элементы["ЭлементПолеВыбораТипа"].СписокВыбора.ЗагрузитьЗначения(МассивЗначенийВыбора); //подключаем ранее созданный массив с данными из которых будем выбирать, к созданному полю выбора
ЭтотОбъект["ИмяНовогоРеквизита"] = "Строка"; //обращаемся к созданному в начале реквизиту и устанавливаем ему значение "по умолчанию", в целом это не обязательно
Показать ИмяЭлемента = "НМ";
ЭлементФормы = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ГруппаФормы);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "Объект.НачальныйНомерМеста";
ЭлементФормы.МногострочныйРежим = Ложь;
ЭлементФормы.Заголовок = "Номер места с";
КонечныйНомерМеста = Объект.НачальныйНомерМеста + КоличествоМест()-1;
Если КонечныйНомерМеста < Объект.НачальныйНомерМеста Тогда
КонечныйНомерМеста = Объект.НачальныйНомерМеста;
КонецЕсли;
ЭлементФормы.УстановитьДействие(
"ПриИзменении", //Имя события
"МКТ__НачальныйНомерМестаПриИзменении"); //Имя процедуры обработчика
//Декорация надпись
ЭлементФормы = Элементы.Добавить("ДекорацияКонечныйНомер", Тип("ДекорацияФормы"),ГруппаФормы);
ЭлементФормы.Вид = ВидДекорацииФормы.Надпись;
ЭлементФормы.Заголовок = " по: "+КонечныйНомерМеста;
Показать&НаСервере
Процедура МКТ__НачальныйНомерМестаПриИзменении()
...
КонецПроцедуры
И еще хотелось бы установить кнопку выбора на "начальное место" ...
Подскажите пожалуйста, почему не дает возможности выбирать из списка выбора?
Процедура Расш1_ПриСозданииНаСервереПосле(Форма, ДополнительныеПараметры)
ГруппаОтборСтатусЗаказа = Элементы.Вставить("ГруппаОтборСтатусЗаказа", Тип("ГруппаФормы"), Элементы.ГруппаОтборы);
ГруппаОтборСтатусЗаказа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаОтборСтатусЗаказа.Заголовок = "Статус заказа";
ГруппаОтборСтатусЗаказа.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаОтборСтатусЗаказа.ОтображатьЗаголовок = Ложь;
ГруппаОтборСтатусЗаказа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаОтборСтатусЗаказа.РастягиватьПоГоризонтали = ИСТИНА;
ОтборСтатусЗаказа = Элементы.Добавить("ОтборСтатусЗаказа ", Тип("ПолеФормы"), Элементы.ГруппаОтборСтатусЗаказа);
ОтборСтатусЗаказа .Вид = ВидПоляФормы.ПолеВвода;
ОтборСтатусЗаказа .ПутьКДанным = "Список.ОтборСтатусЗаказа";
ОтборСтатусЗаказа .Заголовок = НСтр("ru='Статус заказа'");
ОтборСтатусЗаказа .РежимВыбораИзСписка = Истина;
ОтборСтатусЗаказа .ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
//вызов функции для отбора по статусу заказа
ЗаполнитьСписокВыбораОтборСтатусЗаказа(ЭтаФорма, "ОтборСтатусЗаказа ");
КонецПроцедуры
Процедура ЗаполнитьСписокВыбораОтборСтатусЗаказа(Форма, ИмяПоляОтбора, СОтступом = Истина, МассивИсключений = Неопределено)
КомпонентыФС = Новый Массив;
Если МассивИсключений = Неопределено Тогда
МассивИсключений = Новый Массив;
КонецЕсли;
Отступ = ?(СОтступом, " ", "");
Если МассивИсключений.Найти(1) = Неопределено Тогда
// Группа
КомпонентыФС.Добавить(БиблиотекаКартинок.БезОплатыОжидаетсяСегодня);
КомпонентыФС.Добавить(" ");
КомпонентыФС.Добавить(НСтр("ru='Создан'"));
СтрокаПредставления = Новый ФорматированнаяСтрока(КомпонентыФС);
Форма.Элементы[ИмяПоляОтбора].СписокВыбора.Добавить("Создан", СтрокаПредставления);
КонецЕсли;
Если МассивИсключений.Найти(2) = Неопределено Тогда
// Группа
КомпонентыФС.Очистить();
КомпонентыФС.Добавить(БиблиотекаКартинок.ОплаченЧастичноОжидаетсяСегодня);
КомпонентыФС.Добавить(НСтр("ru='Готов к отгрузке'"));
КомпонентыФС.Добавить(" ");
СтрокаПредставления = Новый ФорматированнаяСтрока(КомпонентыФС);
Форма.Элементы[ИмяПоляОтбора].СписокВыбора.Добавить("'Готов к отгрузке", СтрокаПредставления);
КонецЕсли;
Если МассивИсключений.Найти(3) = Неопределено Тогда
КомпонентыФС.Очистить();
КомпонентыФС.Добавить(БиблиотекаКартинок.ОплаченЧастичноНеПросрочено);
КомпонентыФС.Добавить(" ");
КомпонентыФС.Добавить(НСтр("ru='На отгрузке'"));
СтрокаПредставления = Новый ФорматированнаяСтрока(КомпонентыФС);
Форма.Элементы[ИмяПоляОтбора].СписокВыбора.Добавить("На отгрузке", СтрокаПредставления);
КонецЕсли;
Если МассивИсключений.Найти(4) = Неопределено Тогда
КомпонентыФС.Очистить();
КомпонентыФС.Добавить(БиблиотекаКартинок.ОплаченПолностью);
КомпонентыФС.Добавить(" ");
КомпонентыФС.Добавить(НСтр("ru='Отгружен'"));
СтрокаПредставления = Новый ФорматированнаяСтрока(КомпонентыФС);
Форма.Элементы[ИмяПоляОтбора].СписокВыбора.Добавить("Отгружен", СтрокаПредставления);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборСтатусЗаказаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) //срабатывает, когда жмешь на элемент из списка
Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Возврат;
КонецЕсли;
Если ВыбранноеЗначение = "Создан"
Или ВыбранноеЗначение = "Готов к отгрузке"
Или ВыбранноеЗначение = "На отгрузке"
ИЛИ ВыбранноеЗначение = "Отгружен" Тогда
УстановитьМеткуИОтборСписка("ОтборСтатусЗаказа", Элемент.Родитель.Имя, ВыбранноеЗначение);
Иначе
УстановитьМеткуИОтборСписка("НомерКартинкиСтатусаЗаказа", Элемент.Родитель.Имя, ВыбранноеЗначение);
КонецЕсли;
ВыбранноеЗначение = Неопределено;
КонецПроцедуры
//отбор по статусу заказа
&НаКлиенте
Процедура ОтборСтатусЗаказа(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Возврат;
КонецЕсли;
УстановитьМеткуИОтборСписка("ОтборСтатусЗаказа", Элемент.Родитель.Имя, ВыбранноеЗначение);
ВыбранноеЗначение = Неопределено;
КонецПроцедуры
ПоказатьЕсть документ, в расширении добавляю в него реквизит "Партия". Этот реквизит типа "Документ.ПоступлениеТоваров".
Хочу вывести реквизит на форму чтобы выбирать и использовать при проведении.
И не могу.
//Партия - так называется новый реквизит документа в расширении
ДобавляемыеРеквизиты = Новый Массив;
НовыйРеквизит = Новый РеквизитФормы("Партия", Новый ОписаниеТипов("ДокументСсылка.ПоступлениеТоваров"));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Партия", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаШапка);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Партия"; ПоказатьИ получаю ошибку
НовыйЭлемент.ПутьКДанным = "Партия";
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Недопустимое значение
И так, и сяк пробовал. Не получается
ДобавляемыеРеквизиты = Новый Массив;
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ДокументСсылка.ПоступлениеТоваров"));
НовыйРеквизит = Новый РеквизитФормы("Партия", Новый ОписаниеТипов(МассивТипов));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1118319
Создание 06.09.19 13:30
Обновление 24.08.22 06:48
Просмотры 722290
Загрузки 0
Рейтинг
1106
Комментарии 118
Код открыт Да
Рубрики Работа с интерфейсом
Кому
Разработчик
,
Стажер
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)







