КоллекцияЭлементовПорядкаКомпоновкиДанных.Количество

Методы · Count

Получает количество элементов в коллекции.

Синтаксис

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

КоллекцияЭлементовПорядкаКомпоновкиДанных.Количество (DataCompositionOrderItemCollection.Count)

КоллекцияЭлементовПорядкаКомпоновкиДанных (DataCompositionOrderItemCollection)

Количество (Count)

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

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

Описание:

Получает количество элементов в коллекции.

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

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

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

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

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

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

Задать независимую сортировку магазинов и товаров

Магазины сортируем по возрастанию, товары — по убыванию. Проверяем направление в двух разных группировках и отсутствие общего порядка в корне настроек.

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

Полный код серверного общего модуля УчебныеДиаграммы85. ВыполнитьПример() вызывается из собственного серверного обработчика учебной команды. Код не запускается автоматически в справочнике.

Подготовка

  1. Работайте в отдельной учебной базе на платформе 8.5.1.1343. Справочники, документы, регистры и готовые макеты не нужны.

  2. Создайте общий модуль УчебныеДиаграммы85: Сервер — Да, Клиент — Нет, Привилегированный — Нет. Полностью вставьте код одного урока, а не оборачивайте его второй процедурой.

  3. В своей учебной обработке добавьте команду. Из её серверного обработчика вызовите УчебныеДиаграммы85.ВыполнитьПример();. Не вызывайте серверные объекты СКД непосредственно из тонкого клиента.

  4. Запрос содержит только три собственные константные строки: Север/Книга — 750, Север/Ручка — 50, Юг/Книга — 500. Продажи Севера — 800, Юга — 500, общая сумма — 1300.

  5. Серии будут магазинами, точки — товарами, ресурс — суммой продаж. Значение Книга складывается до 1250, Ручка — до 50. Количество единиц по всем строкам — 6, а число строк источника — 3.

  6. Каждый урок запускайте отдельно: он заново создаёт схему и настройки в памяти. Упражнения с настройками не формируют отчёт; отдельный урок показывает компоновку и вывод.

  7. Для просмотра объектов поставьте точку останова перед последними Сообщить. ТабличныйДокумент результата урока вывода находится в серверной переменной Результат; код не печатает, не сохраняет файл и не открывает окно клиента.

  8. Запуск в 1С здесь не проверялся. Приведены ожидаемые проверки собственной задачи, а не доказательство успешного формирования отчёта в любой конфигурации.

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

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

  1. Добавляем два разных элемента порядка, каждый в собственную коллекцию группировки.

  2. Серия получает поле Магазин и направление Возр; Точка — Наименование и Убыв. Строковые имена направлений не используются.

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

  4. Удаляем порядок магазинов, но не товаров; последнее сравнение проверяет область действия очистки.

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

  1. Ожидаются шесть сравнений Истина. В отладчике до очистки у группировок разные поля и направления.

  2. Для осмотра результата скопируйте создание двух порядков перед компоновкой урока вывода, без очистки. При обычном русском сравнении названий ожидайте Север перед Юг, Ручка перед Книга; фактическое сравнение строк зависит от настройки сортировки базы.

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

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

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

  1. Порядок элементов дерева настроек и порядок данных группировки — разные операции.

  2. Не заменяйте НаправлениеСортировкиКомпоновкиДанных значением другого одноимённого перечисления.

  3. Сортировка полей не меняет суммы продаж и не записывает данные в базу.

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

Подготовить топ-1 магазинов по сумме, а не по алфавиту

Комбинируем порядок по ресурсу Сумма по убыванию с лимитом одного магазина. Для собственных данных ожидаемый лидер Север — 800, а не Юг — 500.

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

Полный код серверного общего модуля УчебныеДиаграммы85. ВыполнитьПример() вызывается из собственного серверного обработчика учебной команды. Код не запускается автоматически в справочнике.

Подготовка

  1. Работайте в отдельной учебной базе на платформе 8.5.1.1343. Справочники, документы, регистры и готовые макеты не нужны.

  2. Создайте общий модуль УчебныеДиаграммы85: Сервер — Да, Клиент — Нет, Привилегированный — Нет. Полностью вставьте код одного урока, а не оборачивайте его второй процедурой.

  3. В своей учебной обработке добавьте команду. Из её серверного обработчика вызовите УчебныеДиаграммы85.ВыполнитьПример();. Не вызывайте серверные объекты СКД непосредственно из тонкого клиента.

  4. Запрос содержит только три собственные константные строки: Север/Книга — 750, Север/Ручка — 50, Юг/Книга — 500. Продажи Севера — 800, Юга — 500, общая сумма — 1300.

  5. Серии будут магазинами, точки — товарами, ресурс — суммой продаж. Значение Книга складывается до 1250, Ручка — до 50. Количество единиц по всем строкам — 6, а число строк источника — 3.

  6. Каждый урок запускайте отдельно: он заново создаёт схему и настройки в памяти. Упражнения с настройками не формируют отчёт; отдельный урок показывает компоновку и вывод.

  7. Для просмотра объектов поставьте точку останова перед последними Сообщить. ТабличныйДокумент результата урока вывода находится в серверной переменной Результат; код не печатает, не сохраняет файл и не открывает окно клиента.

  8. Запуск в 1С здесь не проверялся. Приведены ожидаемые проверки собственной задачи, а не доказательство успешного формирования отчёта в любой конфигурации.

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

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

  1. Сумма — ресурс с выражением Сумма(Сумма). Лидер выбирается по сумме магазина, не по отдельной продаже.

  2. Порядок создаём внутри серии магазинов и направляем по убыванию агрегированного ресурса.

  3. Лимит КоличествоЗаписей ставим в параметрах этой же группировки. Он не задаёт порог Сумма > 1.

  4. Проверяем обе составляющие топа: поле и направление порядка, а также найденное значение лимита.

  5. Чтобы сформировать диаграмму, перенесите настройку перед компоновкой урока вывода. Этот урок ещё не запускает процессор.

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

  1. Ожидаются пять сравнений Истина. Суммы собственной задачи: Север 750 + 50 = 800, Юг 500.

  2. Для проверки измените продажу Юга с 500 на 900 и сформируйте результат в учебной базе: ожидаемый лидер станет Юг. Контрольную сумму исходного запроса в уроке вывода также обновите до 1700.

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

Подготовлена проверяемая настройка топ-1 с сортировкой по нужному ресурсу.

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

  1. Лимит без порядка не гарантирует выбор максимальной суммы.

  2. Если суммы равны, одно поле сортировки не задаёт однозначный порядок лидеров: добавьте дополнительное поле.

  3. Фактический топ проверяется по результату компоновки, а не только по значениям настроек.

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

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

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

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

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