Тип: ОтображениеТаблицы. Вариант отображения данных в таблице формы клиентского приложения. Используется для иерархических списков.
Полное описание, параметры и ограничения
НастройкиТаблицыДинамическогоСписка.ОтображениеТаблицы (DynamicListTableSettings.TableRepresentation)
НастройкиТаблицыДинамическогоСписка (DynamicListTableSettings)
ОтображениеТаблицы (TableRepresentation)
Доступен, начиная с версии 8.3.19.
Использование:
Чтение и запись.
Описание:
Тип: ОтображениеТаблицы.
Вариант отображения данных в таблице формы клиентского приложения. Используется для иерархических списков.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.19.
Методическая информация
Практические примеры
Подготовить снимок состояния списка и ссылку на свой пустой справочник
Создаём конкретный пакет НастройкиТаблицыДинамическогоСписка, явно задаём все четыре свойства и сохраняем собственный XML-снимок. Меняем исходный пакет, проверяем сохранность восстановленной версии и используем её в серверном варианте получения навигационной ссылки.
Где и как запускать
Полный серверный общий модуль УчебнаяНавигация своего стенда УчебнаяСсылкаСписка85 и отдельный полный модуль формы. Ссылку не открывает; возможное сохранение её параметров только в собственной будущей учебной базе.
Подготовка
НОВАЯ отдельная учебная база точно 8.5.1.1343, конфигурация УчебнаяСсылкаСписка85, совместимость Не использовать. Единственный справочник УчебныеТовары: неиерархический, без владельцев, собственных реквизитов и табличных частей, Код строка9, Наименование строка50. Записей нет. Других бизнес-объектов, расширений, подписок и фоновых заданий нет.
Создайте управляемую форму списка справочника и назначьте её основной формой списка. Стандартная таблица формы связана с динамическим списком справочника. У этого пустого списка нет текущей записи: код не выдумывает ключ2, UUID или чужую ссылку.
Общий модуль УчебнаяНавигация: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет; вставьте полный основной модуль. Своя внешняя обработка УчебнаяСсылкаСписка85 → управляемая форма → команда/кнопка Выполнить с действием Выполнить. Полный отдельный модуль формы приведён ниже.
Будущая ручная подготовка: сохранить конфигурацию, Конфигурация → Обновить конфигурацию базы данных (F7), открыть новый свой сеанс и свою обработку. Здесь форма, конфигурация, код, XML и навигация не запускались.
ВАЖНО: получение ссылки с настройками не является гарантированно чистой операцией памяти. Платформа использует хранилище внешних данных навигационных ссылок для параметров. Будущий вызов разрешён только в этой собственной учебной базе; не запускайте в 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 → управляемая Форма → Модуль
Полный отдельный модуль своей формы; не выполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
Ссылка = ПодготовитьНаСервере();
Сообщить(Ссылка);
Сообщить("Ссылка не открывалась; состояние списка и снимок проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПодготовитьНаСервере()
Возврат УчебнаяНавигация.ВыполнитьПример();
КонецФункцииРазбор по шагам
Конструктор создаёт объект параметров, не сам динамический список и не форму. Все четыре значения заданы явно: Список, Неопределено для текущей строки, новая пустая пользовательская настройка и новая пустая фиксированная настройка.
ОтображениеТаблицы — enum, не строка. Пустые пользовательские элементы означают отсутствие заданных пользовательских условий; пустой фиксированный отбор не является разрешением доступа и не отключает RLS.
Перед записью проверяем конкретные типы, отсутствие текущего ключа и пустые коллекции. Сериализатору передаём только этот собственный пакет, не объект метаданных справочника: сериализация метаданных могла бы выгрузить доступные записи.
ЗаписатьXML использует Явное назначение типа; ПрочитатьXML получает точный тип НастройкиТаблицыДинамическогоСписка. Читатель и писатель работают только со строками памяти и закрываются при ошибке и нормальном завершении.
Исходным ФиксированныеНастройки задаём Неопределено, но восстановленный пакет должен сохранить настоящий объект НастройкиКомпоновкиДанных с пустым отбором. Это различие состояния, а не сравнение случайного порядка или префиксов XML.
На сервере ПолучитьНавигационнуюСсылку принимает метаданные собственного справочника, конкретный восстановленный пакет и представление ссылки. Внешние бизнес-данные не передаются. Переход по ссылке и открытие формы в этом коде не выполняются.
Возвращаем непустую строку в отдельный модуль своей формы. Не требуем заранее угаданного текста URL: параметры могут быть связаны со служебным хранилищем и конкретной базой. Получение строки не доказывает успешного открытия интерфейса.
Как проверить результат
Будущий результат: исходный пакет имеет ФиксированныеНастройки=Неопределено; копия после XML по-прежнему содержит НастройкиКомпоновкиДанных, пустой фиксированный отбор, пустые пользовательские элементы, Список и Неопределено для строки.
Будущий отрицательный контроль: после Копия = ПрочитатьСвойСнимокСписка(Снимок) вставьте Копия.ТекущаяСтрока = "2";. Не меняйте проверки и подготовку пустого списка. Проверка копии должна отклонить выдуманный строковый ключ ДО получения ссылки. После опыта восстановите весь модуль.
Полученная строка — только ожидаемый будущий результат серверного API. Открытие ссылки, восстановление интерфейса, содержимое служебного хранилища и работа прав доступа здесь не проверялись.
runtimeVerifiedScenarios=0. Сверены сигнатуры, типы, доступность, readonly и структура кода; фактические XML-снимок, независимость версии и навигационная ссылка в1С не получены.
Ожидаемый результат
Конкретный пакет параметров решает задачу снимка и подготовки перехода к своему списку; конструктор и все четыре свойства используются в полном проверяемом сценарии.
На что обратить внимание
НастройкиТаблицыДинамическогоСписка не равен НастройкиОтображенияДинамическогоСписка: второй тип имеет другой контракт и не подставляется в этот конструктор или параметр навигации.
Тип текущего ключа определяется реальным источником таблицы. У пустого собственного справочника нет выбранной строки; нельзя произвольно использовать число или строку2 для ссылочного источника.
Пустой объект фиксированных настроек и Неопределено — разные состояния. Не удаляйте это различие при проверке снимка. Пользовательские и фиксированные параметры не являются способом обхода доступа к данным.
XML-снимок относится к собственным известным типам в этой версии платформы, не к универсальному клонированию любого графа. Не принимайте чужой XML и не обещайте переносимость ссылок между базами.
Получение ссылки с настройками может сохранять служебные параметры; ссылка не обязательно автономна и не обязана жить вечно. Этот урок не удаляет служебные записи и не измеряет срок их хранения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.