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

Методы · Count

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

Синтаксис

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

ЗначенияПараметровМакетаКомпоновкиДанных.Количество (DataCompositionTemplateParameterValues.Count)

ЗначенияПараметровМакетаКомпоновкиДанных (DataCompositionTemplateParameterValues)

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

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

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

Описание:

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

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

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

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

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

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

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

Создать собственный черновик элемента, не выдавая его за готовую строку

Конструктор создаёт пустой собственный контейнер. Сравниваем его с первым настоящим событием, копируем только скалярные сведения и намеренно не подменяем им реальный поток.

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

Полный серверный общий модуль УчебныйПотокСКД85. Свой константный источник проходит компоновку и полный ручной вывод в ТаблицаЗначений.

Подготовка

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

  2. Вставьте весь приведённый модуль одного урока. В своей учебной обработке создайте управляемую форму, команду и клиентский обработчик, вызывающий свою процедуру &НаСервереБезКонтекста. Её тело: УчебныйПотокСКД85.ВыполнитьПример();.

  3. Схема, настройки, макет и процессоры создаются в коде. Собственный Local-запрос состоит из двух константных строк: Книга — 3 штуки, цена 250, сумма 750; Ручка — 1, 50, 50. Всего 2 позиции, 4 единицы и 800.

  4. Генератор макета выбран для коллекции значений. Результат — серверная ТаблицаЗначений в памяти, не табличный документ окна и не объект рабочей конфигурации.

  5. Для исследования поставьте точку останова внутри Пока перед ВывестиЭлемент. В переменной Элемент находится реально полученный элемент потока; изучите его ТипЭлемента, Макет, Макеты и ЗначенияПараметров.

  6. На завершении смотрите Итог и Диагностика либо переменные урока. ТаблицаЗначений не возвращается прямо в тонкий клиент; код не печатает, не пишет файл, не меняет базу и не использует сеть.

  7. Каждый запуск заново создаёт свои объекты. Не подключайте другой исчерпанный процессор и не меняйте чужой макет ради повторения урока.

  8. Запуск в 1С не проверялся. Статические проверки не доказывают фактическую последовательность всех элементов генератора; контрольные действия выполните только на своей учебной базе.

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

КонецПроцедуры

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

  1. Собственная схема создаёт Local-источник и две константные продажи; поля выбираются явно, детальные записи включены.

  2. Компоновщик получает эти настройки и точный ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений. Выбор генератора связан с конечным видом приёмника.

  3. Свой процессор инициализируется реальным макетом. Собственный вывод получает пустую ТаблицаЗначений и НачатьВывод до первого элемента.

  4. Следующий возвращает элемент или Неопределено. Перед чтением свойств проверяем тип; внутри полного цикла не пропускаем ни одного элемента.

  5. После диагностики передаём исходный элемент ВывестиЭлемент без изменения. ЗакончитьВывод вызывается после завершения потока; только теперь проверяем готовую таблицу.

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

  7. Только при первом реальном событии копируем четыре скалярных свойства в свой черновик. Их значения получены от собственного генератора, не выдуманы.

  8. Коллекции параметров и описаний не копируются. Поэтому черновик — частичная диагностическая заготовка, не функциональная копия элемента.

  9. ВывестиЭлемент получает исходный Элемент, никогда Черновик. Конструктор сам не создаёт третью продажу и не привносит новую строку результата.

  10. Флаг Скопировано проверяет, что настоящий поток был прочитан. Пример не учит отправлять неполный контейнер на вывод.

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

  1. При первом событии четыре сравнения Истина; после полного вывода ещё пять: поток есть, две строки, четыре единицы, сумма 800, скалярные сведения скопированы.

  2. В отладчике черновик содержит значения первого события, но его коллекции остаются пустыми. Не объявляйте это полной копией.

  3. Поиск ВывестиЭлемент(Черновик) в модуле ничего не находит: неполная заготовка не участвует в генерации результата.

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

Конструктор изучен в законченной задаче сравнения собственных объектов без фиктивного вывода неполного элемента.

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

  1. Элемент потока не равен строке исходного запроса. Структурные события, параметры и области макета могут давать другое число элементов, чем число позиций.

  2. ЗначенияПараметров и Макеты — readonly-ссылки на коллекции. Их нельзя присваивать вместо массивов или структур.

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

  4. ПроцентВывода — значение события, не число строк и не гарантия измеренного прогресса браузера. В этом уроке не задаём его искусственно.

  5. Все объекты созданы своим запуском в памяти. Примеры не выполнялись в 1С; проверяйте ожидаемый результат на учебном стенде.

  6. Для реального синтетического элемента требуется согласованный макет, параметры и области. Простое копирование четырёх свойств не доказывает пригодность для вывода.

  7. Ожидаемую пустоту нового контейнера нужно проверить в своей реализации 8.5.1.1343; статические проверки не заменяют эту проверку.

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

Исследовать реальные элементы своего потока СКД и получить итоговую таблицу

Просматриваем шесть свойств каждого настоящего элемента, не принимая его за одну продажу. Затем передаём весь поток на вывод и проверяем две позиции и сумму 800.

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

Полный серверный общий модуль УчебныйПотокСКД85. Свой константный источник проходит компоновку и полный ручной вывод в ТаблицаЗначений.

Подготовка

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

  2. Вставьте весь приведённый модуль одного урока. В своей учебной обработке создайте управляемую форму, команду и клиентский обработчик, вызывающий свою процедуру &НаСервереБезКонтекста. Её тело: УчебныйПотокСКД85.ВыполнитьПример();.

  3. Схема, настройки, макет и процессоры создаются в коде. Собственный Local-запрос состоит из двух константных строк: Книга — 3 штуки, цена 250, сумма 750; Ручка — 1, 50, 50. Всего 2 позиции, 4 единицы и 800.

  4. Генератор макета выбран для коллекции значений. Результат — серверная ТаблицаЗначений в памяти, не табличный документ окна и не объект рабочей конфигурации.

  5. Для исследования поставьте точку останова внутри Пока перед ВывестиЭлемент. В переменной Элемент находится реально полученный элемент потока; изучите его ТипЭлемента, Макет, Макеты и ЗначенияПараметров.

  6. На завершении смотрите Итог и Диагностика либо переменные урока. ТаблицаЗначений не возвращается прямо в тонкий клиент; код не печатает, не пишет файл, не меняет базу и не использует сеть.

  7. Каждый запуск заново создаёт свои объекты. Не подключайте другой исчерпанный процессор и не меняйте чужой макет ради повторения урока.

  8. Запуск в 1С не проверялся. Статические проверки не доказывают фактическую последовательность всех элементов генератора; контрольные действия выполните только на своей учебной базе.

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

КонецПроцедуры

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

  1. Собственная схема создаёт Local-источник и две константные продажи; поля выбираются явно, детальные записи включены.

  2. Компоновщик получает эти настройки и точный ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений. Выбор генератора связан с конечным видом приёмника.

  3. Свой процессор инициализируется реальным макетом. Собственный вывод получает пустую ТаблицаЗначений и НачатьВывод до первого элемента.

  4. Следующий возвращает элемент или Неопределено. Перед чтением свойств проверяем тип; внутри полного цикла не пропускаем ни одного элемента.

  5. После диагностики передаём исходный элемент ВывестиЭлемент без изменения. ЗакончитьВывод вызывается после завершения потока; только теперь проверяем готовую таблицу.

  6. В диагностике сохраняем номер события, тип, имя области, процент и размещение вложенных элементов. Перечисления преобразуем в строковое представление только для просмотра.

  7. Считаем коллекции параметров и описаний макетов; их число относится к событию, не к числу продаж.

  8. Итоговые проверки отдельно считают строки готовой таблицы, единицы и сумму. Это проверка результата после полного потока, не по первому событию.

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

  1. Пять конечных сравнений Истина: поток не пуст, таблица из двух строк, количество 4, сумма 800, число диагностических записей равно числу событий.

  2. В отладчике у каждого события есть реальный ТипЭлемента. Не ожидайте фиксированного количества событий или заранее придуманного процента.

  3. Сопоставьте итог Книга 750 и Ручка 50 с начальным константным запросом. Настоящие имена сгенерированных областей не фиксируются.

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

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

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

  1. Элемент потока не равен строке исходного запроса. Структурные события, параметры и области макета могут давать другое число элементов, чем число позиций.

  2. ЗначенияПараметров и Макеты — readonly-ссылки на коллекции. Их нельзя присваивать вместо массивов или структур.

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

  4. ПроцентВывода — значение события, не число строк и не гарантия измеренного прогресса браузера. В этом уроке не задаём его искусственно.

  5. Все объекты созданы своим запуском в памяти. Примеры не выполнялись в 1С; проверяйте ожидаемый результат на учебном стенде.

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

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

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

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

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