Таблица значений как элемент формы

1. VoVo 03.10.22 22:36 Сейчас в теме
Здравствуйте, подскажите вывожу на форму таблицу значений как элемент формы, с колонками все норм появились более менее как надо, только заголовки не сработали. Основное еще в таблицу значений добавляю строки, в ТЗ они есть но на форму не выводятся. А как в таком случае их можно вывести строки именно на форму уже?

&НаСервере
Процедура ЗаполнитьТаблицуЦенНоменклатурыНаСервере()

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

Процедура ДобавитьГруппу(Имя, Тип, Родитель)    
	НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
	НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок;    
КонецПроцедуры

Процедура ДобавитьНовыйЭлемент(Имя, Тип, Родитель, ПутьКДанным)
	НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);       
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	НовыйЭлемент.ПутьКДанным = ПутьКДанным;
КонецПроцедуры


Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
4. spacecraft 03.10.22 22:56 Сейчас в теме
(3) не поверите. методом Загрузить соответствующего реквизита формы.

ЭтаФорма.Список.Загрузить(ТЗ);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1831019 03.10.22 22:46 Сейчас в теме
Предполагаю, что их надо загрузить в реквизит формы.
Возможно, я дико ошибаюсь, и строки там должны появиться по какому-то неизвестному мне колдунству...
3. VoVo 03.10.22 22:52 Сейчас в теме
(2)Реквизит формы создан программно, т.к. количество колонок может быть разным. Колонки я понял как выводить в этом случае программно, но как вывести строки то есть загрузить туда не пойму.
4. spacecraft 03.10.22 22:56 Сейчас в теме
(3) не поверите. методом Загрузить соответствующего реквизита формы.

ЭтаФорма.Список.Загрузить(ТЗ);
5. VoVo 03.10.22 23:07 Сейчас в теме
(4)
ЭтаФорма.Список.Загрузить(ТЗ);

То есть это уже полноценный реквизит формы получается. Не разобрался. Подумал раз программно выводится, то и так же должен как то добавляться построчно, я ошибался. Спасибо за помощь и в том числе за искрометный юмор, который помог мне осознать какие у меня еще пробелы в знаниях.
6. user1831019 03.10.22 23:13 Сейчас в теме
А зачем вообще нужна ТЗ? Что мешает сразу формировать колонки реквизита формы, и потом заполнять таблицу через Добавить()?
7. VoVo 03.10.22 23:17 Сейчас в теме
(6)Тут вопрос стоит хоть как-то сделать, срочно нужно до утра допилить. Тут до чего гугл и собственные знания довели так и пытаюсь. Потом уже будет время изменю алгоритм как вы пишите попробую для опыта. Спасибо за помощь.
8. user1831019 03.10.22 23:21 Сейчас в теме
Опять же - два раза ИзменитьРеквизиты() в одной процедуре...
В курсе, что ИзменитьРеквизиты() приводит к полному перестроению формы?
9. VoVo 03.10.22 23:23 Сейчас в теме
(8)Да, тоже спасибо за замечание. В спешке все. Оптимизирую, как что-то рабочее получу.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот