Приветствую, подскажите пробую, но пока не знаю как нормально создать несколько Групп колонок для моей таблицы. У меня есть таблица, которая создается программно, к ней я пока что могу добавить колонки Товар, П1, П2, П3. Но я не знаю как делать так, чтобы эти колонки П1, П2, П3 были как каждая отдельная (Группа колонок), потому что в каждую из них я хочу запихать еще две колонки Количество и Цена.
Вот как выглядит код моей создаваемой таблицы при клике по кнопке.
И вот как она отображается в данный момент, где в П1 я бы хотел добавить несколько пустых колон с названиями
Вот как выглядит код моей создаваемой таблицы при клике по кнопке.
&НаСервере
Процедура НажатиеКнопкиНаСервере()
ИмяРеквизита = Элементы.ГруппаСтраницы.ТекущаяСтраница.ПодчиненныеЭлементы[1].Имя;
ПоследниеСимволы = Прав(ИмяРеквизита, 2);
//Сообщить(ЭтаФорма["Реквизит" + ПоследниеСимволы][Сч]);
//создание таблицы на форме
МассивТипаВыбора = Новый Массив;
МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
//создаем таблицу которая содержит несколько колонок
КД = Новый КвалификаторыДаты(ЧастиДаты.Время);
МассивКД = Новый Массив;
МассивКД.Добавить(Тип("Дата"));
ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
//заполним программную таблицу нужными данными
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), Элементы.ГруппаСтраницы.ТекущаяСтраница);
ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
//укажем путь к данным
Для Каждого Колонка Из ТЗ.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
НовыйЭлемент.Ширина = 10;
КонецЦикла;
ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
КонецПроцедуры
ПоказатьИ вот как она отображается в данный момент, где в П1 я бы хотел добавить несколько пустых колон с названиями
По теме из базы знаний
- Загрузка данных из табличного документа и создание групп справочников
- Таблицы на управляемых формах: создание, расширение, управление.
- Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример
- [Шпаргалка] Программное создание элементов формы
- [ПОТРАЧЕНО] Динамическая таблица формы
Найденные решения
(9) Вроде получилось... правда реализация кода так себе. Но надеюсь алгоритм действий будет понятен
Результат выполнения кода на скриншоте
&НаСервере
Процедура Команда1НаСервере()
МассивТипаВыбора = Новый Массив;
МассивТаблицыЗначений = Новый Массив;
МассивРеквизитов = Новый Массив;
ОписаниеТипаВыбора = Новый ОписаниеТипов("ТаблицаЗначений");
МассивТаблицыЗначений.Добавить(Новый РеквизитФормы("Список", ОписаниеТипаВыбора, "", "ТЗН"));
ИзменитьРеквизиты(МассивТаблицыЗначений);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
ТЗ.Колонки.Добавить("Цена");
ТЗ.Колонки.Добавить("Количество");
//КолонкиСтруктура = Новый Структура;
//КолонкиСтруктура.Вставить("П1", Новый Структура("ЦенаП1", "КоличествоП1"));
//КолонкиСтруктура.Вставить("П2", Новый Структура("ЦенаП2", "КоличествоП2"));
//КолонкиСтруктура.Вставить("П3", Новый Структура("ЦенаП3", "КоличествоП3"));
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"Список."));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), ЭтаФорма);
ТаблицаПолейВыбора.ПутьКДанным = "Список";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если Колонка.Имя = "Товар" Тогда
ДобавитьНовыйЭлемент(Колонка.Имя, Тип("ПолеФормы"),ТаблицаПолейВыбора, "Список." + Колонка.Имя);
КонецЕсли;
Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
ИмяСтаршейГруппы = Колонка.Имя + "Группа";
ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
ДобавитьНовыйЭлемент(Колонка.Имя,Тип("ПолеФормы"),Элементы[ИмяСтаршейГруппы],"Список." + Колонка.Имя);
ИмяМладшейГруппы = "ГруппаКолонок"+Колонка.Имя;
ДобавитьГруппу(ИмяМладшейГруппы, Тип("ГруппаФормы"), Элементы[ИмяСтаршейГруппы]);
ДобавитьНовыйЭлемент(Колонка.Имя + "Цена",Тип("ПолеФормы"),Элементы[ИмяМладшейГруппы],"Список.Цена");
ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Список.Количество");
Элементы[ИмяМладшейГруппы].Группировка = ГруппировкаКолонок.Горизонтальная;
КонецЕсли;
КонецЦикла;
// ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
КонецПроцедуры
Процедура ДобавитьГруппу(Имя, Тип, Родитель)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок;
КонецПроцедуры
Процедура ДобавитьНовыйЭлемент(Имя, Тип, Родитель, ПутьКДанным)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = ПутьКДанным;
КонецПроцедуры
ПоказатьРезультат выполнения кода на скриншоте
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Хотеть не вредно, вредно не хотеть... Но хотеть надо исполнимого и не придумывать свою логику. И не путать хранение информации с её отображением.
Не бывает колонок в колонках. И на форме отображается не сама таблица, а данные из неё. С помощью разных полей. Которые могут группироваться, для чего делают соответствующие группы.
Исходя из твоего желания П1 должно быть не колонкой, а группой колонок, в которую уже должны быть помещены поля с ценой и количеством. И эти группы и поля к таблице уже не имеют никакого отношения кроме упоминания её колонок в пути к данным полей.
Не бывает колонок в колонках. И на форме отображается не сама таблица, а данные из неё. С помощью разных полей. Которые могут группироваться, для чего делают соответствующие группы.
Исходя из твоего желания П1 должно быть не колонкой, а группой колонок, в которую уже должны быть помещены поля с ценой и количеством. И эти группы и поля к таблице уже не имеют никакого отношения кроме упоминания её колонок в пути к данным полей.
(6) Ну вот я не знаю пока правильно ли я прописываю путь для создания Группы колонок. Как я понял она у нас уже создается внутри таблицы. И я решил ее написать после комментария //укажем путь к данным. Чтобы попытаться хотя бы создать эту группу колонок правильно.
И я немного не понимаю как создать Группу колонок внутри таблицы, правильным способом, чтобы я уже туда запихал колонки.
НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), ТаблицаПолейВыбора);
И я немного не понимаю как создать Группу колонок внутри таблицы, правильным способом, чтобы я уже туда запихал колонки.
&НаСервере
Процедура СозданиеТаблицыНаСервере()
//создание таблицы на форме
МассивТипаВыбора = Новый Массив;
МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
//создаем таблицу которая содержит несколько колонок
КД = Новый КвалификаторыДаты(ЧастиДаты.Время);
МассивКД = Новый Массив;
МассивКД.Добавить(Тип("Дата"));
ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
//заполним программную таблицу нужными данными
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), Элементы.Группа1.ТекущаяСтраница);
ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
//укажем путь к данным
НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), ТаблицаПолейВыбора);
Для Каждого Колонка Из ТЗ.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), НовЭлемент);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "НовЭлемент." + Колонка.Имя;
НовыйЭлемент.Ширина = 10;
КонецЦикла;
ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
//Сообщить(НовЭлемент);
КонецПроцедуры
Показать
(8) Спасибо, Я попытался связать, внеся кардинальные изменения в новый код такого формата
И в итоге он стал таким
У меня сейчас создается, вот такой план таблицы, но что-то не понимаю где косяк?
Так как хотелось бы видеть такого плана
Для Каждого Колонка Из ТЗ.Колонки Цикл
//определяем родительский элемент в который добавляется вложенный
ЭлементГруппа = ТаблицаПолейВыбора;
Если СтрНайти(Колонка.Имя,"П") = 1 Тогда
//создаем Группу
ЭлементГруппа = Элементы.Добавить("Группа"+Колонка.Имя, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
КонецЕсли;
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
НовыйЭлемент.Ширина = 10;
Если СтрНайти(Колонка.Имя,"П") = 1 Тогда
//добавление связанной колонки Цена
НовыйЭлемент = Элементы.Добавить("Цена"+Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);
НовыйЭлемент.Заголовок = "Цена";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;//только другой путь надо задать
//добавление связанной колонки Количество
НовыйЭлемент = Элементы.Добавить("Кол"+Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);
НовыйЭлемент.Заголовок = "Кол-во";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;//только другой путь надо задать
КонецЕсли;
КонецЦикла;
ПоказатьИ в итоге он стал таким
&НаСервере
Процедура ДобавлениеТаблицыНаСервере()
//создание таблицы на форме
МассивТипаВыбора = Новый Массив;
МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
//создаем таблицу которая содержит несколько колонок
КД = Новый КвалификаторыДаты(ЧастиДаты.Время);
МассивКД = Новый Массив;
МассивКД.Добавить(Тип("Дата"));
ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
//заполним программную таблицу нужными данными
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"));
ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
//укажем путь к данным
Для Каждого Колонка Из ТЗ.Колонки Цикл
//определяем родительский элемент в который добавляется вложенный
ЭлементГруппа = ТаблицаПолейВыбора;
Если СтрНайти(Колонка.Имя, "П") = 1 Тогда
//создаем Группу
ЭлементГруппа = Элементы.Добавить("Группа" + Колонка.Имя, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
КонецЕсли;
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
НовыйЭлемент.Ширина = 10;
Если СтрНайти(Колонка.Имя,"П") = 1 Тогда
//добавление связанной колонки Цена
НовыйЭлемент = Элементы.Добавить("Цена" + Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);
НовыйЭлемент.Заголовок = "Цена";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
//добавление связанной колонки Количество
НовыйЭлемент = Элементы.Добавить("Кол"+Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);
НовыйЭлемент.Заголовок = "Кол-во";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
КонецЕсли;
КонецЦикла;
ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
КонецПроцедуры
ПоказатьУ меня сейчас создается, вот такой план таблицы, но что-то не понимаю где косяк?
Так как хотелось бы видеть такого плана
(9) Вроде получилось... правда реализация кода так себе. Но надеюсь алгоритм действий будет понятен
Результат выполнения кода на скриншоте
&НаСервере
Процедура Команда1НаСервере()
МассивТипаВыбора = Новый Массив;
МассивТаблицыЗначений = Новый Массив;
МассивРеквизитов = Новый Массив;
ОписаниеТипаВыбора = Новый ОписаниеТипов("ТаблицаЗначений");
МассивТаблицыЗначений.Добавить(Новый РеквизитФормы("Список", ОписаниеТипаВыбора, "", "ТЗН"));
ИзменитьРеквизиты(МассивТаблицыЗначений);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
ТЗ.Колонки.Добавить("Цена");
ТЗ.Колонки.Добавить("Количество");
//КолонкиСтруктура = Новый Структура;
//КолонкиСтруктура.Вставить("П1", Новый Структура("ЦенаП1", "КоличествоП1"));
//КолонкиСтруктура.Вставить("П2", Новый Структура("ЦенаП2", "КоличествоП2"));
//КолонкиСтруктура.Вставить("П3", Новый Структура("ЦенаП3", "КоличествоП3"));
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"Список."));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), ЭтаФорма);
ТаблицаПолейВыбора.ПутьКДанным = "Список";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если Колонка.Имя = "Товар" Тогда
ДобавитьНовыйЭлемент(Колонка.Имя, Тип("ПолеФормы"),ТаблицаПолейВыбора, "Список." + Колонка.Имя);
КонецЕсли;
Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
ИмяСтаршейГруппы = Колонка.Имя + "Группа";
ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
ДобавитьНовыйЭлемент(Колонка.Имя,Тип("ПолеФормы"),Элементы[ИмяСтаршейГруппы],"Список." + Колонка.Имя);
ИмяМладшейГруппы = "ГруппаКолонок"+Колонка.Имя;
ДобавитьГруппу(ИмяМладшейГруппы, Тип("ГруппаФормы"), Элементы[ИмяСтаршейГруппы]);
ДобавитьНовыйЭлемент(Колонка.Имя + "Цена",Тип("ПолеФормы"),Элементы[ИмяМладшейГруппы],"Список.Цена");
ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Список.Количество");
Элементы[ИмяМладшейГруппы].Группировка = ГруппировкаКолонок.Горизонтальная;
КонецЕсли;
КонецЦикла;
// ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
КонецПроцедуры
Процедура ДобавитьГруппу(Имя, Тип, Родитель)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок;
КонецПроцедуры
Процедура ДобавитьНовыйЭлемент(Имя, Тип, Родитель, ПутьКДанным)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = ПутьКДанным;
КонецПроцедуры
ПоказатьРезультат выполнения кода на скриншоте
Прикрепленные файлы:
(14) Ага понял. Насчет Переместить сходу ничего ответить не могу. А так можно переделать алгоритм, чтобы при каждой итерации цикла который добавляет группу и элементы, для каждого элемента указывал разных родителей, а в качестве родителей выступают реквизиты, а реквизиты нужно добавить в таблицу значений (см. скриншот)
В моем примере кода, я для экономии времени указывал один и тот же реквизит в качестве родителя.
В моем примере кода, я для экономии времени указывал один и тот же реквизит в качестве родителя.
Прикрепленные файлы:
(15) Я хотел примерно так зафигачить понимая что дело в создаваемых Реквизитах, и решил создать. перед каждым элементом, но у меня почему то не проканало.
Я добавляю для каждого Элемента новый Реквизит вместе с счетчиком в Цикле через Ск.
Если смотреть весь код кнопки, то он выглядит так
И в итоге он почему-то ругается на том, что у меня якобы ПутьКДанным не совпадает с именем Реквизита, хотя там все идеально.
Я добавляю для каждого Элемента новый Реквизит вместе с счетчиком в Цикле через Ск.
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Цена" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Цена", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Цена" + Ск);
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Количество" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Количество" + Ск);
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Комментарий" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Комментарий", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Комментарий" + Ск);
ПоказатьЕсли смотреть весь код кнопки, то он выглядит так
&НаСервере
Процедура НажатиеКнопкиНаСервере()
ИмяРеквизита = Элементы.ГруппаСтраницы.ТекущаяСтраница.ПодчиненныеЭлементы[1].Имя;
ПоследниеСимволы = Прав(ИмяРеквизита, 2);
//создаем таблицу
МассивТипаВыбора = Новый Массив;
МассивТаблицыЗначений = Новый Массив;
МассивРеквизитов = Новый Массив;
ОписаниеТипаВыбора = Новый ОписаниеТипов("ТаблицаЗначений");
МассивТаблицыЗначений.Добавить(Новый РеквизитФормы("Список", ОписаниеТипаВыбора, "", "ТЗН"));
ИзменитьРеквизиты(МассивТаблицыЗначений);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("П1");
ТЗ.Колонки.Добавить("П2");
ТЗ.Колонки.Добавить("П3");
ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка"));
Для Каждого Колонка Из ТЗ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"Список."));
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), Элементы.ГруппаСтраницы.ТекущаяСтраница);
ТаблицаПолейВыбора.ПутьКДанным = "Список";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
Ск = 0;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если Колонка.Имя = "Товар" Тогда
ДобавитьНовыйЭлемент(Колонка.Имя, Тип("ПолеФормы"),ТаблицаПолейВыбора, "Список." + Колонка.Имя);
КонецЕсли;
Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
ИмяСтаршейГруппы = Колонка.Имя + "Группа";
ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
//ДобавитьНовыйЭлемент(Колонка.Имя,Тип("ПолеФормы"),Элементы[Колонка.Имя + "Группа"],"Список." + Колонка.Имя);
ИмяМладшейГруппы = "ГруппаКолонок" + Колонка.Имя;
ДобавитьГруппу(ИмяМладшейГруппы, Тип("ГруппаФормы"), Элементы[ИмяСтаршейГруппы]);
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Цена" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Цена", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Цена" + Ск);
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Количество" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Количество" + Ск);
//Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
Тест = Новый РеквизитФормы("Комментарий" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
ДобавляемыеРеквизиты.Добавить(Тест);
//Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавитьНовыйЭлемент(Колонка.Имя + "Комментарий", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Комментарий" + Ск);
Элементы[ИмяМладшейГруппы].Группировка = ГруппировкаКолонок.Горизонтальная;
Элементы[ИмяМладшейГруппы].ОтображатьВШапке = Истина;
КонецЕсли;
Ск = Ск + 1;
КонецЦикла;
// ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
КонецПроцедуры
Процедура ДобавитьГруппу(Имя, Тип, Родитель)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок;
КонецПроцедуры
Процедура ДобавитьНовыйЭлемент(Имя, Тип, Родитель, ПутьКДанным)
НовыйЭлемент = Элементы.Добавить(Имя, Тип, Родитель);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = ПутьКДанным;
КонецПроцедуры
ПоказатьИ в итоге он почему-то ругается на том, что у меня якобы ПутьКДанным не совпадает с именем Реквизита, хотя там все идеально.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот