Тип: НастройкиКомпоновкиДанных. Содержит настройки, которые дополнительно применяются к основным настройкам, при использовании метода ПолучитьНастройки.
Полное описание, параметры и ограничения
КомпоновщикНастроекКомпоновкиДанных.ФиксированныеНастройки (DataCompositionSettingsComposer.FixedSettings)
КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
ФиксированныеНастройки (FixedSettings)
Доступен, начиная с версии 8.2.
Использование:
Только чтение.
Описание:
Тип: НастройкиКомпоновкиДанных.
Содержит настройки, которые дополнительно применяются к основным настройкам, при использовании метода ПолучитьНастройки.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Различить настройки списка и их автоматическое сохранение
Показываем три слоя настроек и не трактуем ключ хранилища как текущую строку товара. Для независимых упражнений автосохранение остаётся выключенным.
Где и как запускать
Модуль собственной управляемой формы внешней обработки. Вставляйте готовые процедуры с директивами на уровне модуля; каждый урок — в отдельной копии формы.
Подготовка
В учебной базе 8.5.1.1343 создайте новую внешнюю обработку УчебныйСписок85, пустую управляемую основную форму. Режим совместимости — 8.3.19 или выше. Не переделывайте список рабочей конфигурации.
В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().
В событиях формы назначьте ПриСозданииНаСервере одноимённой процедуре из примера. Не используйте одновременно другой обработчик заполнения этого списка.
При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.
Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.ПроизвольныйЗапрос = Истина;
Список.ОсновнаяТаблица = "";
Список.ДинамическоеСчитываниеДанных = Ложь;
Список.АвтоЗаполнениеДоступныхПолей = Истина;
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
КлючевыеПоля = Новый Массив;
КлючевыеПоля.Добавить("УчебныйНомер");
Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
Список.ТекстЗапроса = "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
Редактор = Список.КомпоновщикНастроек;
Базовые = Редактор.Настройки;
Пользовательские = Редактор.ПользовательскиеНастройки;
Фиксированные = Редактор.ФиксированныеНастройки;
ТекущийКлючНастроек = Список.КлючТекущихПользовательскихНастроек;
Сообщить(ТипЗнч(Базовые) = Тип("НастройкиКомпоновкиДанных"));
Сообщить(ТипЗнч(Фиксированные) = Тип("НастройкиКомпоновкиДанных"));
Сообщить(ТипЗнч(Пользовательские) = Тип("ПользовательскиеНастройкиКомпоновкиДанных"));
Сообщить(Не Список.АвтоматическоеСохранениеПользовательскихНастроек);
Сообщить("Ключ настроек сейчас имеет тип: " + Строка(ТипЗнч(ТекущийКлючНастроек)));
Для Каждого ИмяПоля Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяПоля, Тип("ПолеФормы"), Элементы.ТаблицаТоваров);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Список." + ИмяПоля;
Колонка.Заголовок = ИмяПоля;
КонецЦикла;
КонецПроцедуры
Разбор по шагам
КомпоновщикНастроек — редактор настроек, не результат запроса и не массив товаров.
Настройки, ПользовательскиеНастройки и ФиксированныеНастройки — разные слои. Читаем их типы, не переписываем всё дерево.
КлючТекущихПользовательскихНастроек только читается и зависит от состояния настройки; нет универсального значения, равного номеру выбранного товара.
При выключенном автосохранении урок не демонстрирует сохранение в хранилище. Начальный набор каждый раз задаётся обработчиком формы.
Как проверить результат
Четыре проверки дают Истина; последнее сообщение показывает фактический тип ключа, значение которого заранее не утверждаем.
Закройте форму после изменения сортировки и откройте снова: сравните настройки с новым экземпляром из обработчика. Отдельное сохранение пользовательского варианта не выполняйте.
Ожидаемый результат
Чтение слоёв настройки с честной границей между редактированием и сохранением.
На что обратить внимание
Отключённое автосохранение не запрещает прикладному коду явно сохранять настройки: в собственной форме такого кода нет.
Ключ может отсутствовать или меняться; нельзя без проверки обращаться к нему как к ссылке справочника.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Применить фиксированный отбор к копии настроек
Фиксированный отбор Количество > 1 добавляется при получении рабочих настроек. Пустой пользовательский слой не отменяет его.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.
Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.
Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.
Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 250 КАК Цена,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Доступные = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Доступные);
Редактор.ЗагрузитьНастройки(Настройки);
Фиксированные = Новый НастройкиКомпоновкиДанных;
Условие = Фиксированные.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
Условие.ПравоеЗначение = 1;
Условие.Использование = Истина;
Редактор.ЗагрузитьФиксированныеНастройки(Фиксированные);
Редактор.ЗагрузитьПользовательскиеНастройки(Новый ПользовательскиеНастройкиКомпоновкиДанных);
Сообщить(Редактор.ФиксированныеНастройки.Отбор.ПолучитьКоличествоИспользуемых() = 1);
Сообщить(ТипЗнч(Редактор.ПользовательскиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных"));
РабочиеНастройки = Редактор.ПолучитьНастройки();
Сообщить(Редактор.Настройки.Отбор.ПолучитьКоличествоИспользуемых() = 0);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Приемник = Новый ТаблицаЗначений;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьОбъект(Приемник);
Результат = Вывод.Вывести(Процессор, Ложь);
Сообщить(Результат.Количество() = 1);
Книга = Результат.Найти("Книга", "Наименование");
Сообщить(Книга <> Неопределено);
Сообщить(Результат.Итог("Сумма") = 750);Разбор по шагам
Фиксированный слой создаём отдельно от основных настроек. В него добавляем одно собственное условие Количество > 1.
Пользовательский слой загружен пустым. ПолучитьНастройки возвращает рабочую копию с применением слоёв; оригинальный отбор основных настроек остаётся пустым.
Для вывода в коллекцию выбираем специальный генератор макета пятым аргументом Выполнить.
Вывод направляем в собственную ТаблицаЗначений. Книга с количеством 3 проходит, Ручка с количеством 1 не проходит.
Как проверить результат
Шесть проверок дают Истина.
В Результат одна строка Книга, количество 3, цена 250, сумма 750. Приемник — собственная таблица в памяти.
Ожидаемый результат
Фиксированный фильтр применён к реальному выводу собственного отчёта.
На что обратить внимание
Фиксированный отбор редактора СКД не заменяет RLS и права доступа.
Пересечение полей отбора или параметров фиксированных и основных настроек может вызвать исключение; не устанавливайте одинаковое поле в двух слоях без понимания контракта.
Генератор для коллекции и генератор табличного документа — не взаимозаменяемые типы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.