НастройкиТаблицыДинамическогоСписка.ОтображениеТаблицы

Свойства · TableRepresentation

Тип: ОтображениеТаблицы. Вариант отображения данных в таблице формы клиентского приложения. Используется для иерархических списков.

Полное описание, параметры и ограничения

НастройкиТаблицыДинамическогоСписка.ОтображениеТаблицы (DynamicListTableSettings.TableRepresentation)

НастройкиТаблицыДинамическогоСписка (DynamicListTableSettings)

ОтображениеТаблицы (TableRepresentation)

Доступен, начиная с версии 8.3.19.

Использование:
Чтение и запись.
Описание:
Тип: ОтображениеТаблицы.
Вариант отображения данных в таблице формы клиентского приложения. Используется для иерархических списков.
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.19.

Методическая информация

Практические примеры

Подготовить снимок состояния списка и ссылку на свой пустой справочник

Создаём конкретный пакет НастройкиТаблицыДинамическогоСписка, явно задаём все четыре свойства и сохраняем собственный XML-снимок. Меняем исходный пакет, проверяем сохранность восстановленной версии и используем её в серверном варианте получения навигационной ссылки.

Где и как запускать

Полный серверный общий модуль УчебнаяНавигация своего стенда УчебнаяСсылкаСписка85 и отдельный полный модуль формы. Ссылку не открывает; возможное сохранение её параметров только в собственной будущей учебной базе.

Подготовка

  1. НОВАЯ отдельная учебная база точно 8.5.1.1343, конфигурация УчебнаяСсылкаСписка85, совместимость Не использовать. Единственный справочник УчебныеТовары: неиерархический, без владельцев, собственных реквизитов и табличных частей, Код строка9, Наименование строка50. Записей нет. Других бизнес-объектов, расширений, подписок и фоновых заданий нет.

  2. Создайте управляемую форму списка справочника и назначьте её основной формой списка. Стандартная таблица формы связана с динамическим списком справочника. У этого пустого списка нет текущей записи: код не выдумывает ключ2, UUID или чужую ссылку.

  3. Общий модуль УчебнаяНавигация: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет; вставьте полный основной модуль. Своя внешняя обработка УчебнаяСсылкаСписка85 → управляемая форма → команда/кнопка Выполнить с действием Выполнить. Полный отдельный модуль формы приведён ниже.

  4. Будущая ручная подготовка: сохранить конфигурацию, Конфигурация → Обновить конфигурацию базы данных (F7), открыть новый свой сеанс и свою обработку. Здесь форма, конфигурация, код, XML и навигация не запускались.

  5. ВАЖНО: получение ссылки с настройками не является гарантированно чистой операцией памяти. Платформа использует хранилище внешних данных навигационных ссылок для параметров. Будущий вызов разрешён только в этой собственной учебной базе; не запускайте в production и не распространяйте полученную ссылку как публичный адрес.

Функция ВыполнитьПример() Экспорт
    ПроверитьСвойСтендПрофилей();
    Настройки = Новый НастройкиТаблицыДинамическогоСписка;
    Настройки.ОтображениеТаблицы = ОтображениеТаблицы.Список;
    Настройки.ТекущаяСтрока = Неопределено;
    Настройки.ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    Настройки.ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных;
    ПроверитьСвойПакетСписка(Настройки, Истина);
    Снимок = ЗаписатьСвойСнимокСписка(Настройки);
    Копия = ПрочитатьСвойСнимокСписка(Снимок);
    Настройки.ФиксированныеНастройки = Неопределено;
    ПроверитьСвойПакетСписка(Настройки, Ложь);
    ПроверитьСвойПакетСписка(Копия, Истина);
    Если ТипЗнч(Снимок) <> Тип("Строка") Или ПустаяСтрока(Снимок) Тогда
        ВызватьИсключение "Нужен собственный непустой XML-снимок в памяти";
    КонецЕсли;
    Ссылка = ПолучитьНавигационнуюСсылку(Метаданные.Справочники.УчебныеТовары, Копия, "УчебныеТовары: список без выбранной строки и отборов");
    Если ТипЗнч(Ссылка) <> Тип("Строка") Или ПустаяСтрока(Ссылка) Тогда
        ВызватьИсключение "Не получена собственная навигационная ссылка";
    КонецЕсли;
    ПроверитьСвойПакетСписка(Копия, Истина);
    Сообщить("Снимок сохранил явные фиксированные настройки; исходный пакет теперь без них");
    Возврат Ссылка;
КонецФункции

Процедура ПроверитьСвойСтендПрофилей()
    Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен свой новый стенд с единственным учебным справочником";
    КонецЕсли;
    Если Метаданные.Справочники[0].Имя <> "УчебныеТовары" Тогда
        ВызватьИсключение "Разрешён только собственный справочник УчебныеТовары";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьСвойПакетСписка(Настройки, СФиксированными)
    Если ТипЗнч(Настройки) <> Тип("НастройкиТаблицыДинамическогоСписка") Тогда
        ВызватьИсключение "Нужен конкретный собственный пакет состояния списка";
    КонецЕсли;
    Если ТипЗнч(Настройки.ОтображениеТаблицы) <> Тип("ОтображениеТаблицы")
        Или Настройки.ОтображениеТаблицы <> ОтображениеТаблицы.Список Тогда
        ВызватьИсключение "Пустой собственный неиерархический справочник показываем списком";
    КонецЕсли;
    Если Настройки.ТекущаяСтрока <> Неопределено Тогда
        ВызватьИсключение "У пустого собственного справочника нет выбранной строки";
    КонецЕсли;
    Если ТипЗнч(Настройки.ПользовательскиеНастройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
        ВызватьИсключение "Нужны собственные типизированные пользовательские настройки";
    КонецЕсли;
    Если Настройки.ПользовательскиеНастройки.Элементы.Количество() <> 0 Тогда
        ВызватьИсключение "Пользовательские элементы этого собственного пакета должны быть пусты";
    КонецЕсли;
    Если СФиксированными Тогда
        Если ТипЗнч(Настройки.ФиксированныеНастройки) <> Тип("НастройкиКомпоновкиДанных") Тогда
            ВызватьИсключение "Нужны собственные типизированные фиксированные настройки";
        КонецЕсли;
        Если Настройки.ФиксированныеНастройки.Отбор.Элементы.Количество() <> 0 Тогда
            ВызватьИсключение "Явный фиксированный отбор собственного пакета должен быть пуст";
        КонецЕсли;
    ИначеЕсли Настройки.ФиксированныеНастройки <> Неопределено Тогда
        ВызватьИсключение "Во второй версии фиксированные настройки не установлены";
    КонецЕсли;
КонецПроцедуры

Функция ЗаписатьСвойСнимокСписка(Настройки)
    ПроверитьСвойПакетСписка(Настройки, Истина);
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    Попытка
        СериализаторXDTO.ЗаписатьXML(Запись, Настройки, НазначениеТипаXML.Явное);
        Возврат Запись.Закрыть();
    Исключение
        Запись.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
КонецФункции

Функция ПрочитатьСвойСнимокСписка(Текст)
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(Текст);
    Попытка
        Настройки = СериализаторXDTO.ПрочитатьXML(Чтение, Тип("НастройкиТаблицыДинамическогоСписка"));
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение.Закрыть();
    ПроверитьСвойПакетСписка(Настройки, Истина);
    Возврат Настройки;
КонецФункции
УчебнаяСсылкаСписка85.Форма

Своя внешняя обработка УчебнаяСсылкаСписка85 → управляемая Форма → Модуль

Полный отдельный модуль своей формы; не выполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    Ссылка = ПодготовитьНаСервере();
    Сообщить(Ссылка);
    Сообщить("Ссылка не открывалась; состояние списка и снимок проверены");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьНаСервере()
    Возврат УчебнаяНавигация.ВыполнитьПример();
КонецФункции

Разбор по шагам

  1. Конструктор создаёт объект параметров, не сам динамический список и не форму. Все четыре значения заданы явно: Список, Неопределено для текущей строки, новая пустая пользовательская настройка и новая пустая фиксированная настройка.

  2. ОтображениеТаблицы — enum, не строка. Пустые пользовательские элементы означают отсутствие заданных пользовательских условий; пустой фиксированный отбор не является разрешением доступа и не отключает RLS.

  3. Перед записью проверяем конкретные типы, отсутствие текущего ключа и пустые коллекции. Сериализатору передаём только этот собственный пакет, не объект метаданных справочника: сериализация метаданных могла бы выгрузить доступные записи.

  4. ЗаписатьXML использует Явное назначение типа; ПрочитатьXML получает точный тип НастройкиТаблицыДинамическогоСписка. Читатель и писатель работают только со строками памяти и закрываются при ошибке и нормальном завершении.

  5. Исходным ФиксированныеНастройки задаём Неопределено, но восстановленный пакет должен сохранить настоящий объект НастройкиКомпоновкиДанных с пустым отбором. Это различие состояния, а не сравнение случайного порядка или префиксов XML.

  6. На сервере ПолучитьНавигационнуюСсылку принимает метаданные собственного справочника, конкретный восстановленный пакет и представление ссылки. Внешние бизнес-данные не передаются. Переход по ссылке и открытие формы в этом коде не выполняются.

  7. Возвращаем непустую строку в отдельный модуль своей формы. Не требуем заранее угаданного текста URL: параметры могут быть связаны со служебным хранилищем и конкретной базой. Получение строки не доказывает успешного открытия интерфейса.

Как проверить результат

  1. Будущий результат: исходный пакет имеет ФиксированныеНастройки=Неопределено; копия после XML по-прежнему содержит НастройкиКомпоновкиДанных, пустой фиксированный отбор, пустые пользовательские элементы, Список и Неопределено для строки.

  2. Будущий отрицательный контроль: после Копия = ПрочитатьСвойСнимокСписка(Снимок) вставьте Копия.ТекущаяСтрока = "2";. Не меняйте проверки и подготовку пустого списка. Проверка копии должна отклонить выдуманный строковый ключ ДО получения ссылки. После опыта восстановите весь модуль.

  3. Полученная строка — только ожидаемый будущий результат серверного API. Открытие ссылки, восстановление интерфейса, содержимое служебного хранилища и работа прав доступа здесь не проверялись.

  4. runtimeVerifiedScenarios=0. Сверены сигнатуры, типы, доступность, readonly и структура кода; фактические XML-снимок, независимость версии и навигационная ссылка в1С не получены.

Ожидаемый результат

Конкретный пакет параметров решает задачу снимка и подготовки перехода к своему списку; конструктор и все четыре свойства используются в полном проверяемом сценарии.

На что обратить внимание

  1. НастройкиТаблицыДинамическогоСписка не равен НастройкиОтображенияДинамическогоСписка: второй тип имеет другой контракт и не подставляется в этот конструктор или параметр навигации.

  2. Тип текущего ключа определяется реальным источником таблицы. У пустого собственного справочника нет выбранной строки; нельзя произвольно использовать число или строку2 для ссылочного источника.

  3. Пустой объект фиксированных настроек и Неопределено — разные состояния. Не удаляйте это различие при проверке снимка. Пользовательские и фиксированные параметры не являются способом обхода доступа к данным.

  4. XML-снимок относится к собственным известным типам в этой версии платформы, не к универсальному клонированию любого графа. Не принимайте чужой XML и не обещайте переносимость ссылок между базами.

  5. Получение ссылки с настройками может сохранять служебные параметры; ссылка не обязательно автономна и не обязана жить вечно. Этот урок не удаляет служебные записи и не измеряет срок их хранения.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.