ТипЭлементаРезультатаКомпоновкиДанных.НачалоИКонец: пройти свой результат по элементам

Учебные задачи

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

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

Модуль своей обычной формы, толстый клиент: обработчик и две отдельные функции подготовки.

Подготовка

  1. В своей учебной конфигурации создайте Отчеты → УчебныеКнигиСКД. У отчёта откройте ОсновнаяСхемаКомпоновкиДанных и сохраните её макетом ОсновнаяСхемаКомпоновкиДанных.

  2. В конструкторе СКД создайте источник Local и набор-запрос Книги. Вставьте приведённый запрос двух константных строк; это не чтение рабочих справочников. Доступные поля Наименование, Количество, Сумма заполните автоматически.

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

  4. В схеме на вкладке Ресурсы добавьте Количество с выражением Сумма(Количество) и Сумма с выражением Сумма(Сумма). Существующие варианты Подробно / Кратко не заменяйте.

  5. Добавьте вариант УчебныеИтоги: структура — группировка по Наименование с детальными записями внутри; в выбранных полях Наименование, Количество и Сумма. В порядке укажите Наименование по возрастанию. Наименование сделайте узкой колонкой ширины 12 для опыта с длинным текстом.

  6. Для диаграмм добавьте отдельный вариант УчебнаяДиаграмма: структура — Диаграмма, точки по Наименование, ресурсы Количество и Сумма; тип Гистограмма. Это два условных показателя разных единиц — опыт оформления, не готовый управленческий график.

  7. Создайте обычную форму собственной обработки в толстом клиенте. Основной полный обработчик назначьте кнопке ПоказатьПример. Две дополнительные процедуры / функции разместите отдельно в том же модуле.

  8. Схема берётся из собственного общего макета отчёта. Названия вариантов и полей — контракт подготовки, а не проверка имени конфигурации / версии платформы. Макет обратно в конфигурацию не записывается.

  9. Основной полный обработчик — кнопка своей обычной формы, толстый клиент. Дополнительные функции разместите отдельно в том же модуле. Штатный Вывести(Процессор) не вызывайте одновременно с этим ручным обходом.

  10. Поток создаётся новым при каждом запуске: после Следующий элементы потребляются. Для второго просмотра создайте новый процессор, а не используйте уже завершённый поток.

Процедура ПоказатьПример(Кнопка)
    Поток = УчебныйПотокРезультата();
    Лист = Новый ТабличныйДокумент;
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    Вывод.УстановитьДокумент(Лист);
    Вывод.НачатьВывод();
    Совпадений = 0;
    Элемент = Поток.Процессор.Следующий();
    Пока Элемент <> Неопределено Цикл
        Если Элемент.ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных.НачалоИКонец Тогда
            Совпадений = Совпадений + 1;
        КонецЕсли;
        Вывод.ВывестиЭлемент(Элемент);
        Элемент = Поток.Процессор.Следующий();
    КонецЦикла;
    Вывод.ЗакончитьВывод();
    Сообщить("Обработано собственных элементов режима НачалоИКонец: " + Строка(Совпадений));
    Лист.Показать("Свой поток результатов СКД");
КонецПроцедуры
Конструктор СКД своего отчёта: запрос двух константных строк, не BSL
ВЫБРАТЬ
    "Учебная книга" КАК Наименование,
    3 КАК Количество,
    750 КАК Сумма
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ "Учебная тетрадь", 5, 200
Тот же модуль: загрузить настоящий собственный вариант
Функция УчебныйКомпоновщик(Схема, ИмяВарианта)
    Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Источник);
    Для Каждого Вариант Из Схема.ВариантыНастроек Цикл
        Если Вариант.Имя = ИмяВарианта Тогда
            Компоновщик.ЗагрузитьНастройки(Вариант.Настройки);
            Возврат Компоновщик;
        КонецЕсли;
    КонецЦикла;
    ВызватьИсключение "Создайте собственный вариант схемы: " + ИмяВарианта;
КонецФункции
Тот же модуль: построить макет и инициализировать новый поток
Функция УчебныйПотокРезультата()
    Схема = Отчеты.УчебныеКнигиСКД.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Компоновщик = УчебныйКомпоновщик(Схема, "УчебныеИтоги");
    Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
    ПостроительМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = ПостроительМакета.Выполнить(Схема, Компоновщик.Настройки, Расшифровка);
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет, , Расшифровка);
    Возврат Новый Структура("Процессор,Макет,Расшифровка", Процессор, Макет, Расшифровка);
КонецФункции

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

  1. Подготовьте свой вариант УчебныеИтоги с группировкой и деталями.

  2. Создайте новый процессор и начните вывод.

  3. Обработайте подходящие реальные элементы, передайте все элементы выводу и завершите его.

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

  1. Начало открывает вложенный элемент, Конец закрывает, НачалоИКонец описывает невложенный завершённый элемент. Код не переставляет и не переписывает маркеры начала / конца.

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

  3. Счётчик измеряет реальные маркеры выбранного вида, а не число книг. У шаблона могут быть дополнительные служебные элементы; их количество не подменяется заранее числом 2.

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

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

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

  1. Пропуск закрывающего маркера или второй вызов Следующий перед выводом потеряют часть структуры.

  2. BSL, формирование и показ листа при сборке HTML не выполнялись.

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

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

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

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

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