ОтборКомпоновкиДанных.ПолучитьКоличествоИспользуемых

Методы · GetUsedCount

Возвращает количество используемых внутри настроек (у которых установлено свойство Использование). Для расчета используется количество включенных (с учетом родительских) элементов на всю глубину дерева настроек, при этом группы в расчет количества не включаются.

Синтаксис

ПолучитьКоличествоИспользуемых()
Полное описание, параметры и ограничения

ОтборКомпоновкиДанных.ПолучитьКоличествоИспользуемых (DataCompositionFilter.GetUsedCount)

ОтборКомпоновкиДанных (DataCompositionFilter)

ПолучитьКоличествоИспользуемых (GetUsedCount)

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

Синтаксис:
ПолучитьКоличествоИспользуемых()
Возвращаемое значение:
Тип: Число.

Описание:

Возвращает количество используемых внутри настроек (у которых установлено свойство Использование). Для расчета используется количество включенных (с учетом родительских) элементов на всю глубину дерева настроек, при этом группы в расчет количества не включаются.

Доступность:

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

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

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

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

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

Выделить дорогой товар цветом, не скрывая остальные

Условное оформление списка меняет вид ячейки. В отличие от отбора, правило Цена > 200 оставляет все четыре строки.

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

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

Подготовка

  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";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Правило = Список.УсловноеОформление.Элементы.Добавить();
    Правило.Использование = Истина;
    Правило.Представление = "Цена выше 200";
    Правило.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 239, 200));
    Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Цена");
    Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    Условие.ПравоеЗначение = 200;
    Условие.Использование = Истина;
    ПолеЦены = Правило.Поля.Элементы.Добавить();
    ПолеЦены.Поле = Новый ПолеКомпоновкиДанных("Цена");
    ПолеЦены.Использование = Истина;
    Сообщить(Список.УсловноеОформление.ПолучитьКоличествоИспользуемых() = 1);
    Сообщить(Список.Отбор.ПолучитьКоличествоИспользуемых() = 0);

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

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

  1. Правило принадлежит Список.УсловноеОформление, не условному оформлению всей формы. Поле оформляем по имени данных Цена, не по имени элемента формы ТоварыЦена.

  2. Отбор внутри правила отвечает за применение цвета. Это не Список.Отбор и он не убирает строки.

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

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

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

  2. В таблице четыре строки. Ячейка цены Книги (250) выделена; 150, 70 и 30 не выделены.

  3. Измените порог на 150: Чай не выделяется, потому что сравнение строго Больше.

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

Одно проверяемое правило оформления с чётким отличием от фильтра.

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

  1. Цвет не изменяет цену и не записывает реквизиты.

  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";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Условие = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
    Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    Условие.ПравоеЗначение = 0;
    Условие.Использование = Истина;
    Категория = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Категория.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Категория");
    Категория.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    Категория.ПравоеЗначение = "Продукты";
    Категория.Использование = Истина;
    Контроль = Новый Запрос(Список.ТекстЗапроса);
    Сообщить(Контроль.Выполнить().Выгрузить().Количество() = 4);
    Сообщить(Список.Отбор.ПолучитьКоличествоИспользуемых() = 2);

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

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

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

  2. Отбор описывает поле, сравнение и правое значение. Использование включает условие; наличие элемента само по себе его не включает.

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

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

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

  2. В таблице только Чай: номер 3, количество 2, цена 150.

  3. В настройках списка отключите только условие количества: появится также Вода; исходный набор всё ещё из четырёх строк.

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

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

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

  1. Отбор списка не заменяет RLS, проверку прав или защиту HTTP/API.

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

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

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

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

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

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