Тип: Строка. Используется для отображения объекта в пользовательских настройках. Данное свойство недоступно у объектов, содержащихся в коллекции пользовательских настроек компоновки данных.
Полное описание, параметры и ограничения
ГруппаЭлементовОтбораКомпоновкиДанных.ПредставлениеПользовательскойНастройки (DataCompositionFilterItemGroup.UserSettingPresentation)
ГруппаЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemGroup)
ПредставлениеПользовательскойНастройки (UserSettingPresentation)
Доступен, начиная с версии 8.2.
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Используется для отображения объекта в пользовательских настройках.
Данное свойство недоступно у объектов, содержащихся в коллекции пользовательских настроек компоновки данных.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Вложенная группа отбора: родитель, пользовательский флаг и реальные строки
Создаем свой отбор (Сумма>0) И (Сумма>100 ИЛИ Количество>2). Проверяем настоящих родителей основных групп, отдельно выносим вложенную группу в пользовательский состав и выключаем/включаем ее без чтения недоступных вложенных свойств.
Где и как запускать
Полный серверный общий модуль собственного нового стенда УчебныеГруппыНастроек85; каждый урок запускается отдельно.
Подготовка
Создать НОВУЮ отдельную пустую учебную базу, не рабочую и не ее копию: точно8.5.1.1343; конфигурация УчебныеГруппыНастроек85, совместимость Не использовать. Без бизнес-объектов, регистров, подписок, заданий и расширений.
Конфигуратор → Общие → Общие модули → УчебныеГруппыНастроек85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ код одного выбранного урока. Одноименные ВыполнитьПример разных уроков не смешивать.
Конфигуратор → Обработки → УчебныеГруппыНастроек85 → Формы → Пульт: управляемая форма, команда Выполнить и кнопка с этой командой; действие команды Выполнить. Полный модуль формы дан отдельно ниже; реквизиты не нужны.
Сохранить и обновить собственную конфигурацию базы данных (F7). Запустить свежий свой клиент и открыть учебную обработку. Это будущие ручные шаги: здесь F7 и1С не запускались.
Схема полностью создается в памяти: Local-запрос Книга3×250=750 / Ручка1×50=50. Никаких записей справочников, документов или регистров не нужно.
Редактор обязательно связывается с настоящим источником доступных настроек. Пользовательский объект ищется в его реальной коллекции по своему ID и проверяется по точному типу.
В опыте выбранных полей используется стандартный генератор табличного документа. Проверка координат рассчитана только на эту собственную маленькую таблицу без ресурсов, итоговых строк, других групп и макетов оформления.
runtimeVerifiedScenarios=0. Выполнены только статические проверки установленной справки и HTML. XML хранится строками памяти: файлов, архивов, резервных копий, сети, печати и production здесь нет.
Функция ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
Схема = Новый СхемаКомпоновкиДанных;
ЗаполнитьСвоиДанные(Схема);
ЗаполнитьСвоиНачальныеНастройки(Схема.НастройкиПоУмолчанию);
КорневаяГруппа = Схема.НастройкиПоУмолчанию.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
КорневаяГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
КорневаяГруппа.Использование = Истина;
Если КорневаяГруппа.Родитель <> Неопределено Тогда
ВызватьИсключение "Основная верхнеуровневая группа не должна иметь родительскую группу";
КонецЕсли;
ФиксированноеУсловие = КорневаяГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ФиксированноеУсловие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сумма");
ФиксированноеУсловие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ФиксированноеУсловие.ПравоеЗначение = 0;
ФиксированноеУсловие.Использование = Истина;
ВложеннаяГруппа = КорневаяГруппа.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ВложеннаяГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ВложеннаяГруппа.Использование = Истина;
ВложеннаяГруппа.ИдентификаторПользовательскойНастройки = "КрупныеТовары85";
ВложеннаяГруппа.ПредставлениеПользовательскойНастройки = "Сумма больше100 или количество больше2";
ВложеннаяГруппа.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
Если ВложеннаяГруппа.Родитель <> КорневаяГруппа Тогда
ВызватьИсключение "Вложенная основная группа должна принадлежать настоящему своему родителю";
КонецЕсли;
УсловиеСуммы = ВложеннаяГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УсловиеСуммы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сумма");
УсловиеСуммы.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
УсловиеСуммы.ПравоеЗначение = 100;
УсловиеСуммы.Использование = Истина;
УсловиеКоличества = ВложеннаяГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УсловиеКоличества.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
УсловиеКоличества.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
УсловиеКоличества.ПравоеЗначение = 2;
УсловиеКоличества.Использование = Истина;
ТекстСхемы = СвойОбъектРасшифровкиВСтроку(Схема);
Редактор = СоздатьСвойРедактор(Схема);
ТекущийКорень = Редактор.Настройки.Отбор.Элементы.Получить(0);
ТекущееВложение = ТекущийКорень.Элементы.Получить(1);
Если ТипЗнч(ТекущийКорень) <> Тип("ГруппаЭлементовОтбораКомпоновкиДанных")
Или ТипЗнч(ТекущееВложение) <> Тип("ГруппаЭлементовОтбораКомпоновкиДанных")
Или ТекущийКорень.Родитель <> Неопределено Или ТекущееВложение.Родитель <> ТекущийКорень
Или ТекущееВложение.ИдентификаторПользовательскойНастройки <> "КрупныеТовары85"
Или ТекущееВложение.ПредставлениеПользовательскойНастройки <> "Сумма больше100 или количество больше2"
Или ТекущееВложение.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда
ВызватьИсключение "Свое основное дерево и параметры отдельной пользовательской группы должны сохраниться";
КонецЕсли;
ПользовательскаяГруппа = ПолучитьСвойПользовательскийРаздел(Редактор, "КрупныеТовары85", Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ПользовательскаяГруппа.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
Если Не ПользовательскаяГруппа.Использование
Или ПользовательскаяГруппа.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда
ВызватьИсключение "В user-группе доступны собственные флаг и режим; начальный флаг должен быть включен";
КонецЕсли;
ТекстОсновных = СвойОбъектРасшифровкиВСтроку(Редактор.Настройки);
ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Истина, Ложь, "");
ПользовательскаяГруппа.Использование = Ложь;
ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Ложь, Ложь, "");
ПользовательскаяГруппа.Использование = Истина;
ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Истина, Ложь, "");
Если СвойОбъектРасшифровкиВСтроку(Редактор.Настройки) <> ТекстОсновных
Или СвойОбъектРасшифровкиВСтроку(Схема) <> ТекстСхемы Тогда
ВызватьИсключение "User-флаг группы не должен изменять все исходные условия и связи родителей";
КонецЕсли;
Возврат ТекущееВложение.ПредставлениеПользовательскойНастройки + ": включена750; выключена800; восстановлена750; основное дерево сохранено";
КонецФункции
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСвоиДанные(Схема)
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 250 КАК Цена,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
КонецПроцедуры
Процедура ЗаполнитьСвоиНачальныеНастройки(Настройки)
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
КонецПроцедуры
Функция СоздатьСвойРедактор(Схема)
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
Редактор.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
Возврат Редактор;
КонецФункции
Функция ПолучитьСвойПользовательскийРаздел(Редактор, Идентификатор, ТребуемыйТип)
Раздел = Редактор.ПользовательскиеНастройки.Элементы.Найти(Идентификатор);
Если Раздел = Неопределено Тогда
ВызватьИсключение "Собственный раздел должен реально появиться в пользовательских настройках";
КонецЕсли;
Если ТипЗнч(Раздел) <> ТребуемыйТип Или Раздел.ИдентификаторПользовательскойНастройки <> Идентификатор Тогда
ВызватьИсключение "Найден не тот тип или ID собственного пользовательского раздела";
КонецЕсли;
Возврат Раздел;
КонецФункции
Функция СвойОбъектРасшифровкиВСтроку(Объект)
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(Запись, Объект);
Возврат Запись.Закрыть();
КонецФункции
Процедура ПроверитьСвоиСтроки(Схема, Настройки, ТолькоКнига, БезЦены, ПервыйТовар)
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = Компоновщик.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Приемник = Новый ТаблицаЗначений;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьОбъект(Приемник);
Результат = Вывод.Вывести(Процессор, Ложь);
Если ТипЗнч(Результат) <> Тип("ТаблицаЗначений") Тогда
ВызватьИсключение "Нужны настоящие строки собственного вывода, не заранее заполненный приемник";
КонецЕсли;
Если Результат.Количество() <> ?(ТолькоКнига, 1, 2) Или Результат.Колонки.Количество() <> ?(БезЦены, 3, 4) Тогда
ВызватьИсключение "Не совпали фактические строки или пользовательский состав колонок";
КонецЕсли;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Сумма", ",") Цикл
Если Результат.Колонки.Найти(ИмяПоля) = Неопределено Тогда
ВызватьИсключение "Не найдена реальная колонка " + ИмяПоля;
КонецЕсли;
КонецЦикла;
Если БезЦены Тогда
Если Результат.Колонки.Найти("Цена") <> Неопределено Тогда
ВызватьИсключение "Пользователь выключил Цена: эта колонка не должна выводиться";
КонецЕсли;
ИначеЕсли Результат.Колонки.Найти("Цена") = Неопределено Тогда
ВызватьИсключение "В первоначальном отчете нужна настоящая колонка Цена";
КонецЕсли;
Книга = Результат.Найти("Книга", "Наименование");
Ручка = Результат.Найти("Ручка", "Наименование");
Если Книга = Неопределено Тогда
ВызватьИсключение "В собственном результате должна сохраниться Книга";
КонецЕсли;
Если Книга.Количество <> 3 Или Книга.Сумма <> 750 Тогда
ВызватьИсключение "Неверные настоящие числа Книги";
КонецЕсли;
Если ТолькоКнига Тогда
Если Ручка <> Неопределено Тогда
ВызватьИсключение "Ручка не должна пройти отбор Сумма больше100";
КонецЕсли;
Иначе
Если Ручка = Неопределено Тогда
ВызватьИсключение "Пользовательские настройки должны сохранить Ручку";
КонецЕсли;
Если Ручка.Количество <> 1 Или Ручка.Сумма <> 50 Тогда
ВызватьИсключение "Неверные настоящие числа Ручки";
КонецЕсли;
КонецЕсли;
Если Не БезЦены Тогда
Если Книга.Цена <> 250 Тогда
ВызватьИсключение "Неверная настоящая цена Книги";
КонецЕсли;
Если Не ТолькоКнига И Ручка.Цена <> 50 Тогда
ВызватьИсключение "Неверная настоящая цена Ручки";
КонецЕсли;
КонецЕсли;
Если Результат.Итог("Количество") <> ?(ТолькоКнига, 3, 4) Или Результат.Итог("Сумма") <> ?(ТолькоКнига, 750, 800) Тогда
ВызватьИсключение "Итоги должны рассчитываться из фактических отфильтрованных строк";
КонецЕсли;
Если ПервыйТовар <> "" И Результат[0].Наименование <> ПервыйТовар Тогда
ВызватьИсключение "Пользовательская сортировка должна изменить фактическую первую строку";
КонецЕсли;
КонецПроцедурыУчебныеГруппыНастроек85.Пульт
УчебныеГруппыНастроек85 → Обработки → УчебныеГруппыНастроек85 → Формы → Пульт → Модуль
Полный модуль собственной управляемой формы; здесь не выполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
Сообщить(ВыполнитьНаСервере());
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
Возврат УчебныеГруппыНастроек85.ВыполнитьПример();
КонецФункцииРазбор по шагам
Создать настоящую корневую ГруппаИ и фиксированное условие Сумма>0. Родитель корневой группы должен быть Неопределено.
Внутри добавить реальную ГруппаИли с условиями Сумма>100 и Количество>2. Вложенная основная группа должна иметь Родитель=КорневаяГруппа, а не Отбор или весь корень настроек.
Непустой пользовательский ID назначить самой вложенной группе, не всему Отбор. Представление и Обычный режим задать основной группе; пользовательский объект реально найти по этому ID и точному типу.
У пользовательской группы недоступны Родитель, ТипГруппы, Элементы, Представление и Применение. Не копировать к ней обращения к основному дереву. В этом опыте изменяется только доступный флаг Использование; доступный режим устанавливается/читается отдельно.
При включенной вложенной группе результат содержит Книгу3/250/750. Выключить: остается собственное независимое условие Сумма>0, поэтому проходят Книга и Ручка с итогом4/800.
Вернуть Истина и заново сформировать Книгу750. Все три результата получены собственным процессором компоновки, а не внесены заранее в ожидаемый приемник.
Сравнить весь XML основных настроек и всей схемы. Представление читать у основной вложенной группы и вернуть в результат формы; дерево основных родителей/условий не должно быть переписано пользовательским флагом.
Как проверить результат
Будущий запуск должен пройти три реальные компоновки и все проверки числовых данных. Флаг группы или enum расположения сам по себе не заменяет проверку результата.
У отфильтрованной Книги проверяются3/250/750; при выключении user-группы обе строки3/250/750 и1/50/50, количество4 и сумма800. Основное дерево группыИ/группыИли и его реальные родители сохраняются.
Отрицательный контроль будущего отдельного опыта: изменить только число3 на30 в собственном буквальном запросе при прежней сумме750. Числовая проверка должна отказать; наличие заголовка или нужного количества полей недостаточно.
Полный XML собственных основных настроек и всей схемы сохраняется. Пользовательский слой влияет на эффективную копию, а не переписывает исходную схему.
runtimeVerifiedScenarios=0. Числовые и координатные проверки — будущие BSL-условия приемки, а не полученные здесь результаты выполнения1С.
Ожидаемый результат
Полный код проверяет три состояния реального результата и сохранность своего исходного дерева/папки. Здесь в1С не запускался.
На что обратить внимание
Группа отбора и группа выбранных полей — разные типы с разными свойствами. У user-группы отбора недоступны Родитель, Элементы, ТипГруппы и Представление: не обращаться к ним по аналогии с основным деревом.
Поле папки выбранных полей серверное и используется для получения заголовка по умолчанию. Интерактивное изменение заголовка по native-контракту очищает Поле, но этот UI-процесс здесь не запускался.
РежимОтображения подготовлен и проверен как значение модели; внешний вид настоящего редактора не подтвержден. Пользовательский ID задается конкретному основному объекту и ищется в соответствующем редакторе.
Проверка выбранной папки ограничена двумя собственными константными записями. Если применить чужой стиль, объединенные числовые ячейки, итоговые строки или другое размещение записей, требуется отдельный контроль, а не отключение диагностик.
После новой ЗагрузитьНастройки пользовательские объекты следует искать заново. В этих опытах пользовательский состав создается один раз; старые ссылки через перезагрузку не удерживаются.
Выключение своей вложенной группы не означает универсальный сброс всего отбора: независимое условие Сумма>0 продолжает действовать. В опыте нет записи пользовательских настроек между сеансами или изменения рабочих конфигураций.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.