Уведомления
Очистить все

Как программно создать произвольную таблицу значений на управляемой форме в 1С?

1 Записи
1 Пользователи
0 Likes
3,725 Просмотры
82-150 Okolokompa Форум
(@buldozer)
Estimable Member
Присоединился: 4 года назад
Записи: 47
Создатель темы  

Создаём при помощи кода (программно) таблицу значений на форме в управляемом приложении.

Приведённый ниже пример кода, покажет как создать таблицу на форме, при этом добавляется дополнительная колонка с флажком (Пометка - тип Булево).

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

        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |	ЛОЖЬ КАК Пометка,
        |	Номенклатура.Ссылка КАК Сегмент
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |	НЕ Номенклатура.ПометкаУдаления
        |
        |УПОРЯДОЧИТЬ ПО
        |	Номенклатура.Наименование";
        
        РезультатЗапроса = Запрос.Выполнить();
        ТЗ = РезультатЗапроса.Выгрузить();
        
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			МассивТиповЗначений = Новый Массив;
			Для Каждого тТип из Колонка.ТипЗначения.Типы() Цикл
				Если тТип <> Тип("Null") Тогда
					//+ Добавил на всякий случай это условие. На некотрых реквизитах не взлетало. Можно убрать - должно и так работать
					Если НЕ Строка(тТип) = "НеизвестныйОбъект" Тогда 
					//- Добавил на всякий случай это условие. На некотрых реквизитах не взлетало. Можно убрать - должно и так работать	
						МассивТиповЗначений.Добавить(тТип);
					//+ Добавил на всякий случай это условие. На некотрых реквизитах не взлетало. Можно убрать - должно и так работать	
					КонецЕсли;
					//- Добавил на всякий случай это условие. На некотрых реквизитах не взлетало. Можно убрать - должно и так работать
				КонецЕсли;
			КонецЦикла;                                                                                                    
			МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТиповЗначений), ИмяТЗ));
		КонецЦикла;

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

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

   
Цитата
Поделиться: