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

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

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


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

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

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

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

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

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

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

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

Показать
psa247; dooD1iez; +2 Ответить 5
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)
В объекте документа создана ТЧ "УСТ_Услуги"

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

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

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

ЭлементТаблицыФормы = Элементы.Добавить("УСТ_УслугиНоменклатура", Тип("ПолеФормы"),ТаблицаУслуги);
ЭлементТаблицыФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементТаблицыФормы.ПутьКДанным = "Объект.УСТ_Услуги.Номенклатура";
Показать
unknow_user; SergeySol-82; hasp_x; prog1c_vl; psa247; VyacheslavShilov; cleaner_it; belarus767; Hogyoku; Idris1204; FatPanzer; +11 Ответить
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с полон страданий :)
Оставьте свое сообщение

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