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