Шпаргалка: https://infostart.ru/1c/articles/1118319/
Для примера ниже код создания на форме элементов, соответствующих реквизитам документа (аналогично для справочника). Вывод без заголовков и других фишек, просто чтобы был понятен принцип. Предварительно создаем группу страниц и отдельно группу для реквизитов объекта и табличных частей документа.
Сначала создаем реквизиты на форме. Имена реквизитов не должны совпадать с имеющимися реквизитами. Потом создаем элементы на форме и связываем их с реквизитами.
&НаСервере
Процедура СформироватьРеквизитыИЭлементы()
ИмяОбъекта = "ЧекККМ";
// Создаем группу страниц
СоздатьНаФормеСтраницы();
// Ищем элемент Страница по имени и создаем в нем элементы
СтраницаРеквизиты = Элементы.Найти("СтраницаРеквизиты");
СоздатьРеквизиты(ИмяОбъекта, СтраницаРеквизиты);
ТабличныеЧасти = Элементы.Найти("СтраницаТабличныеЧасти");
Для каждого ТабЧасть из Метаданные.Документы.ЧекККМ.ТабличныеЧасти Цикл
СоздатьТаблицу(ИмяОбъекта,ТабЧасть.Имя, ТабличныеЧасти);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьНаФормеСтраницы()
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаРеквизиты", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Реквизиты";
СтраницаТабличныеЧасти = ЭтаФорма.Элементы.Добавить("СтраницаТабличныеЧасти", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТабличныеЧасти.Вид = ВидГруппыФормы.Страница;
СтраницаТабличныеЧасти.Заголовок = "Табличные части";
КонецПроцедуры
&НаСервере
Процедура СоздатьРеквизиты(ИмяОбъекта, ИмяЭлементаРодителя = Неопределено)
ДобавляемыеРеквизиты = Новый Массив;
РеквизитыОбъекта = Метаданные.Документы[ИмяОбъекта].Реквизиты;
для каждого РеквизитТ из РеквизитыОбъекта Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(РеквизитТ.Имя,РеквизитТ.Тип));
КонецЦикла;
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
для каждого РеквизитТ из РеквизитыОбъекта Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(РеквизитТ.Имя, Тип("ПолеФормы"),ИмяЭлементаРодителя);
НовыйЭлемент.ПутьКДанным = РеквизитТ.Имя;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьТаблицу(ИмяОбъекта, ИмяТаблицы, ИмяЭлементаРодителя = Неопределено)
РеквизитыТаблицы = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти[ИмяТаблицы].Реквизиты;
ДобавляемыеРеквизиты = Новый Массив;
НовыйРеквизит = Новый РеквизитФормы(ИмяТаблицы,Новый ОписаниеТипов("ТаблицаЗначений"));
НовыйРеквизит.Заголовок = ИмяТаблицы;
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
для каждого РеквизитТ из РеквизитыТаблицы Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(РеквизитТ.Имя,РеквизитТ.Тип,ИмяТаблицы));
КонецЦикла;
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
НовыйЭлементТаблица = ЭтаФорма.Элементы.Добавить(ИмяТаблицы, Тип("ТаблицаФормы"),ИмяЭлементаРодителя);
НовыйЭлементТаблица.ПутьКДанным = ИмяТаблицы;
НовыйЭлементТаблица.Заголовок = ИмяТаблицы;
НовыйЭлементТаблица.ПоложениеКоманднойПанели=ПоложениеКоманднойПанелиЭлементаФормы.Нет;
НовыйЭлементТаблица.ПоложениеЗаголовка=ПоложениеЗаголовкаЭлементаФормы.Верх;
// можно было сделать и в одном цикле, но так логика более понятна: сначала создаем реквизит, потом элемент.
для каждого РеквизитТ из РеквизитыТаблицы Цикл
НовыйЭлементКолонка = ЭтаФорма.Элементы.Добавить(ИмяТаблицы + РеквизитТ.Имя, Тип("ПолеФормы"),НовыйЭлементТаблица); //Имя элемента колонки формируется как <Имя таблицы><Имя колонки>. Это сделано для того, чтобы не было повторения имен элементов, например Сумма - реквизит документа и есть аналогичный в реквизитах табличной части. Можно между именем таблицы и именем колонки вставить разделитель "_"
НовыйЭлементКолонка.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементКолонка.Заголовок = РеквизитТ.Имя;
НовыйЭлементКолонка.ПутьКДанным = ИмяТаблицы + "." + РеквизитТ.Имя;
Если РеквизитТ.Тип.СодержитТип(Тип("Булево")) Тогда
НовыйЭлементКолонка.Вид=ВидПоляФормы.ПолеФлажка; // для более удобного редактирования
КонецЕсли;
КонецЦикла;
КонецПроцедуры
|