Как в форме списка справочника получить ссылку на текущий элемент?
Для получения ссылки на текущий элемент справочника в форме списка можно обратиться к свойству ТекущаяСтрока элемента формы Таблица. Например:
СсылкаНаТекущийЭлементСправочника = Элементы.Список.ТекущаяСтрока;
Другой способ — обратиться к полю Ссылка текущих данных таблицы формы:
СсылкаНаТекущийЭлементСправочника = Элементы.Список.ТекущиеДанные.Ссылка;
Для списков объектных данных (справочников, документов, . ) эти способы равнозначны, так как поле Ссылка является идентификатором записи.
При обращении к спискам регистров свойство ТекущаяСтрока будет выдавать ключ записи регистра, который состоит из нескольких полей.
Таким образом, свойство ТекущаяСтрока для всех типов данных выдает значение, идентифицирующее текущую строку.
Следует иметь ввиду, что поле Ссылка, как правило, не отображается в списке. Поэтому если есть необходимость программного обращения к этому полю, нужно гарантировать, что это поле всегда будет в динамическом списке.
Для этого у реквизита формы Ссылка нужно установить флаг — ИспользоватьВсегда:
Изучаем работу со списком значений на управляемой форме 1С 8.3
В предыдущей статье «Изучаем список значений 1С» я показал, каким образом можно программного работать со списком значений. Мы научились добавлять, вставлять и загружать нужные элементы в список. Но со списком значений можно работать на управляемой форме 1С, когда он используется в качестве реквизита этой формы. В этой статье мы разберем вопросы работы со списком значений на форме.
На управляемой форме 1С список значений можно разместить в качестве реквизита управляемой формы.
Мы уже знаем, что каждый элемент списка значений содержит значения типа Элемент списка значений, но можно задать тип данных, которые будут содержаться в этом элементе. Делается это при помощи свойства реквизита – тип значения. В этом случае, все элементы заданного списка значений будут одного типа.

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

После начала размещения, будет предложено выбрать тип нового элемента. Можно выбрать или таблицу, или поле.

Если мы выберем тип Таблица, то будет размещен элемент с типом Таблица, где в качестве колонок можно размещать соответствующие свойства списка значений.


Теперь на форме можно работать с этим списком, выбирая нужные объекты, указанного типа.

С реквизитом формы мы можем работать как с обычным списком значений. Например, заполним созданный нами список всеми складами, которые можно использовать.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Склады.Ссылка КАК Ссылка, | Склады.Представление КАК Представление |ИЗ | Справочник.Склады КАК Склады |ГДЕ | НЕ Склады.НеИспользовать"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Список.Добавить(Выборка.Ссылка,Выборка.Представление); КонецЦикла; КонецПроцедуры
В этом случае, список заполнится сразу при открытии формы.

Более подробно о работе со списками значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
[Шпаргалка] Программное создание элементов формы
В публикации будет разработан пример создания интерфейса с задействованием практически всех популярных элементов формы. Одно из исключений — таблица, вариант программного создания таблицы описывал ранее — программное создание динамического списка. Ниже пример интерфейса, который будет разобран (тестировалось на платформе 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",СтраницаДополнительно,"Текущее время","ОбщаяКоманда"); КонецПроцедуры
Всем удачного кодинга!
Другие полезные шпаргалки:

Публикации по работе с интерфейсом:
Как программно вывести список элементов формы 1с
Есть на форме таблица значений. При создании на сервере она заполняется данными. Затем пользователь устанавливает в ней некий отбор. Вопрос — как поймать программно установку данного отбора и как получить таблицу значений уже с установленным отбором?
кури ОтборСтрок
(1) поставил отбор в форме, смотрю отладчиком:
Элементы.СписокПеределов.ОтборСтрок = неопределено
ОтборСтрок — это как я понимаю для программной установки отбора, а мне нужно отловить отбор, который установил пользователь в этой таблице значений на форме
Кури Список.Отбор
Для каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
Если ЭлементОтбора.Использование Тогда
.
КонецЕсли;
КонецЦикла;
(0) у тебя скорее всего не таблица значений, а динамический список
(6) Нет, у меня именно таблица значений на форме
(4) Это доступно с какого релиза? У меня 8.2.19.116.
(7) это применительно к динамическому списку, а тз не знаю как там.
(7) в УФ не бывает таблицы значений на формах, есть ДанныеФормыКоллекция
(9) Да, реквизит — таблица значений, а на форме — ДанныеФормыКоллекция.
Т.е. это только для дин списка получается?
а у ДанныеФормыКоллекция разве есть отбор на форме для пользователя?
(10) Список.Отбор — да, для ДанныеФормыКоллекция — это отбор строк
(12) Поле объекта не обнаружено (Отбор)
(12) а как использовать отбор строк для ДанныеФормыКоллекция ?
При установленном отборе на форме — смотрю в отладчике:
Элементы.СписокПеределов.ОтборСтрок — неопределено.
(15) интерактивно он видимо не устанавливается, делай свою кнопку для установки ОтборСтрок или изменения самой таблицы значений отображаемой на форме
(15) а что в твоем понятии есть «установленный отбор на форме»? кнопка нажатая какая? так провались отладчиком в ее обработчик. скрин дай! по ходу у тебя обычное приложение подозреваю вообще
вот, обыкновенный отбор через «найти». Пользователь встает на колонку и набирает символы
(18) если отбор строк неопределено в этом режиме, то создай поле поиска, пусть юзверь туда вбивает, привяжи к нему отбор строк
(0) Используй ПроверитьСтроку(), чтобы отсеить те строки, которые не выводятся пользователю (за счет фильтров, отборов, поиска). Но событие ты не отловишь (ЕМНИП, то это событие планируется добавить в будущих релизах).
+(20) Только учти, что в Веб-клиенте (в тонком и толстом нормально) ПроверитьСтроку() не работает корректно до до релиза 8.3.7.
(20) да, вроде то, что нужно. только еще возникла проблема, почему то после установки отборов количество строк в Элементы.СписокПеределов — все время увеличивается.
т.е. если в «СписокПеределов» — постоянно 10 строк, то в «Элементы.СписокПеределов» — строки идут не с 0 по 9, а к примеру с 15 по 24 и т.д. увеличивается если несколько раз отбирать.
(22) Индекс и Идентификатор строки — это разные вещи. Будь внимателен, где и что выводится. Если перезаполнять таблицу, то идентификаторы будут новые даны строкам.
(23) да, так и есть. пришлось извратиться через переменную, которая хранит номер первой строки в элементах.
спасибо всем, кто помогал, особенно Drac0, ответ в (20) натолкнул на правильную идею, а дальше сам доделал.
