Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 окт 2021, 15:14

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

Автор Alex345, 05 авг 2021, 14:52

0 Пользователей и 1 гость просматривают эту тему.

Alex345

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




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

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


LexaK

а почему именно через программное создание?
в конструкторе формы, так удобно, насоздавал реквизитов, перетащил мышкой на форму, как угодно разместил там с помощью групп

или вы мечтаете создать одну универсальную форму для всех Типов документов?  :lol: 

ну а по теме, просто создайте элементы ГруппаФормы и в ней выводите колонки своей таблицы, вот ваш код с упрощенным примером
    Для Каждого Колонка Из ТЗ.Колонки Цикл

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

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

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

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

    КонецЦикла;
ответ Понравился? (в смысле пригодился?)

Alex345

@LexaK, Спасибо, через программное создание я сделал, потому что у меня будет их несколько формироваться на разных страницах при добавлении некоторых значений.
 Но я код более правильный изменил под себя, так как там как-то не так структура таблицы отображалась.

Вот тока Мои Элементы Количество, Цена, Комментарий, каждый зависим между собой из разных колонок, и чтобы этого не было нужно где-то зафигачить вот этот метод? Чтобы наверно были разные родители?

Переместить(<Элемент>, <Родитель>, <МестоРасположения>)




&НаСервере
Процедура НажатиеКнопкиНаСервере()


ИмяРеквизита = Элементы.ГруппаСтраницы.ТекущаяСтраница.ПодчиненныеЭлементы[1].Имя;
ПоследниеСимволы = Прав(ИмяРеквизита, 2);


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



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

Сч = 0;
Для Каждого Колонка Из ТЗ.Колонки Цикл

//Сч = Сч + 1;

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

        Если Колонка.Имя = "П1" ИЛИ Колонка.Имя = "П2" ИЛИ Колонка.Имя = "П3" Тогда
            ИмяСтаршейГруппы = Колонка.Имя + "Группа";
            ДобавитьГруппу(ИмяСтаршейГруппы, Тип("ГруппаФормы"), ТаблицаПолейВыбора);

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

        КонецЕсли;
    КонецЦикла;

Сообщить("Test");
   // ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");

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

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

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

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


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск