ЭлементОтбораКомпоновкиДанных.ИдентификаторПользовательскойНастройки

Свойства · UserSettingID

Тип: Строка. Предназначен для идентификации пользовательской настройки. Если идентификатор не пустой, объект включается в состав пользовательских настроек.

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

ЭлементОтбораКомпоновкиДанных.ИдентификаторПользовательскойНастройки (DataCompositionFilterItem.UserSettingID)

ЭлементОтбораКомпоновкиДанных (DataCompositionFilterItem)

ИдентификаторПользовательскойНастройки (UserSettingID)

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

Использование:
Чтение и запись.
Описание:
Тип: Строка.
Предназначен для идентификации пользовательской настройки.
Если идентификатор не пустой, объект включается в состав пользовательских настроек.
Доступность:

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

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

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

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

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

Найти основной отбор по пользовательскому идентификатору

В основных настройках Количество > 1 разрешаем пользователю менять порог. После загрузки в редактор ищем пользовательскую копию и читаем поле из связанных основных объектов.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.

  2. Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.

  3. Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.

  4. Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.

Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
|    ""Книга"" КАК Наименование,
|    3 КАК Количество,
|    250 КАК Цена,
|    750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
    Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
    Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Условие = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
Условие.ПравоеЗначение = 1;
Условие.Использование = Истина;
Условие.ИдентификаторПользовательскойНастройки = "УчебныйПорог";
Условие.ПредставлениеПользовательскойНастройки = "Минимальное количество";
Доступные = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Доступные);
Редактор.ЗагрузитьНастройки(Настройки);
Пользовательские = Редактор.ПользовательскиеНастройки;
КопияПорога = Пользовательские.Элементы.Найти("УчебныйПорог");
Если КопияПорога = Неопределено Тогда
    ВызватьИсключение "В пользовательских настройках нет учебного порога";
КонецЕсли;
Сообщить(КопияПорога.ПравоеЗначение = 1);
Основные = Пользовательские.ПолучитьОсновныеНастройкиПоИдентификаторуПользовательскойНастройки("УчебныйПорог");
Если Основные.Количество() = 0 Тогда
    ВызватьИсключение "Не получена связь с основным отбором";
КонецЕсли;
Для Каждого Основной Из Основные Цикл
    Сообщить(Основной.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество"));
КонецЦикла;
Сообщить(Пользовательские.ПолучитьОсновныеНастройкиПоИдентификаторуПользовательскойНастройки("НетТакойНастройки").Количество() = 0);

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

  1. Сначала в основной схеме создаём полноценный отбор с левым полем, сравнением > и числом 1.

  2. Строковая метка и подпись назначаются до ЗагрузитьНастройки: загрузка заново формирует пользовательские настройки.

  3. Пользовательская копия даёт ПравоеЗначение. ЛевоеЗначение читаем у связанных основных объектов, не у пользовательского объекта, где оно недоступно.

  4. Метод возвращает массив, поэтому обходим все найденные объекты и отдельно проверяем отсутствие чужой метки.

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

  1. Порог пользовательской копии равен 1, связанные основные объекты указывают Количество, чужой идентификатор возвращает пустой массив.

  2. Не меняйте рабочий типовой вариант отчёта: весь редактор и схема создаются этим кодом.

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

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

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

  1. Метод может вернуть несколько основных объектов; нельзя без проверки всегда брать индекс 0.

  2. Имена/поля с таким идентификатором в произвольном типовом отчёте не обязаны совпадать с учебными.

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

Отличить число пользовательских настроек от числа включённых

Собственный контейнер содержит два порога. Настройки здесь не привязаны к основной схеме и не фильтруют запрос; это упражнение по хранению пользовательских значений.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.

  2. Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.

  3. Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.

  4. Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.

Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
|    ""Книга"" КАК Наименование,
|    3 КАК Количество,
|    250 КАК Цена,
|    750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
    Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
    Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Пользовательские = Новый ПользовательскиеНастройкиКомпоновкиДанных;
Первый = Пользовательские.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Первый.ИдентификаторПользовательскойНастройки = "УчебныйПорог";
Первый.Использование = Истина;
Первый.ПравоеЗначение = 1;
Второй = Пользовательские.Элементы.Вставить(0, Тип("ЭлементОтбораКомпоновкиДанных"));
Второй.ИдентификаторПользовательскойНастройки = "УчебныйВторойПорог";
Второй.Использование = Ложь;
Второй.ПравоеЗначение = 2;
Пользовательские.ДополнительныеСвойства.Вставить("УчебнаяЗадача", "Пороги количества");
Сообщить(Пользовательские.Элементы.Количество() = 2);
Сообщить(Пользовательские.ПолучитьКоличествоИспользуемых() = 1);
Сообщить(Пользовательские.Элементы.Найти("УчебныйПорог") = Первый);
Сообщить(Пользовательские.Элементы.Найти("НетТакойНастройки") = Неопределено);
Сообщить(Пользовательские.Элементы.Получить(0) = Второй);
Сообщить(Пользовательские.Элементы.Индекс(Первый) = 1);
Сообщить(Пользовательские.ДополнительныеСвойства.УчебнаяЗадача = "Пороги количества");
Дополнительные = Пользовательские.ДополнительныеНастройки;
Если Дополнительные <> Неопределено Тогда
    Сообщить("Дополнительных настроек: " + Строка(Дополнительные.Элементы.Количество()));
КонецЕсли;

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

  1. Добавить/Вставить создают пользовательские элементы отбора. ЛевоеЗначение здесь не задаётся: оно недоступно для редактирования пользовательской копии и должно приходить из основных настроек.

  2. Первый порог включён, второй отключён. Оба остаются в коллекции.

  3. Найти использует строковый пользовательский идентификатор; отсутствие возвращает Неопределено.

  4. ДополнительныеСвойства содержит свою служебную метку. ДополнительныеНастройки читаем с проверкой отсутствия и не приписываем ему фиксированное количество.

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

  1. Семь сравнений Истина. Всего элементов 2, включённых 1; возможный дополнительный счётчик диагностический.

  2. Измените только Второй.Использование на Истина: включённых станет 2, общая численность останется 2.

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

Показаны пользовательские значения и раздельные показатели общего/активного состава.

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

  1. Метод ПолучитьКоличествоИспользуемых добавлен в 8.5.1; здесь целевая платформа именно этой версии.

  2. Без основных настроек и их связи эти пороги не образуют законченный отбор отчёта.

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

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

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

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

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