НастройкиКомпоновкиДанных.ДоступныеПоляОтбора

Свойства · FilterAvailableFields

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

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

НастройкиКомпоновкиДанных.ДоступныеПоляОтбора (DataCompositionSettings.FilterAvailableFields)

НастройкиКомпоновкиДанных (DataCompositionSettings)

ДоступныеПоляОтбора (FilterAvailableFields)

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

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

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

Доступен, начиная с версии 8.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. Маска и ФорматРедактирования — строки правил ввода; они не меняют фактическое число 3 в запросе.

  2. ФормаВыбора — имя формы, а не открытая форма. В этом упражнении её не вызываем.

  3. Методы возвращают отдельные коллекции параметров выбора и связей параметров выбора.

  4. СвязьПоТипу описывает источник типа. Номер элемента связи не является номером строки результата.

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

  1. Вывод содержит диагностические настройки собственного числового поля. Не ожидайте формы выбора справочника у числовой константы.

  2. Исходный запрос и отбор остаются неизменны; процессор не запускается.

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

Правила редактирования отделены от данных и от действий интерфейса.

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

  1. Пустая строка имени формы — не ошибка открытия: форму здесь вообще не открывают.

  2. БыстрыйВыбор управляет механизмом выбора, не ускоряет выполнение запроса.

  3. Не подменяйте связь по типу произвольным числом без понимания связанного поля.

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

Понять, какое поле разрешено для отбора

Находим числовое Количество в доступных полях отбора собственной схемы. Разделяем описание поля и реальные строки отчёта.

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

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

Подготовка

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

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

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

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

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

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

  1. Доступные поля получаем из инициализированного редактора, не из пустого объекта настроек.

  2. НайтиПоле принимает объект пути. Поиск по локализованной подписи вместо пути ненадёжен.

  3. Папка, Таблица и Ресурс описывают роль поля в настройках. Их вывод не является выборкой товаров.

  4. Родителя читаем только после проверки Неопределено.

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

  1. Две первые проверки Истина; сообщения о роли и родителе диагностические.

  2. В отладчике тип ПолеКоличества — ДоступноеПолеОтбораКомпоновкиДанных; у него нет значения количества книги.

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

Найдено описание числового поля, пригодного для построения условий.

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

  1. Описание доступного поля и ЭлементОтбораКомпоновкиДанных — разные объекты.

  2. Количество дочерних полей не равно количеству строк результата.

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

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

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

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

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