ПараметрСхемыКомпоновкиДанных.ДоступенСписокЗначений

Свойства · ValueListAllowed

Тип: Булево. Определяет возможность использования в качестве значения параметра списка значений. Истина - разрешено использовать.

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

ПараметрСхемыКомпоновкиДанных.ДоступенСписокЗначений (DataCompositionSchemaParameter.ValueListAllowed)

ПараметрСхемыКомпоновкиДанных (DataCompositionSchemaParameter)

ДоступенСписокЗначений (ValueListAllowed)

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

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Определяет возможность использования в качестве значения параметра списка значений.
Истина - разрешено использовать.
Доступность:

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

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

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

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

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

Найти параметр по строковому имени и безопасно прочитать позицию

НайтиПараметр принимает ПараметрКомпоновкиДанных, а коллекция Элементы.Найти — строку. Сопоставляем два поиска и проверяем границы.

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

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

Подготовка

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

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

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

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

  5. В собственной схеме добавлен числовой параметр МинимальноеКоличество и условие запроса Количество > &МинимальноеКоличество. Значение по умолчанию 1; это не отбор дерева настроек.

  6. Тип порога имеет КвалификаторыЧисла(1, 0, Неотрицательный): целое число 0–9. Собственные значения 0, 1, 2 и 3 сохраняются без округления. Формат ЧДЦ=0 лишь оформляет ввод; допустимые значения задаёт описание типа.

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

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

  1. Коллекция содержит описания параметров, а не их текущие числа.

  2. Поиск по строке проверяем на Неопределено, затем получаем фактический индекс найденного объекта.

  3. Перед Получить проверяем обе границы. Не предполагаем, что наш параметр стоит первым.

  4. ВложенныеПараметры относятся к составным параметрам; вывод количества диагностический.

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

  1. Три сравнения Истина; оба способа находят одно описание порога.

  2. Число вложенных параметров не является числом товаров или строк отчёта.

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

Проверена адресация собственного доступного параметра по имени и индексу.

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

  1. Индекс меняется при изменении состава коллекции; имя и объект параметра не заменяйте постоянным 0.

  2. Оператор Получить не выполняет рекурсивный поиск по ВложенныеПараметры.

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

Передать порог в параметр собственного запроса

Числовой параметр МинимальноеКоличество передаётся в запрос, а не добавляет элемент отбора. Изменяем значение на 2 и получаем Книгу.

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

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

Подготовка

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

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

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

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

  5. В собственной схеме добавлен числовой параметр МинимальноеКоличество и условие запроса Количество > &МинимальноеКоличество. Значение по умолчанию 1; это не отбор дерева настроек.

  6. Тип порога имеет КвалификаторыЧисла(1, 0, Неотрицательный): целое число 0–9. Собственные значения 0, 1, 2 и 3 сохраняются без округления. Формат ЧДЦ=0 лишь оформляет ввод; допустимые значения задаёт описание типа.

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

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

  1. ОписаниеПорога содержит тип, подпись и режим использования, но не заменяет объект значения параметра.

  2. Всегда относится к использованию параметра компоновкой; это не логический флаг Видимость.

  3. Передаём число 2 через УстановитьЗначениеПараметра. Не вставляем пользовательский текст в строку запроса.

  4. Получаем рабочие настройки, строим макет и выводим в собственную таблицу.

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

  1. Восемь сравнений Истина: пять характеристик и три проверки результата.

  2. При пороге 0 будут обе строки с суммой 800; при пороге 3 — ни одной.

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

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

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

  1. ЗапрещатьНезаполненныеЗначения=Ложь допускает числовое значение 0; обязательность — отдельная настройка.

  2. В уроке не используется список значений: скалярный порог должен оставаться числом.

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

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

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

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

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