Создание группы колонок в таблице

1. Alex562035 05.08.21 15:57 Сейчас в теме
Приветствую, подскажите пробую, но пока не знаю как нормально создать несколько Групп колонок для моей таблицы. У меня есть таблица, которая создается программно, к ней я пока что могу добавить колонки Товар, П1, П2, П3. Но я не знаю как делать так, чтобы эти колонки П1, П2, П3 были как каждая отдельная (Группа колонок), потому что в каждую из них я хочу запихать еще две колонки Количество и Цена.

Вот как выглядит код моей создаваемой таблицы при клике по кнопке.

&НаСервере
Процедура НажатиеКнопкиНаСервере()
    
    
    ИмяРеквизита = Элементы.ГруппаСтраницы.ТекущаяСтраница.ПодчиненныеЭлементы[1].Имя;
    ПоследниеСимволы = Прав(ИмяРеквизита, 2);
        
    //Сообщить(ЭтаФорма["Реквизит" + ПоследниеСимволы][Сч]);
        
    //создание таблицы на форме
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
    
    //создаем таблицу которая содержит несколько колонок
    КД = Новый КвалификаторыДаты(ЧастиДаты.Время);            
    
    МассивКД = Новый Массив;
    
    МассивКД.Добавить(Тип("Дата"));
    
    ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
    
    
    ТЗ = Новый ТаблицаЗначений;
 
    ТЗ.Колонки.Добавить("Товар");
    
    
    ТЗ.Колонки.Добавить("П1");
    ТЗ.Колонки.Добавить("П2");
    ТЗ.Колонки.Добавить("П3");    
    
    //заполним программную таблицу нужными данными
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
        
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивРеквизитов);      
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), Элементы.ГруппаСтраницы.ТекущаяСтраница);
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    
        //укажем путь к данным
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);       
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
        НовыйЭлемент.Ширина = 10;
        
    КонецЦикла;
    
    ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
 
            
    
      
КонецПроцедуры
Показать


И вот как она отображается в данный момент, где в П1 я бы хотел добавить несколько пустых колон с названиями

По теме из базы знаний
Найденные решения
10. Raf_f 06.08.21 07:14 Сейчас в теме
(9) Вроде получилось... правда реализация кода так себе. Но надеюсь алгоритм действий будет понятен
&НаСервере
Процедура Команда1НаСервере()
	
    МассивТипаВыбора = Новый Массив;
    МассивТаблицыЗначений = Новый Массив;
    МассивРеквизитов = Новый Массив;
    ОписаниеТипаВыбора = Новый ОписаниеТипов("ТаблицаЗначений");
    МассивТаблицыЗначений.Добавить(Новый РеквизитФормы("Список", ОписаниеТипаВыбора, "", "ТЗН"));
    ИзменитьРеквизиты(МассивТаблицыЗначений);    
	
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Товар"); 
    ТЗ.Колонки.Добавить("П1");
    ТЗ.Колонки.Добавить("П2");
    ТЗ.Колонки.Добавить("П3");
    ТЗ.Колонки.Добавить("Цена");
    ТЗ.Колонки.Добавить("Количество");
		
	//КолонкиСтруктура = Новый Структура;
	//КолонкиСтруктура.Вставить("П1", Новый Структура("ЦенаП1", "КоличествоП1"));
	//КолонкиСтруктура.Вставить("П2", Новый Структура("ЦенаП2", "КоличествоП2"));
	//КолонкиСтруктура.Вставить("П3", Новый Структура("ЦенаП3", "КоличествоП3"));
    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"Список."));    
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивРеквизитов);      
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), ЭтаФорма);
    ТаблицаПолейВыбора.ПутьКДанным = "Список";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
	    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
	Если Колонка.Имя = "Товар" Тогда
		ДобавитьНовыйЭлемент(Колонка.Имя, Тип("ПолеФормы"),ТаблицаПолейВыбора, "Список." + Колонка.Имя);
	КонецЕсли;
	Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
		     ИмяСтаршейГруппы = Колонка.Имя + "Группа";
		     ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
		     ДобавитьНовыйЭлемент(Колонка.Имя,Тип("ПолеФормы"),Элементы[ИмяСтаршейГруппы],"Список." + Колонка.Имя);
			
		     ИмяМладшейГруппы = "ГруппаКолонок"+Колонка.Имя;
		     ДобавитьГруппу(ИмяМладшейГруппы, Тип("ГруппаФормы"), Элементы[ИмяСтаршейГруппы]);
		     ДобавитьНовыйЭлемент(Колонка.Имя + "Цена",Тип("ПолеФормы"),Элементы[ИмяМладшейГруппы],"Список.Цена");
		     ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Список.Количество");
		      Элементы[ИмяМладшейГруппы].Группировка = ГруппировкаКолонок.Горизонтальная;
		  КонецЕсли;
  КонецЦикла;
	    
   // ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");

КонецПроцедуры

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

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


Результат выполнения кода на скриншоте
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. sssss_aaaaa_2011 05.08.21 16:10 Сейчас в теме
(1)Хотеть не вредно, вредно не хотеть... Но хотеть надо исполнимого и не придумывать свою логику. И не путать хранение информации с её отображением.
Не бывает колонок в колонках. И на форме отображается не сама таблица, а данные из неё. С помощью разных полей. Которые могут группироваться, для чего делают соответствующие группы.
Исходя из твоего желания П1 должно быть не колонкой, а группой колонок, в которую уже должны быть помещены поля с ценой и количеством. И эти группы и поля к таблице уже не имеют никакого отношения кроме упоминания её колонок в пути к данным полей.
3. Raf_f 05.08.21 16:30 Сейчас в теме
Правильно ли понял, что форма должна выглядеть таким образом?
Прикрепленные файлы:
4. Alex562035 05.08.21 16:34 Сейчас в теме
5. Alex562035 05.08.21 16:36 Сейчас в теме
(3) Я пробовал создавать Группу колонок таким образом и уже в них как то пихать обычные колонки, но у меня не выполнялось первое условие

 НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), Элементы.Группа1.ТекущаяСтраница);
6. sssss_aaaaa_2011 05.08.21 16:39 Сейчас в теме
(5)Ну так на группы колонок могут быть у элемента формы, отображающего таблицу, а не у страницы.
7. Alex562035 05.08.21 18:04 Сейчас в теме
(6) Ну вот я не знаю пока правильно ли я прописываю путь для создания Группы колонок. Как я понял она у нас уже создается внутри таблицы. И я решил ее написать после комментария //укажем путь к данным. Чтобы попытаться хотя бы создать эту группу колонок правильно.
НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), ТаблицаПолейВыбора);


И я немного не понимаю как создать Группу колонок внутри таблицы, правильным способом, чтобы я уже туда запихал колонки.

&НаСервере
Процедура СозданиеТаблицыНаСервере()
	
	   //создание таблицы на форме
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
    
    //создаем таблицу которая содержит несколько колонок
    КД = Новый КвалификаторыДаты(ЧастиДаты.Время);            
    
    МассивКД = Новый Массив;
    
    МассивКД.Добавить(Тип("Дата"));
    
    ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
    
    
    ТЗ = Новый ТаблицаЗначений;
 
    ТЗ.Колонки.Добавить("Товар");
    
    
    ТЗ.Колонки.Добавить("П1");
    ТЗ.Колонки.Добавить("П2");
    ТЗ.Колонки.Добавить("П3");    
    
    //заполним программную таблицу нужными данными
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
        
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивРеквизитов);      
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), Элементы.Группа1.ТекущаяСтраница);
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    
        //укажем путь к данным
		
	НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), ТаблицаПолейВыбора);
		
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), НовЭлемент);       
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "НовЭлемент." + Колонка.Имя;
        НовыйЭлемент.Ширина = 10;
        
    КонецЦикла;
    
    ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
	
	 	 //Сообщить(НовЭлемент);
КонецПроцедуры

Показать
8. spacecraft 05.08.21 19:56 Сейчас в теме
(7)
НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаКолонокФормы"), ТаблицаПолейВыбора);

Это делается по другому:
НовЭлемент = Элементы.Добавить("НоваяГруппа", Тип("ГруппаФормы"), ТаблицаПолейВыбора);
НовЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок;
9. Alex562035 05.08.21 20:50 Сейчас в теме
(8) Спасибо, Я попытался связать, внеся кардинальные изменения в новый код такого формата

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


И в итоге он стал таким
&НаСервере
Процедура ДобавлениеТаблицыНаСервере()
	
 //создание таблицы на форме
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
    
        //создаем таблицу которая содержит несколько колонок
    КД = Новый КвалификаторыДаты(ЧастиДаты.Время);            
    
    МассивКД = Новый Массив;
    
    МассивКД.Добавить(Тип("Дата"));
    
    ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);
    
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Товар");
    ТЗ.Колонки.Добавить("П1");
    ТЗ.Колонки.Добавить("П2");
    ТЗ.Колонки.Добавить("П3");    
    
    //заполним программную таблицу нужными данными
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"ТаблицаРасписания"));
        
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивРеквизитов);      
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"));
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаРасписания";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    
        //укажем путь к данным
    Для Каждого Колонка Из ТЗ.Колонки Цикл
		
		//определяем родительский элемент в который добавляется вложенный
        ЭлементГруппа = ТаблицаПолейВыбора;
        Если СтрНайти(Колонка.Имя, "П") = 1 Тогда
            //создаем Группу
            ЭлементГруппа = Элементы.Добавить("Группа" + Колонка.Имя, Тип("ГруппаФормы"), ТаблицаПолейВыбора);  
        КонецЕсли; 
		
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);       
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
        НовыйЭлемент.Ширина = 10;
		
		
		 Если СтрНайти(Колонка.Имя,"П") = 1 Тогда
            //добавление связанной колонки Цена
            НовыйЭлемент = Элементы.Добавить("Цена" + Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);       
            НовыйЭлемент.Заголовок = "Цена";
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
            НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя; 
            
            //добавление связанной колонки Количество
            НовыйЭлемент = Элементы.Добавить("Кол"+Колонка.Имя, Тип("ПолеФормы"), ЭлементГруппа);       
            НовыйЭлемент.Заголовок = "Кол-во";
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
            НовыйЭлемент.ПутьКДанным = "ТаблицаРасписания." + Колонка.Имя;
        КонецЕсли; 
        
    КонецЦикла;
    
    ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
 
КонецПроцедуры

Показать


У меня сейчас создается, вот такой план таблицы, но что-то не понимаю где косяк?



Так как хотелось бы видеть такого плана
10. Raf_f 06.08.21 07:14 Сейчас в теме
(9) Вроде получилось... правда реализация кода так себе. Но надеюсь алгоритм действий будет понятен
&НаСервере
Процедура Команда1НаСервере()
	
    МассивТипаВыбора = Новый Массив;
    МассивТаблицыЗначений = Новый Массив;
    МассивРеквизитов = Новый Массив;
    ОписаниеТипаВыбора = Новый ОписаниеТипов("ТаблицаЗначений");
    МассивТаблицыЗначений.Добавить(Новый РеквизитФормы("Список", ОписаниеТипаВыбора, "", "ТЗН"));
    ИзменитьРеквизиты(МассивТаблицыЗначений);    
	
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Товар"); 
    ТЗ.Колонки.Добавить("П1");
    ТЗ.Колонки.Добавить("П2");
    ТЗ.Колонки.Добавить("П3");
    ТЗ.Колонки.Добавить("Цена");
    ТЗ.Колонки.Добавить("Количество");
		
	//КолонкиСтруктура = Новый Структура;
	//КолонкиСтруктура.Вставить("П1", Новый Структура("ЦенаП1", "КоличествоП1"));
	//КолонкиСтруктура.Вставить("П2", Новый Структура("ЦенаП2", "КоличествоП2"));
	//КолонкиСтруктура.Вставить("П3", Новый Структура("ЦенаП3", "КоличествоП3"));
    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"Список."));    
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивРеквизитов);      
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"), ЭтаФорма);
    ТаблицаПолейВыбора.ПутьКДанным = "Список";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
	    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
	Если Колонка.Имя = "Товар" Тогда
		ДобавитьНовыйЭлемент(Колонка.Имя, Тип("ПолеФормы"),ТаблицаПолейВыбора, "Список." + Колонка.Имя);
	КонецЕсли;
	Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
		     ИмяСтаршейГруппы = Колонка.Имя + "Группа";
		     ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);
		     ДобавитьНовыйЭлемент(Колонка.Имя,Тип("ПолеФормы"),Элементы[ИмяСтаршейГруппы],"Список." + Колонка.Имя);
			
		     ИмяМладшейГруппы = "ГруппаКолонок"+Колонка.Имя;
		     ДобавитьГруппу(ИмяМладшейГруппы, Тип("ГруппаФормы"), Элементы[ИмяСтаршейГруппы]);
		     ДобавитьНовыйЭлемент(Колонка.Имя + "Цена",Тип("ПолеФормы"),Элементы[ИмяМладшейГруппы],"Список.Цена");
		     ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Список.Количество");
		      Элементы[ИмяМладшейГруппы].Группировка = ГруппировкаКолонок.Горизонтальная;
		  КонецЕсли;
  КонецЦикла;
	    
   // ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");

КонецПроцедуры

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

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


Результат выполнения кода на скриншоте
Прикрепленные файлы:
11. Raf_f 06.08.21 07:31 Сейчас в теме
(10)При создании элемента с видом ГруппаКолонок или ПолеВвода. Нужно указывать разных родителей. Тогда всё выглядит так как надо.
12. Alex562035 06.08.21 11:38 Сейчас в теме
(11) Мои Элементы Количество, Цена, Комментарий, каждый зависим между собой из разных колонок, и чтобы этого не было нужно где-то зафигачить вот этот метод?

Переместить(<Элемент>, <Родитель>, <МестоРасположения>)
13. Raf_f 06.08.21 12:28 Сейчас в теме
(12)
Каждый зависим между собой из разных колонок
что вы имеете в виду под этими словами, не до конца понимаю?
14. Alex562035 08.08.21 18:16 Сейчас в теме
(13) Я имел ввижду колонки зависимы Цена, Количество, Комментарий со всеми этими же колонками, так как я понял что у них один родитель. Поэтому и спросил что нужно его менять где-то методом Перемистить или как.

15. Raf_f 09.08.21 09:20 Сейчас в теме
(14) Ага понял. Насчет Переместить сходу ничего ответить не могу. А так можно переделать алгоритм, чтобы при каждой итерации цикла который добавляет группу и элементы, для каждого элемента указывал разных родителей, а в качестве родителей выступают реквизиты, а реквизиты нужно добавить в таблицу значений (см. скриншот)
В моем примере кода, я для экономии времени указывал один и тот же реквизит в качестве родителя.
Прикрепленные файлы:
16. Alex562035 09.08.21 11:03 Сейчас в теме
(15) Я хотел примерно так зафигачить понимая что дело в создаваемых Реквизитах, и решил создать. перед каждым элементом, но у меня почему то не проканало.

Я добавляю для каждого Элемента новый Реквизит вместе с счетчиком в Цикле через Ск.

//Описание добавляемых реквизитов
			ДобавляемыеРеквизиты = Новый Массив;
			Тест = Новый РеквизитФормы("Цена" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
			ДобавляемыеРеквизиты.Добавить(Тест);
			//Изменение состава реквизитов
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);

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

			
			ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Количество" + Ск);
			
			//Описание добавляемых реквизитов
			ДобавляемыеРеквизиты = Новый Массив;
			Тест = Новый РеквизитФормы("Комментарий" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
			ДобавляемыеРеквизиты.Добавить(Тест);
			//Изменение состава реквизитов
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);

			ДобавитьНовыйЭлемент(Колонка.Имя + "Комментарий", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Комментарий" + Ск);
Показать



Если смотреть весь код кнопки, то он выглядит так

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

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

			
			ДобавитьНовыйЭлемент(Колонка.Имя + "Количество", Тип("ПолеФормы"), Элементы[ИмяМладшейГруппы], "Количество" + Ск);
			
			//Описание добавляемых реквизитов
			ДобавляемыеРеквизиты = Новый Массив;
			Тест = Новый РеквизитФормы("Комментарий" + Ск, Новый ОписаниеТипов("Строка"), , "Тест", Истина);
			ДобавляемыеРеквизиты.Добавить(Тест);
			//Изменение состава реквизитов
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);

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

    КонецЦикла;
	
   // ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");
	
	  
КонецПроцедуры

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

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

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

Показать


И в итоге он почему-то ругается на том, что у меня якобы ПутьКДанным не совпадает с именем Реквизита, хотя там все идеально.

17. Raf_f 09.08.21 11:25 Сейчас в теме
При добавлении элемента, не верно указываете ПутьКДанным. ПутьКДанным должен содержать полный путь к реквизиту. В вашем же случее реквизит находится в таблице, значит нужно писать имя таблицы затем точка и уже имя реквизита. т.е. "Список.Количество1" и т.д. (см.скриншот)
Прикрепленные файлы:
18. Alex562035 09.08.21 12:33 Сейчас в теме
(17) Спасибо, а то я думал где косяк, вроде пишу все верно, проверяю отладчиком что все добавляется, а оказывается я не полный путь прописал
Оставьте свое сообщение

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