Получает количество элементов в коллекции.
Синтаксис
Количество()Полное описание, параметры и ограничения
КоллекцияЭлементовОтбораКомпоновкиДанных.Количество (DataCompositionFilterItemCollection.Count)
КоллекцияЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemCollection)
Количество (Count)
Доступен, начиная с версии 8.1.
Синтаксис:
Количество()
Возвращаемое значение:
Тип: Число.
Описание:
Получает количество элементов в коллекции.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Подготовить снимок состояния списка и ссылку на свой пустой справочник
Создаём конкретный пакет НастройкиТаблицыДинамическогоСписка, явно задаём все четыре свойства и сохраняем собственный XML-снимок. Меняем исходный пакет, проверяем сохранность восстановленной версии и используем её в серверном варианте получения навигационной ссылки.
Где и как запускать
Полный серверный общий модуль УчебнаяНавигация своего стенда УчебнаяСсылкаСписка85 и отдельный полный модуль формы. Ссылку не открывает; возможное сохранение её параметров только в собственной будущей учебной базе.
Подготовка
НОВАЯ отдельная учебная база точно 8.5.1.1343, конфигурация УчебнаяСсылкаСписка85, совместимость Не использовать. Единственный справочник УчебныеТовары: неиерархический, без владельцев, собственных реквизитов и табличных частей, Код строка9, Наименование строка50. Записей нет. Других бизнес-объектов, расширений, подписок и фоновых заданий нет.
Создайте управляемую форму списка справочника и назначьте её основной формой списка. Стандартная таблица формы связана с динамическим списком справочника. У этого пустого списка нет текущей записи: код не выдумывает ключ2, UUID или чужую ссылку.
Общий модуль УчебнаяНавигация: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет; вставьте полный основной модуль. Своя внешняя обработка УчебнаяСсылкаСписка85 → управляемая форма → команда/кнопка Выполнить с действием Выполнить. Полный отдельный модуль формы приведён ниже.
Будущая ручная подготовка: сохранить конфигурацию, Конфигурация → Обновить конфигурацию базы данных (F7), открыть новый свой сеанс и свою обработку. Здесь форма, конфигурация, код, XML и навигация не запускались.
ВАЖНО: получение ссылки с настройками не является гарантированно чистой операцией памяти. Платформа использует хранилище внешних данных навигационных ссылок для параметров. Будущий вызов разрешён только в этой собственной учебной базе; не запускайте в production и не распространяйте полученную ссылку как публичный адрес.
Функция ВыполнитьПример() Экспорт
ПроверитьСвойСтендПрофилей();
Настройки = Новый НастройкиТаблицыДинамическогоСписка;
Настройки.ОтображениеТаблицы = ОтображениеТаблицы.Список;
Настройки.ТекущаяСтрока = Неопределено;
Настройки.ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
Настройки.ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных;
ПроверитьСвойПакетСписка(Настройки, Истина);
Снимок = ЗаписатьСвойСнимокСписка(Настройки);
Копия = ПрочитатьСвойСнимокСписка(Снимок);
Настройки.ФиксированныеНастройки = Неопределено;
ПроверитьСвойПакетСписка(Настройки, Ложь);
ПроверитьСвойПакетСписка(Копия, Истина);
Если ТипЗнч(Снимок) <> Тип("Строка") Или ПустаяСтрока(Снимок) Тогда
ВызватьИсключение "Нужен собственный непустой XML-снимок в памяти";
КонецЕсли;
Ссылка = ПолучитьНавигационнуюСсылку(Метаданные.Справочники.УчебныеТовары, Копия, "УчебныеТовары: список без выбранной строки и отборов");
Если ТипЗнч(Ссылка) <> Тип("Строка") Или ПустаяСтрока(Ссылка) Тогда
ВызватьИсключение "Не получена собственная навигационная ссылка";
КонецЕсли;
ПроверитьСвойПакетСписка(Копия, Истина);
Сообщить("Снимок сохранил явные фиксированные настройки; исходный пакет теперь без них");
Возврат Ссылка;
КонецФункции
Процедура ПроверитьСвойСтендПрофилей()
Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен свой новый стенд с единственным учебным справочником";
КонецЕсли;
Если Метаданные.Справочники[0].Имя <> "УчебныеТовары" Тогда
ВызватьИсключение "Разрешён только собственный справочник УчебныеТовары";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойПакетСписка(Настройки, СФиксированными)
Если ТипЗнч(Настройки) <> Тип("НастройкиТаблицыДинамическогоСписка") Тогда
ВызватьИсключение "Нужен конкретный собственный пакет состояния списка";
КонецЕсли;
Если ТипЗнч(Настройки.ОтображениеТаблицы) <> Тип("ОтображениеТаблицы")
Или Настройки.ОтображениеТаблицы <> ОтображениеТаблицы.Список Тогда
ВызватьИсключение "Пустой собственный неиерархический справочник показываем списком";
КонецЕсли;
Если Настройки.ТекущаяСтрока <> Неопределено Тогда
ВызватьИсключение "У пустого собственного справочника нет выбранной строки";
КонецЕсли;
Если ТипЗнч(Настройки.ПользовательскиеНастройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
ВызватьИсключение "Нужны собственные типизированные пользовательские настройки";
КонецЕсли;
Если Настройки.ПользовательскиеНастройки.Элементы.Количество() <> 0 Тогда
ВызватьИсключение "Пользовательские элементы этого собственного пакета должны быть пусты";
КонецЕсли;
Если СФиксированными Тогда
Если ТипЗнч(Настройки.ФиксированныеНастройки) <> Тип("НастройкиКомпоновкиДанных") Тогда
ВызватьИсключение "Нужны собственные типизированные фиксированные настройки";
КонецЕсли;
Если Настройки.ФиксированныеНастройки.Отбор.Элементы.Количество() <> 0 Тогда
ВызватьИсключение "Явный фиксированный отбор собственного пакета должен быть пуст";
КонецЕсли;
ИначеЕсли Настройки.ФиксированныеНастройки <> Неопределено Тогда
ВызватьИсключение "Во второй версии фиксированные настройки не установлены";
КонецЕсли;
КонецПроцедуры
Функция ЗаписатьСвойСнимокСписка(Настройки)
ПроверитьСвойПакетСписка(Настройки, Истина);
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
СериализаторXDTO.ЗаписатьXML(Запись, Настройки, НазначениеТипаXML.Явное);
Возврат Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецФункции
Функция ПрочитатьСвойСнимокСписка(Текст)
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(Текст);
Попытка
Настройки = СериализаторXDTO.ПрочитатьXML(Чтение, Тип("НастройкиТаблицыДинамическогоСписка"));
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ПроверитьСвойПакетСписка(Настройки, Истина);
Возврат Настройки;
КонецФункцииУчебнаяСсылкаСписка85.Форма
Своя внешняя обработка УчебнаяСсылкаСписка85 → управляемая Форма → Модуль
Полный отдельный модуль своей формы; не выполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
Ссылка = ПодготовитьНаСервере();
Сообщить(Ссылка);
Сообщить("Ссылка не открывалась; состояние списка и снимок проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПодготовитьНаСервере()
Возврат УчебнаяНавигация.ВыполнитьПример();
КонецФункцииРазбор по шагам
Конструктор создаёт объект параметров, не сам динамический список и не форму. Все четыре значения заданы явно: Список, Неопределено для текущей строки, новая пустая пользовательская настройка и новая пустая фиксированная настройка.
ОтображениеТаблицы — enum, не строка. Пустые пользовательские элементы означают отсутствие заданных пользовательских условий; пустой фиксированный отбор не является разрешением доступа и не отключает RLS.
Перед записью проверяем конкретные типы, отсутствие текущего ключа и пустые коллекции. Сериализатору передаём только этот собственный пакет, не объект метаданных справочника: сериализация метаданных могла бы выгрузить доступные записи.
ЗаписатьXML использует Явное назначение типа; ПрочитатьXML получает точный тип НастройкиТаблицыДинамическогоСписка. Читатель и писатель работают только со строками памяти и закрываются при ошибке и нормальном завершении.
Исходным ФиксированныеНастройки задаём Неопределено, но восстановленный пакет должен сохранить настоящий объект НастройкиКомпоновкиДанных с пустым отбором. Это различие состояния, а не сравнение случайного порядка или префиксов XML.
На сервере ПолучитьНавигационнуюСсылку принимает метаданные собственного справочника, конкретный восстановленный пакет и представление ссылки. Внешние бизнес-данные не передаются. Переход по ссылке и открытие формы в этом коде не выполняются.
Возвращаем непустую строку в отдельный модуль своей формы. Не требуем заранее угаданного текста URL: параметры могут быть связаны со служебным хранилищем и конкретной базой. Получение строки не доказывает успешного открытия интерфейса.
Как проверить результат
Будущий результат: исходный пакет имеет ФиксированныеНастройки=Неопределено; копия после XML по-прежнему содержит НастройкиКомпоновкиДанных, пустой фиксированный отбор, пустые пользовательские элементы, Список и Неопределено для строки.
Будущий отрицательный контроль: после Копия = ПрочитатьСвойСнимокСписка(Снимок) вставьте Копия.ТекущаяСтрока = "2";. Не меняйте проверки и подготовку пустого списка. Проверка копии должна отклонить выдуманный строковый ключ ДО получения ссылки. После опыта восстановите весь модуль.
Полученная строка — только ожидаемый будущий результат серверного API. Открытие ссылки, восстановление интерфейса, содержимое служебного хранилища и работа прав доступа здесь не проверялись.
runtimeVerifiedScenarios=0. Сверены сигнатуры, типы, доступность, readonly и структура кода; фактические XML-снимок, независимость версии и навигационная ссылка в1С не получены.
Ожидаемый результат
Конкретный пакет параметров решает задачу снимка и подготовки перехода к своему списку; конструктор и все четыре свойства используются в полном проверяемом сценарии.
На что обратить внимание
НастройкиТаблицыДинамическогоСписка не равен НастройкиОтображенияДинамическогоСписка: второй тип имеет другой контракт и не подставляется в этот конструктор или параметр навигации.
Тип текущего ключа определяется реальным источником таблицы. У пустого собственного справочника нет выбранной строки; нельзя произвольно использовать число или строку2 для ссылочного источника.
Пустой объект фиксированных настроек и Неопределено — разные состояния. Не удаляйте это различие при проверке снимка. Пользовательские и фиксированные параметры не являются способом обхода доступа к данным.
XML-снимок относится к собственным известным типам в этой версии платформы, не к универсальному клонированию любого графа. Не принимайте чужой XML и не обещайте переносимость ссылок между базами.
Получение ссылки с настройками может сохранять служебные параметры; ссылка не обязательно автономна и не обязана жить вечно. Этот урок не удаляет служебные записи и не измеряет срок их хранения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Выделить Север цветом, не фильтруя остальные магазины
ЦветВДиаграмме задаём в условном оформлении серии при Магазин = Север. Отдельно задаём фон в правиле самой диаграммы и проверяем, что отбор данных остаётся пустым.
Где и как запускать
Полный код серверного общего модуля УчебныеДиаграммы85. ВыполнитьПример() вызывается из собственного серверного обработчика учебной команды. Код не запускается автоматически в справочнике.
Подготовка
Работайте в отдельной учебной базе на платформе 8.5.1.1343. Справочники, документы, регистры и готовые макеты не нужны.
Создайте общий модуль УчебныеДиаграммы85: Сервер — Да, Клиент — Нет, Привилегированный — Нет. Полностью вставьте код одного урока, а не оборачивайте его второй процедурой.
В своей учебной обработке добавьте команду. Из её серверного обработчика вызовите УчебныеДиаграммы85.ВыполнитьПример();. Не вызывайте серверные объекты СКД непосредственно из тонкого клиента.
Запрос содержит только три собственные константные строки: Север/Книга — 750, Север/Ручка — 50, Юг/Книга — 500. Продажи Севера — 800, Юга — 500, общая сумма — 1300.
Серии будут магазинами, точки — товарами, ресурс — суммой продаж. Значение Книга складывается до 1250, Ручка — до 50. Количество единиц по всем строкам — 6, а число строк источника — 3.
Каждый урок запускайте отдельно: он заново создаёт схему и настройки в памяти. Упражнения с настройками не формируют отчёт; отдельный урок показывает компоновку и вывод.
Для просмотра объектов поставьте точку останова перед последними Сообщить. ТабличныйДокумент результата урока вывода находится в серверной переменной Результат; код не печатает, не сохраняет файл и не открывает окно клиента.
Запуск в 1С здесь не проверялся. Приведены ожидаемые проверки собственной задачи, а не доказательство успешного формирования отчёта в любой конфигурации.
Процедура ВыполнитьПример() Экспорт
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныеПродажи";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "СвоиТриСтроки";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Север"" КАК Магазин,
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Север"", ""Ручка"", 1, 50
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Юг"", ""Книга"", 2, 500";
Для Каждого ИмяРесурса Из СтрРазделить("Сумма,Количество", ",") Цикл
Ресурс = Схема.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = ИмяРесурса;
Ресурс.Выражение = "Сумма(" + ИмяРесурса + ")";
КонецЦикла;
Настройки = Схема.НастройкиПоУмолчанию;
Диаграмма = Настройки.Структура.Добавить(Тип("ДиаграммаКомпоновкиДанных"));
Диаграмма.Имя = "УчебныеПродажиПоМагазинам";
Диаграмма.Использование = Истина;
Выбранное = Диаграмма.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных("Сумма");
Выбранное.Использование = Истина;
Серия = Диаграмма.Серии.Добавить();
Серия.Имя = "Магазины";
Серия.Использование = Истина;
ПолеСерии = Серия.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеСерии.Поле = Новый ПолеКомпоновкиДанных("Магазин");
ПолеСерии.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
ПолеСерии.Использование = Истина;
Точка = Диаграмма.Точки.Добавить();
Точка.Имя = "Товары";
Точка.Использование = Истина;
ПолеТочки = Точка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеТочки.Поле = Новый ПолеКомпоновкиДанных("Наименование");
ПолеТочки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
ПолеТочки.Использование = Истина;
ПравилоСерии = Серия.УсловноеОформление.Элементы.Добавить();
ПравилоСерии.Использование = Истина;
ПравилоСерии.Оформление.УстановитьЗначениеПараметра("ЦветВДиаграмме", Новый Цвет(35, 105, 190));
УсловиеОформления = ПравилоСерии.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УсловиеОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Магазин");
УсловиеОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
УсловиеОформления.ПравоеЗначение = "Север";
УсловиеОформления.Использование = Истина;
ПравилоДиаграммы = Диаграмма.УсловноеОформление.Элементы.Добавить();
ПравилоДиаграммы.Использование = Истина;
ПравилоДиаграммы.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(245, 248, 252));
ЦветСерии = ПравилоСерии.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветВДиаграмме"));
Если ЦветСерии = Неопределено Тогда
ВызватьИсключение "Не найден цвет собственной серии";
КонецЕсли;
Сообщить(ЦветСерии.Значение = Новый Цвет(35, 105, 190));
Сообщить(Серия.УсловноеОформление.Элементы.Количество() = 1);
Сообщить(Диаграмма.УсловноеОформление.Элементы.Количество() = 1);
Сообщить(ПравилоСерии.Отбор.Элементы.Количество() = 1);
Сообщить(Серия.Отбор.Элементы.Количество() = 0);
Сообщить(Настройки.Отбор.Элементы.Количество() = 0);
КонецПроцедурыРазбор по шагам
УсловноеОформление группы серий и диаграммы — отдельные контейнеры. В каждом добавляем собственное правило.
ЦветВДиаграмме предназначен для серии. Условие находится в ПравилоСерии.Отбор, а не в отборе продаж.
Север сравнивается со значением поля Магазин. Магазин Юг не должен исчезнуть только из-за этого правила цвета.
Найденный параметр оформления проверяем до чтения значения. Затем отдельно проверяем отсутствие отбора данных.
Фон в оформлении — не обещание окраски всей области диаграммы. Для фона графической области используйте описанный параметр вывода ТипДиаграммы.ЦветФона.
Как проверить результат
Ожидаются шесть сравнений Истина. У оформления один критерий, у отбора данных группировки — ни одного.
В учебном запуске перенесите правило серии перед компоновкой и осмотрите цвет Севера и наличие Юга. Проверка коллекций не доказывает визуальное применение цвета.
Ожидаемый результат
Создано адресное правило оформления, не исключающее данные другого магазина.
На что обратить внимание
Правило оформления с условием не равно фильтру источника.
ЦветВДиаграмме относится к серии; его нельзя переносить на точки с ожиданием того же поведения.
Другие правила оформления и параметры графической области могут влиять на вид результата; этот урок начинает с собственного пустого дерева.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.