8.х Как создать группу колонок в табличном поле формы программно

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Serjio77, 13 фев 2020 в 20:16.

  1. TopicStarter Overlay
    Serjio77
    Offline

    Serjio77

    Регистрация:
    28 июн 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Уважаемые мастера!
    Вопрос пожалуй уже всеми избитый.
    Есть табличное поле. Создается оно программно.
    Код выглядит вот так:
    //Тут создаем таблицу значений в которой прописываем все колонки

    ТабЗначФормы = Новый ТаблицаЗначений;
    ТабЗначФормы.Колонки.Добавить("ИмяДокумента", Новый ОписаниеТипов("Строка"), "имя документа", 30);
    ТабЗначФормы.Колонки.Добавить("ИмяДокумента2", Новый ОписаниеТипов("Строка"), "имя документа2", 30);
    ТабЗначФормы.Колонки.Добавить("ИмяДокумента3", Новый ОписаниеТипов("Строка"), "имя документа3", 30);

    //Теперь создаем группу на форме, в которую у нас встанет наша будущая таблица

    ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаПроводкиДокументов", Тип("ГруппаФормы"),ЭтаФорма);
    ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаШапка.Заголовок = "Проводки документов";
    ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
    ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
    ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;

    ГруппаПроводки = Элементы.ГруппаПроводкиДокументов;

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

    // добавим реквизиты на форму
    ИзменитьРеквизиты(Реквизиты);

    // добавим элементы формы. Ну и вставили нашу таблицу в созданную группу
    Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"), Элементы.ГруппаПроводкиДокументов);
    Таб.ПутьКДанным = "ТаблицаНаФорме";

    // запретим менять положение строк и сами строки, отключим командную панель
    Таб.ИзменятьСоставСтрок = Ложь;
    Таб.ИзменятьПорядокСтрок = Ложь;
    Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

    //Теперь колонки поехали в созданную таблицу
    Сч = 1;

    Для Каждого Ст ИЗ ТабЗначФормы.Колонки Цикл

    Если Сч > 1 Тогда
    //Здесь нужно чтобы вторая и третья колонка встали в одну группу и тут все ломается и дальше не работает
    ГруппаПолейТаб = ЭтаФорма.Элементы.Добавить("ГруппаПроводкиДокументов", Тип("ГруппаФормы"), Элементы.ТаблицаНаФорме);
    ГруппаПолейТаб.ОтображатьВШапке = Истина;
    ГруппаПолейТаб.Вид = ВидГруппыФормы.ГруппаКолонок;
    ГруппаПолейТаб.Отображение = ОтображениеОбычнойГруппы.Нет;
    ГруппаПолейТаб.ОтображатьЗаголовок = ЛОЖЬ;
    ГруппаПолейТаб.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;

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

    Иначе

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

    КонецЕсли;

    Сч = Сч + 1;

    КонецЦикла;

    Мой вопрос в следующем что я делаю не так? Всю голову уже сломал. Ведь по идее Элементы.ТаблицаНаФорме это таблица формы. Тот самый тип который может выступать в качестве родителя. Но доходит до этого места и выскакивает ошибка "Недопустимое значение параметров"
  2. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    5.163
    Симпатии:
    217
    Баллы:
    104
    Отладчиком пробовали пройтись?
    Судя по всему, вы группу создаете не один раз (в цикле). В результате получается, что пытаетесь добавить на форму несколько элементов с одинаковым именем, что недопустимо.
  3. TopicStarter Overlay
    Serjio77
    Offline

    Serjio77

    Регистрация:
    28 июн 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    ГруппаПолейТаб = ЭтаФорма.Элементы.Добавить("ГруппаКолонокТЧ", Тип("ГруппаФормы"), Таб);
    ГруппаПолейТаб.ОтображатьВШапке = Истина;
    ГруппаПолейТаб.Вид = ВидГруппыФормы.ГруппаКолонок;
    //ГруппаПолейТаб.ОтображатьЗаголовок = Истина;
    ГруппаПолейТаб.Группировка = ГруппировкаКолонок.Вертикальная;

    Сч = 1;

    Для Каждого Ст ИЗ ТабЗначФормы.Колонки Цикл

    Если Сч > 1 Тогда

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

    Иначе

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

    КонецЕсли;

    Сч = Сч + 1;

    КонецЦикла;

    Странно а теперь то почему колонки в группу не попадают? Отладчиком смотрю, у группы формы ГруппаКолонокТЧ в качестве подчиненных элементов находятся нужные мне колонки. А на форме они отображаются так как будто я их ни в какую группу и не вставлял. Причем родителя я пытался по разному писать и Элементы.ГруппаКолонокТЧ и ГруппаПолейТаб
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    5.163
    Симпатии:
    217
    Баллы:
    104
    По первому взгляду, вроде, правильно.
    Тем более в подчиненные элементы нужные поля попали.

    Возможно, что-то забыли, какое-нибудь свойство, которое влияет на отображение.