На примере этого отчета мы продемонстрируем использование в схеме компоновки данных информации из двух (нескольких) наборов данных, а также передачу параметров в объектную (ссылочную) таблицу запроса. Отчет должен отражать информацию о сборке системных блоков за период с детализацией информации по номеру, дате и мастеру сборки (рис. 2.81).

Рис. 2.81. Требуемый вид отчета
Создадим новый объект конфигурации Отчет и назовем его СборкаСистемныхБлоков. Откроем конструктор схемы компоновки данных и добавим новый набор данных – запрос. Он будет назван по умолчанию НаборДанных1. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу регистра накопления СобранныеСБ. В список полей перенесем поля из этой таблицы:
Поле Регистратор нам понадобится в качестве ссылки на документ СборкаКомпьютера, который произвел движения в регистре накопления СобранныеСБ, чтобы установить связь со вторым набором данных. Перейдем на закладку Условия, раскроем таблицу СобранныеСБ и перетащим мышью поле ВидДвижения в список условий. Оставим предложенное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались данные из регистра с видом движения Приход (рис. 2.82).

Рис. 2.82. Создание условия запроса
На закладке Объединения/Псевдонимы изменим имя у поля СБ на СистемныйБлок. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Таким образом, в этом наборе данных мы получим информацию о собранных системных блоках, их количестве, стоимости, мастере, выполнившем сборку. Но нам нужна еще другая, связанная с ней более детальная информация из документов по сборке системных блоков. Есть несколько путей осуществления этой задачи, но мы будем получать эти данные из связанного набора данных.
Добавим еще один набор данных – запрос. Он будет назван НаборДанных2. Чтобы добавление стало доступным, нужно выделить корневой элемент дерева наборов данных (рис. 2.83).

Рис. 2.83. Добавление нескольких наборов данных
В качестве источника данных для запроса выберем объектную таблицу документа СборкаКомпьютера. В список полей перенесем поля из этой таблицы:
Поле Ссылка нам понадобится в качестве ссылки на регистр накопления СобранныеСБ, чтобы установить связь с первым набором данных. Нажмем ОК и вернемся в конструктор схемы компоновки данных.
С точки зрения эффективности исполнения отчета лучше получать в дочернем наборе сразу только те записи, которые удовлетворяют условию связи наборов данных. Для этого нужно указать в запросе дочернего набора параметр связи и использовать его в схеме компоновки при описании связи (см. рис. 2.84). Иначе в дочернем наборе будет получено много лишних записей, которые затем будут откидываться как не удовлетворяющие условию связи.
В текст запроса добавим условие с параметром Ссылка, в который будет помещено значение связи набора данных – источника. В результате набор данных – приемник НаборДанных2 будет получать только те документы СборкаКомпьютера, которые произвели движения в регистре накопления СобранныеСБ (листинг 2.11).
Листинг 2.11. Текст запроса для получения набора данных «НаборДанных2»
ВЫБРАТЬ
СборкаКомпьютера.Дата,
СборкаКомпьютера.Номер,
СборкаКомпьютера.Ссылка
ИЗ
Документ.СборкаКомпьютера КАК СборкаКомпьютера
ГДЕ
СборкаКомпьютера.Ссылка В (&Ссылка)
Можно было создать это условие интерактивно, в конструкторе запроса, аналогично тому, как это сделано для первого набора данных (см. рис. 2.82), но здесь продемонстрирована возможность сделать это вручную в тексте запроса.
Для большей наглядности назовем первый набор данных РегистрСБ, второй – ДокументСБ. Чтобы ввести новое имя набора данных, можно дважды щелкнуть мышью по его названию. Если в схеме компоновки данных присутствуют несколько наборов данных, то между ними требуется установить связь ().
На закладке Связи наборов данных добавим новую строку. В поле Источник связи, то есть в качестве родительского набора данных, укажем РегистрСБ, в поле Приемник связи, то есть в качестве зависимого набора данных, укажем ДокументСБ. В поле Выражение источник выберем из полей родительского набора поле Регистратор, а в поле Выражение приемник – поле зависимого набора данных – Ссылка. В поле Параметр выберем из списка параметров параметр Ссылка родительского набора данных, в котором будет храниться значение связи (рис. 2.84).

Рис. 2.84. Создание связи наборов данных
Все связи, созданные в схеме компоновки данных, считаются Левыми внешними соединениями, то есть в отчет будут включены записи из обоих наборов данных, удовлетворяющих условию связи Регистратор = Ссылка. Кроме того, у родительского набора данных РегистрСБ будут отражаться в отчете все записи, независимо от того, найден ли соответствующий им документ в наборе данных ДокументСБ или нет. Поэтому при определении связей наборов данных требуется внимательно обдумать вопрос, какой из наборов данных будет родительским, а какой – зависимым.