Имя: Пароль:
1C
1С v8
Программно добавить ТаблицуЗначений на форму
0 RizONE
 
02.01.21
23:08
Доброе!
С Новым Годом!
Подскажите сабж, нагуглить ничего кроме УП не могу
делаю на 8.3 что-то типа

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

дает ошибку
Нужно для ОП
1 RizONE
 
02.01.21
23:09
(0) пардон, УП = УФ
2 Сергиус
 
02.01.21
23:21
(0)&НаСервере
Процедура ПриОткрытииНаСервере()

    // Описание таблицы значений как реквизита
    МассивТипа = Новый Массив;
    МассивТипа.Добавить(Тип("ТаблицаЗначений"));

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

    // Создание ТаблицыЗначений с описанием колонок
    КвалификаторыСтроки = Новый КвалификаторыСтроки(10);
    ОписаниеСтроки_10 = Новый ОписаниеТипов("Строка", ,КвалификаторыСтроки);

    ОписаниеСотрудника = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Код", ОписаниеСтроки_10);
    ТЗ.Колонки.Добавить("Сотрудник", ОписаниеСотрудника);
    // ТЗ.Колонки.Добавить - можно и в цикле

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

    // Удаление - если таблица существует
    ЭлементТаблица = Элементы.Найти("ТаблицаСотрудников");
    Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);
    Иначе
        ИзменитьРеквизиты(МассивРеквизитовФормы);
    КонецЕсли;

    // Добавление ТаблицыЗначений на форму
    ТаблицаПолейВыбора = Элементы.Добавить("ТЗСотр", Тип("ТаблицаФормы"));
    ТаблицаПолейВыбора.ПутьКДанным = "ТаблицаСотрудников";
    ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;
    ТаблицаПолейВыбора.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; // Отключение командной панели

    Для Каждого Колонка Из ТЗ.Колонки Цикл

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

    КонецЦикла;

    // Заполнение ТаблицыЗначений
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Сотрудники.Код КАК Код,
        |   Сотрудники.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
        |   Сотрудники.Ссылка КАК Ссылка,
        |   Сотрудники.Наименование КАК Наименование
        |ИЗ
        |   Справочник.Сотрудники КАК Сотрудники
        |
        |УПОРЯДОЧИТЬ ПО
        |   Наименование";

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Строка = ТЗ.Добавить();
        Строка.Код = ВыборкаДетальныеЗаписи.Код;
        Строка.Сотрудник = ВыборкаДетальныеЗаписи.Ссылка;
    КонецЦикла;

    // Передача ТаблицыЗначений в реквизит формы
    ЗначениеВРеквизитФормы(ТЗ, "ТаблицаСотрудников");

КонецПроцедуры
3 RizONE
 
02.01.21
23:23
(2)
Поле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), "тпПроцедуры", Истина, ЭлементыФормы.ПанельСправочники);
Поле.ТолькоПросмотр = ЛОЖЬ;
Поле.ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений");
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан