Приветствую Вас ГостьСуббота, 18.05.2024, 10:25

Каталог статей


Программное добавление элементов

Шпаргалка: https://infostart.ru/1c/articles/1118319/

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

Сначала создаем реквизиты на форме. Имена реквизитов не должны совпадать с имеющимися реквизитами. Потом создаем элементы на форме и связываем их с реквизитами.

&НаСервере
Процедура СформироватьРеквизитыИЭлементы()
    
    ИмяОбъекта = "ЧекККМ";

    // Создаем группу страниц
    СоздатьНаФормеСтраницы();

    // Ищем элемент Страница по имени и создаем в нем элементы
    СтраницаРеквизиты = Элементы.Найти("СтраницаРеквизиты");
    СоздатьРеквизиты(ИмяОбъекта, СтраницаРеквизиты); 
    
    ТабличныеЧасти = Элементы.Найти("СтраницаТабличныеЧасти");
    Для каждого ТабЧасть из Метаданные.Документы.ЧекККМ.ТабличныеЧасти Цикл
        СоздатьТаблицу(ИмяОбъекта,ТабЧасть.Имя, ТабличныеЧасти);
    КонецЦикла;        
    
КонецПроцедуры

&НаСервере
Процедура СоздатьНаФормеСтраницы()
    ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
    ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
    ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
    ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
    
    СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаРеквизиты", Тип("ГруппаФормы"),ГруппаСтраниц);
    СтраницаТовары.Вид = ВидГруппыФормы.Страница;
    СтраницаТовары.Заголовок = "Реквизиты";
    
    СтраницаТабличныеЧасти = ЭтаФорма.Элементы.Добавить("СтраницаТабличныеЧасти", Тип("ГруппаФормы"),ГруппаСтраниц);
    СтраницаТабличныеЧасти.Вид = ВидГруппыФормы.Страница;
    СтраницаТабличныеЧасти.Заголовок = "Табличные части";       
КонецПроцедуры

&НаСервере
Процедура СоздатьРеквизиты(ИмяОбъекта, ИмяЭлементаРодителя = Неопределено)

    ДобавляемыеРеквизиты = Новый Массив; 
    РеквизитыОбъекта = Метаданные.Документы[ИмяОбъекта].Реквизиты;
    для каждого РеквизитТ из РеквизитыОбъекта Цикл
        ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(РеквизитТ.Имя,РеквизитТ.Тип));        
    КонецЦикла;
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    для каждого РеквизитТ из РеквизитыОбъекта Цикл
        НовыйЭлемент = ЭтаФорма.Элементы.Добавить(РеквизитТ.Имя, Тип("ПолеФормы"),ИмяЭлементаРодителя);
        НовыйЭлемент.ПутьКДанным =  РеквизитТ.Имя;
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;        
    КонецЦикла;

КонецПроцедуры 

&НаСервере
Процедура СоздатьТаблицу(ИмяОбъекта, ИмяТаблицы, ИмяЭлементаРодителя = Неопределено)
    
    РеквизитыТаблицы =  Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти[ИмяТаблицы].Реквизиты;
    
    ДобавляемыеРеквизиты = Новый Массив; 
    НовыйРеквизит = Новый РеквизитФормы(ИмяТаблицы,Новый ОписаниеТипов("ТаблицаЗначений")); 
    НовыйРеквизит.Заголовок = ИмяТаблицы;    
    ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); 
    
    для каждого РеквизитТ из РеквизитыТаблицы Цикл
        ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(РеквизитТ.Имя,РеквизитТ.Тип,ИмяТаблицы));        
    КонецЦикла;
    
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); 
    
    НовыйЭлементТаблица = ЭтаФорма.Элементы.Добавить(ИмяТаблицы, Тип("ТаблицаФормы"),ИмяЭлементаРодителя);
    НовыйЭлементТаблица.ПутьКДанным =  ИмяТаблицы;
    НовыйЭлементТаблица.Заголовок = ИмяТаблицы;
    НовыйЭлементТаблица.ПоложениеКоманднойПанели=ПоложениеКоманднойПанелиЭлементаФормы.Нет;
    НовыйЭлементТаблица.ПоложениеЗаголовка=ПоложениеЗаголовкаЭлементаФормы.Верх;
  

    // можно было сделать и в одном цикле, но так логика более понятна: сначала создаем реквизит, потом элемент. 
    для каждого РеквизитТ из РеквизитыТаблицы Цикл        
        НовыйЭлементКолонка = ЭтаФорма.Элементы.Добавить(ИмяТаблицы + РеквизитТ.Имя, Тип("ПолеФормы"),НовыйЭлементТаблица); //Имя элемента колонки формируется как <Имя таблицы><Имя колонки>. Это сделано для того, чтобы не было повторения имен элементов, например Сумма - реквизит документа и есть аналогичный в реквизитах табличной части. Можно между именем таблицы и именем  колонки вставить разделитель "_"
        НовыйЭлементКолонка.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлементКолонка.Заголовок = РеквизитТ.Имя;
        НовыйЭлементКолонка.ПутьКДанным = ИмяТаблицы + "." + РеквизитТ.Имя;
        Если РеквизитТ.Тип.СодержитТип(Тип("Булево")) Тогда
            НовыйЭлементКолонка.Вид=ВидПоляФормы.ПолеФлажка; // для более удобного редактирования
        КонецЕсли;
    КонецЦикла;  
    
КонецПроцедуры

Категория: Формы | Добавил: leshic (22.06.2021)
Просмотров: 326 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0