Программное добавление табличной части на управляемой форме

1. Idris1204 17.11.21 14:07 Сейчас в теме
Добрый день!
Столкнулся с проблемой, кто знает есть ли такая вообще возможность добавить ТЧ на форму програмно.
С реквизитами не было проблем, а вот насчет ТЧ документа встал тупик.
Сперва создал объект(методаные) ТЧ "Услуга", хочу вывести это ТЧ на форму программно
Помогите буду благодарен

ИмяГруппы = "СтраницаУслуги"; 
НоваяГруппа = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),Элементы.ГруппаСтраницы);
	
ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТабличноеПоле"), НоваяГруппа);

P/s Тип("ТаблицыФормы") тоже пробовал не помогает(
По теме из базы знаний
Найденные решения
9. spacecraft 17.11.21 16:49 Сейчас в теме
(8)
В объекте документа создана ТЧ "УСТ_Услуги"

А в шапке темы указано:
Сперва создал объект(методаные) ТЧ "Услуга",

Тогда код будет таким:
ИмяГруппы = "СтраницаУслуги";
НоваяГруппа = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),Элементы.ГруппаСтраницы);
НоваяГруппа.Вид = ВидГруппыФормы.Страница;
НоваяГруппа.Заголовок = "Услуги";

ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);
ТаблицаУслуги.ПутьКДанным = "Объект.УСТ_Услуги";

ЭлементТаблицыФормы = Элементы.Добавить("УСТ_УслугиНоменклатура", Тип("ПолеФормы"),ТаблицаУслуги);
ЭлементТаблицыФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементТаблицыФормы.ПутьКДанным = "Объект.УСТ_Услуги.Номенклатура";
Показать
VyacheslavShilov; cleaner_it; belarus767; Hogyoku; Idris1204; FatPanzer; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 17.11.21 14:38 Сейчас в теме
(1) правильно будет ТаблицаФормы.
ПутьКДанным не установлено. И каждую колонку для отображения нужно так же выводить.

ИмяГруппы = "СтраницаУслуги";
НоваяГруппа = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),Элементы.ГруппаСтраницы);
НоваяГруппа.Вид = ВидГруппыФормы.Страница;
НоваяГруппа.Заголовок = "Услуги";

ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);
ТаблицаУслуги.ПутьКДанным = "Объект.Услуга";

ЭлементТаблицыФормы = Элементы.Добавить("УСТ_УслугиНоменклатура", Тип("ПолеФормы"),ТаблицаУслуги);
ЭлементТаблицыФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементТаблицыФормы.ПутьКДанным = "Объект.Услуга.Номенклатура";
Показать
dooD1iez; +1 Ответить
6. Idris1204 17.11.21 14:59 Сейчас в теме
(5) Ругается сделал точно так как вы описали
"ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);" ошибка выскакивает на этой строке

Недопустимое значение параметров
{Отчет Документ.ОтчетКомитенту.Форма.ФормаДокумента.Форма(25)}: ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);

по причине:
Недопустимое значение параметров
7. spacecraft 17.11.21 15:03 Сейчас в теме
(6) а элемента с "УСТ_Услуги" ранее не создано? Где выполняется этот код? Повторное выполнение возможно?
8. Idris1204 17.11.21 15:15 Сейчас в теме
(7)В объекте документа создана ТЧ "УСТ_Услуги", сам код выполняется в расширении в процедуре ПриСозданияНаСервере(). Выполняется только один раз
9. spacecraft 17.11.21 16:49 Сейчас в теме
(8)
В объекте документа создана ТЧ "УСТ_Услуги"

А в шапке темы указано:
Сперва создал объект(методаные) ТЧ "Услуга",

Тогда код будет таким:
ИмяГруппы = "СтраницаУслуги";
НоваяГруппа = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),Элементы.ГруппаСтраницы);
НоваяГруппа.Вид = ВидГруппыФормы.Страница;
НоваяГруппа.Заголовок = "Услуги";

ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);
ТаблицаУслуги.ПутьКДанным = "Объект.УСТ_Услуги";

ЭлементТаблицыФормы = Элементы.Добавить("УСТ_УслугиНоменклатура", Тип("ПолеФормы"),ТаблицаУслуги);
ЭлементТаблицыФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементТаблицыФормы.ПутьКДанным = "Объект.УСТ_Услуги.Номенклатура";
Показать
VyacheslavShilov; cleaner_it; belarus767; Hogyoku; Idris1204; FatPanzer; +6 Ответить
10. Idris1204 18.11.21 11:01 Сейчас в теме
(9)
ИмяГруппы = "СтраницаУслуги";
НоваяГруппа = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),Элементы.ГруппаСтраницы);
НоваяГруппа.Вид = ВидГруппыФормы.Страница;
НоваяГруппа.Заголовок = "Услуги";

ТаблицаУслуги = Элементы.Добавить("УСТ_Услуги", Тип("ТаблицаФормы"), НоваяГруппа);
ТаблицаУслуги.ПутьКДанным = "Объект.УСТ_Услуги";

ЭлементТаблицыФормы = Элементы.Добавить("УСТ_УслугиНоменклатура", Тип("ПолеФормы"),ТаблицаУслуги);
ЭлементТаблицыФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементТаблицыФормы.ПутьКДанным = "Объект.УСТ_Услуги.Номенклатура";

(9) Спасибо помогло я так и сделал изначально, просто нужно было еще галку поставить в нужном месте в расширении, Но ваше решение мне помогло)
2. soft_wind 17.11.21 14:19 Сейчас в теме
самое простое найти обработку ФормаАдминистратора и все из нее передрать (скопировать)

вот, не знаю, поможет ли вам такой пример кода (как раз из нее)
		Если мДобРеквизитов.Количество() > 0 Тогда
			//Есть табличные части, строим их отображение
			
			ИзменитьРеквизиты(мДобРеквизитов);
				
			Для Каждого лкСтр Из мОбъектМД.ТабличныеЧасти Цикл
				лкЗакладкаТЧ		= "Закладка" + лкСтр.Имя;
				лкИмяТЧ				= "тч" + лкСтр.Имя;
				
				лкНоваяСтраница 	= Элементы.Добавить(лкЗакладкаТЧ, Тип("группаформы"),Элементы.ГруппаСтраницы);
				лкНоваяСтраница.Заголовок	= лкСтр.Имя;
				лкНоваяСтраница.Картинка	= БиблиотекаКартинок.ВложеннаяТаблица;
				
				//затем настраиваем элементы формы
				//ЭлементыФормы.Панель.ТекущаяСтраница = лкНоваяСтраница;
				лкНоваяТаблица 		= Элементы.Добавить(лкИмяТЧ, Тип("ТаблицаФормы"), лкНоваяСтраница);
			    лкНоваяТаблица.ПутьКДанным = лкИмяТЧ;
			    лкНоваяТаблица.Отображение = ОтображениеТаблицы.Список;
				//лкНоваяТаблица.ТолькоПросмотр = Истина;  
				лкНоваяТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
				
				Для Каждого лкКол Из мОбъектМД.ТабличныеЧасти[лкСтр.Имя].СтандартныеРеквизиты Цикл
					ИмяКолонки 				= лкИмяТЧ + лкКол.Имя;
					НовыйЭлемент 			= Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), лкНоваяТаблица); 		
					НовыйЭлемент.Вид 		= ВидПоляФормы.ПолеВвода;
					НовыйЭлемент.ПутьКДанным = лкИмяТЧ + "." + лкКол.Имя;		
					НовыйЭлемент.УстановитьДействие("НачалоВыбора","ПоляЗначениеНачалоВыбора");
				КонецЦикла;
				Для Каждого лкКол Из мОбъектМД.ТабличныеЧасти[лкСтр.Имя].Реквизиты Цикл
					ИмяКолонки 				= лкИмяТЧ + лкКол.Имя;
					НовыйЭлемент 			= Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), лкНоваяТаблица); 		
					НовыйЭлемент.Вид 		= ВидПоляФормы.ПолеВвода;
					НовыйЭлемент.ПутьКДанным = лкИмяТЧ + "." + лкКол.Имя;		
					Попытка
						//не все поля Ввода (в зависимости от типа) имеют событие НачалоВыбора
						НовыйЭлемент.УстановитьДействие("НачалоВыбора","ПоляЗначениеНачалоВыбора");
					Исключение
					КонецПопытки;
					
				КонецЦикла;           
				
				ЗначениеВРеквизитФормы(Ссылка[лкСтр.Имя].выгрузить(), лкИмяТЧ);
				
				//***** Назначим обработчик событий
				//лкНоваяТаблица.УстановитьДействие("ПриНачалеРедактирования",Новый Действие("ТаблицаПриНачалеРедактирования"));
				лкНоваяТаблица.УстановитьДействие("ПриНачалеРедактирования", "ТаблицаПриНачалеРедактирования");
				
			КонецЦикла;
			
		КонецЕсли;
Показать
4. Idris1204 17.11.21 14:34 Сейчас в теме
(2)
самое простое найти обработку ФормаАдминистратора и все из нее передрать (скопировать)
Это что за обработка? в ЕРП я ее не нашел
11. user1988332 11.03.24 17:18 Сейчас в теме
(2) Спасибо за пример кода. Но Споткнулась на строке
лкНоваяТаблица.ПутьКДанным = лкИмяТЧ; (такой путь в принципе настораживает)

Прошлась по форумам и судя по всему это самая распространённая ошибка. Скажите, пожалуйста, какие варианты её преодолеть? Этот пример кода самый близкий к моей задаче, хотелось бы именно от него дальше отталкиваться.
3. soft_wind 17.11.21 14:22 Сейчас в теме
у документа может быть несколько ТЧ, вот этот код их все и выводит, на форму с закладками,
на каждой закладке/странице - своя ТЧ
12. soft_wind 12.03.24 10:48 Сейчас в теме
(11)
лкНоваяТаблица.ПутьКДанным = лкИмяТЧ; (такой путь в принципе настораживает)

главное что он (этот код) работает, и опять же, возможны варианты,...
а с другой стороны, вы даже представить себе не можете , сколько раз программисты переписывают одни и теже обработки для себя, под себя. С другой стороны опять же опыт получают.

(обработка формаАдминистратора (какой нибудь универсальный редактор), есть в пакете ИР, инструменты разработчика,
очень давно там встречал, правда только для обычных форм, может уже переписали для управляемых...)
13. user1988332 12.03.24 16:09 Сейчас в теме
(12) Да как раз с утра и разобралась с этим вопросом (без создания программно реквизитов на форме не обошлось, конечно). Сейчас страдаю над тем как итог по колонке сумма вывести в подвал. Путь 1с полон страданий :)
Оставьте свое сообщение

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