КомпоновщикНастроекКомпоновкиДанных.ФиксированныеНастройки

Свойства · FixedSettings

Тип: НастройкиКомпоновкиДанных. Содержит настройки, которые дополнительно применяются к основным настройкам, при использовании метода ПолучитьНастройки.

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

КомпоновщикНастроекКомпоновкиДанных.ФиксированныеНастройки (DataCompositionSettingsComposer.FixedSettings)

КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)

ФиксированныеНастройки (FixedSettings)

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

Использование:
Только чтение.
Описание:
Тип: НастройкиКомпоновкиДанных.
Содержит настройки, которые дополнительно применяются к основным настройкам, при использовании метода ПолучитьНастройки.
Доступность:

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

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

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

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

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

Различить настройки списка и их автоматическое сохранение

Показываем три слоя настроек и не трактуем ключ хранилища как текущую строку товара. Для независимых упражнений автосохранение остаётся выключенным.

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

Модуль собственной управляемой формы внешней обработки. Вставляйте готовые процедуры с директивами на уровне модуля; каждый урок — в отдельной копии формы.

Подготовка

  1. В учебной базе 8.5.1.1343 создайте новую внешнюю обработку УчебныйСписок85, пустую управляемую основную форму. Режим совместимости — 8.3.19 или выше. Не переделывайте список рабочей конфигурации.

  2. В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().

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

  4. При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.

  5. Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.ПроизвольныйЗапрос = Истина;
    Список.ОсновнаяТаблица = "";
    Список.ДинамическоеСчитываниеДанных = Ложь;
    Список.АвтоЗаполнениеДоступныхПолей = Истина;
    Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
    Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
    КлючевыеПоля = Новый Массив;
    КлючевыеПоля.Добавить("УчебныйНомер");

    Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
    Список.ТекстЗапроса = "ВЫБРАТЬ
|    1 КАК УчебныйНомер,
|    ""Книга"" КАК Наименование,
|    ""Канцелярия"" КАК Категория,
|    3 КАК Количество,
|    250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Редактор = Список.КомпоновщикНастроек;
    Базовые = Редактор.Настройки;
    Пользовательские = Редактор.ПользовательскиеНастройки;
    Фиксированные = Редактор.ФиксированныеНастройки;
    ТекущийКлючНастроек = Список.КлючТекущихПользовательскихНастроек;
    Сообщить(ТипЗнч(Базовые) = Тип("НастройкиКомпоновкиДанных"));
    Сообщить(ТипЗнч(Фиксированные) = Тип("НастройкиКомпоновкиДанных"));
    Сообщить(ТипЗнч(Пользовательские) = Тип("ПользовательскиеНастройкиКомпоновкиДанных"));
    Сообщить(Не Список.АвтоматическоеСохранениеПользовательскихНастроек);
    Сообщить("Ключ настроек сейчас имеет тип: " + Строка(ТипЗнч(ТекущийКлючНастроек)));

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

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

  1. КомпоновщикНастроек — редактор настроек, не результат запроса и не массив товаров.

  2. Настройки, ПользовательскиеНастройки и ФиксированныеНастройки — разные слои. Читаем их типы, не переписываем всё дерево.

  3. КлючТекущихПользовательскихНастроек только читается и зависит от состояния настройки; нет универсального значения, равного номеру выбранного товара.

  4. При выключенном автосохранении урок не демонстрирует сохранение в хранилище. Начальный набор каждый раз задаётся обработчиком формы.

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

  1. Четыре проверки дают Истина; последнее сообщение показывает фактический тип ключа, значение которого заранее не утверждаем.

  2. Закройте форму после изменения сортировки и откройте снова: сравните настройки с новым экземпляром из обработчика. Отдельное сохранение пользовательского варианта не выполняйте.

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

Чтение слоёв настройки с честной границей между редактированием и сохранением.

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

  1. Отключённое автосохранение не запрещает прикладному коду явно сохранять настройки: в собственной форме такого кода нет.

  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);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Приемник = Новый ТаблицаЗначений;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьОбъект(Приемник);
Результат = Вывод.Вывести(Процессор, Ложь);
Сообщить(Результат.Количество() = 1);
Книга = Результат.Найти("Книга", "Наименование");
Сообщить(Книга <> Неопределено);
Сообщить(Результат.Итог("Сумма") = 750);

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

  1. Фиксированный слой создаём отдельно от основных настроек. В него добавляем одно собственное условие Количество > 1.

  2. Пользовательский слой загружен пустым. ПолучитьНастройки возвращает рабочую копию с применением слоёв; оригинальный отбор основных настроек остаётся пустым.

  3. Для вывода в коллекцию выбираем специальный генератор макета пятым аргументом Выполнить.

  4. Вывод направляем в собственную ТаблицаЗначений. Книга с количеством 3 проходит, Ручка с количеством 1 не проходит.

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

  1. Шесть проверок дают Истина.

  2. В Результат одна строка Книга, количество 3, цена 250, сумма 750. Приемник — собственная таблица в памяти.

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

Фиксированный фильтр применён к реальному выводу собственного отчёта.

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

  1. Фиксированный отбор редактора СКД не заменяет RLS и права доступа.

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

  3. Генератор для коллекции и генератор табличного документа — не взаимозаменяемые типы.

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

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

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

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

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