Предыдущие статьи по СКД можно посмотреть по ссылкам ниже:
- Основные понятия и элементы схемы компоновки
- Настройки вариантов отчетов
- Работа с пользовательскими настройками
- Расширения языка запросов.
До сих пор, мы рассматривали схему компоновки с одним единственны набором данных «Запрос». Это самый распространенный вариант применения СКД. Однако, система позволяет создавать наборы данных других типов. А также создавать несколько наборов данных. Все эти действия выполняются на закладке «Наборы данных» конструктора схемы компоновки:

Оглавление
- Связь - объединение
- Связь - соединение
- Передача параметров в подчиненные наборы
- Дополнительные настройки связи наборов
- Некоторые особенности соединения наборов
- Автоматическое построение иерархии
- Пример создания собственной иерархии
- Проблема с иерархическим отбором в собственной иерархии
- Иерархия детальных записей
Рассмотрим, какие типы наборов данных можно создать в схеме компоновки данных:
- Набор данных запрос – произвольный запрос к базе данных (самый распространенный вариант),
- Набор данных объект – произвольный, внешний набор данных (например таблица значений),
- Набор данных объединение – объединение нескольких наборов данных в один результирующий.
Мы еще не рассматривали набор данных объект, по этому, остановимся на нем более подробно. Создавая набор данных этого типа, необходимо описать только выходные поля этого набора и его наименование:

Этого достаточно, чтобы указать все действия по дальнейшей обработке данных: расчет итогов, построение структуры отчета, настройка отборов, сортировки и прочие настройки.
Сам механизм для формирования данных необходимо описывать программно, и передавать процессору компоновки. Такие внешние данные могут быть следующих видов:
- Таблица значений,
- Выборка из результата запроса,
- Область ячеек табличного документа,
- Набор записей регистров,
- Любой объект конфигурации или его табличная часть.
Наиболее распространенный тип внешних данных – это таблица значений. Ниже пример программного кода для передачи внешних данных процессору компоновки:
ТЗ = новый ТаблицаЗначений;
…
ВнешниеНаборы = новый Структура;
ВнешниеНаборы.Вставить("ИмяНабораДанных", ТЗ);
ПроцессорКомпоновки = новый ПроцессорКомпоновкиДанных();
ПроцессорКомпановки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
Имя набора данных должно соответствовать имени, заданному в схеме компоновки, а имена колонок таблицы значений – наименованиям полей в схеме.
Набор данного типа, по своей сути, не является набором как таковым. Он служит для объединения нескольких наборов данных любого типа в один, результирующий.
Может быть построена разветвленная структура объединений наборов данных. Отдельные наборы можно перетаскивать мышкой по структуре.
Существует ограничение: подчиненные наборы могут быть только у наборов данных объединение.
Также, следует обратить внимание, что набор реквизитов полей у подчиненных наборов данных ограничен:

Отсутствуют следующие реквизиты:
- Автозаголовок,
- Роль,
- Выражения представления и упорядочивания,
- Проверка иерархии,
- Оформление,
- Параметры редактирования.
Раз уж можно создавать несколько наборов данных, необходимо их как-то связывать между собой. Существует два способа связи наборов данных: объединение и соединение.
Объединение выполняется с помощью отдельного набора данных «Набор данных объединение», который описан выше.
У объединения наборов данных есть существенное отличие от объединения двух отдельных таблиц в запросе: количество выходных полей у объединяемых наборов может отличаться.
Поля объединяемых наборов с одинаковым значением реквизита «Путь» сворачиваются в одно. Автоматической группировки строк по полям с одинаковым реквизитом «Путь» - не происходит.
Поля с разными значениями реквизита «Путь», образуют отельные поля в итоговом наборе.
Из выше сказанного можно сделать вывод, не должно быть четкого соответствия между количеством и последовательностью полей объединяемых наборов. Но, если нам нужно, чтобы какие-либо значения из двух наборов объединились в одну колонку, это также возможно, путем указанием одного и того же реквизита «Путь».
Это более сложный вид связи двух наборов данных. Для настройки соединения наборов предназначена специальная закладка конструктора схемы компоновки «Связи наборов данных»:

Соединение двух наборов выполняется по аналогии с соединением таблиц в запросе. На закладке «Связи наборов данных», по аналогии с конструктором запросов можно выбрать наборы данных и поля наборов (выражения), по которым необходимо выполнить соединение.
Важно:
- Вид соединения по умолчанию всегда «ЛЕВОЕ ВНЕШНЕЕ». Источником связи выступает основной набор данных, приемником связи – подчиненный.
- Выполнять соединение можно только для наборов данных верхнего уровня. То-есть, наборы данных, которые входят в наборы «Объединения» соединять нельзя.
ТОП-6 инструментов для разработчика 1С
Подборка лучших инструментов для разработчика 1С включает Toolkit, DCT, OneDebugger, PrintWizard, DataFormWizard и Infostart MCP. Любой инструмент со скидкой 20% при покупке от двух решений.
Вступайте в нашу телеграмм-группу Инфостарт