Как вывести две табличные части документа друг под другом в СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывести данные из двух разных табличных частей одного документа (например, Товары и Услуги) в один отчет так, чтобы они располагались последовательно — одна под другой, и имела каждая таблица собственную шапку и состав колонок.

Рассмотрим подробно варианты построения наборов данных и пошаговую настройку структуры отчета в схеме компоновки данных.

Архитектура набора данных: два основных подхода

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

Существует два корректных способа получения данных из двух табличных частей:

  1. Объединение таблиц в одном запросе (ОБЪЕДИНИТЬ ВСЕ) — данные выбираются одним набором данных-запросом, где строки первой и второй ТЧ объединяются, а для идентификации источника добавляется специальное поле-разделитель.
  2. Использование двух независимых наборов данных — в схеме создаются два отдельных набора данных типа Набор данных - запрос. Первый выбирает первую ТЧ, второй — вторую ТЧ. Связи между наборами данных не устанавливаются.

Вариант 1. Единый набор данных-запрос с разделяющим полем

Проанализируем пример запроса, когда данные объединяются в один набор. Чтобы строки табличных частей не смешивались, в запрос добавляется синтетическое поле (например, ИмяТЧ или признак ЭтоТЧ1), а отсутствующие в конкретной ТЧ колонки заполняются значением NULL.


ВЫБРАТЬ
    ДокументПродажа.Ссылка КАК Ссылка,
    1 КАК НомерТЧ,
    ДокументТовары.Номенклатура КАК Номенклатура,
    ДокументТовары.Количество КАК Количество,
    ДокументТовары.Сумма КАК Сумма,
    NULL КАК СодержаниеУслуги
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК ДокументТовары
ГДЕ
    ДокументТовары.Ссылка = &СсылкаДокумента

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДокументУслуги.Ссылка КАК Ссылка,
    2 КАК НомерТЧ,
    NULL КАК Номенклатура,
    ДокументУслуги.Количество КАК Количество,
    ДокументУслуги.Сумма КАК Сумма,
    ДокументУслуги.Содержание КАК СодержаниеУслуги
ИЗ
    Документ.РеализацияТоваровУслуг.Услуги КАК ДокументУслуги
ГДЕ
    ДокументУслуги.Ссылка = &СсылкаДокумента

Вариант 2. Два независимых набора данных

Если состав полей двух табличных частей существенно различается, проще создать в схеме два отдельных набора данных-запроса:

  1. НаборДанныхТовары — выбирает поля из ТЧ Товары.
  2. НаборДанныхУслуги — выбирает поля из ТЧ Услуги.

В этом случае нет необходимости приводить типы или использовать NULL. В настройках структуры СКД каждая группировка связывается со своим набором данных с помощью свойства Имя набора данных.

Критическая ошибка: избегаем соединения табличных частей

Категорически нельзя связывать две табличные части одного документа через ЛЕВОЕ СОЕДИНЕНИЕ или ПОЛНОЕ СОЕДИНЕНИЕ по полю Ссылка. Такое соединение приводит к декартову произведению (перемножению строк), в результате чего суммы и количества дублируются, а итоги вычисляются некорректно.

Настройка структуры отчета в СКД по шагам

Выясним, как настроить отображение двух таблиц друг под другом в конструкторе СКД.

  1. Перейдем на последнюю вкладку — Настройки.
  2. В дереве Структура нажмем правой кнопкой мыши на корневой элемент Отчет и в контекстном меню выберем элемент Добавить таблицу (или Добавить группировку).
  3. Повторим действие и добавим вторую таблицу (или группировку) так, чтобы в корне элемента Отчет находились два элемента одного уровня, расположенные друг под другом.
  4. Если используется единый набор данных с разделителем, добавим в первую группировку отбор по полю НомерТЧ = 1, а во вторую — НомерТЧ = 2.
  5. Если используются два отдельных набора данных, открываем свойства каждой группировки и в поле Имя набора данных указываем соответствующий набор.

Настройка индивидуальных шапок и колонок

Чтобы у каждой табличной части выводился свой набор колонок и собственное наименование шапки, выполним следующие настройки:

  1. Для каждой из двух группировок перейдем на вкладку Выбранные поля в нижней части окна настроек.
  2. Снимем флаг Авто и укажем только те поля, которые должны отображаться в данной табличной части.
  3. Для вывода заголовков над каждой таблицей откроем вкладку Параметры вывода конкретной группировки.
  4. Установим параметр Выводить заголовок в значение Выводить, а в свойстве Заголовок введем требуемый текст (например, «Список товаров» и «Оказанные услуги»).

Особенности вычисления ресурсов и верстки

При оформлении двух таблиц в одном отчете обратим внимание на два важных нюанса:

  1. Расчет итогов: На вкладке Ресурсы для полей Сумма или Количество в колонке Рассчитывать по... укажем конкретные группировки. Это исключит случайное сложение итогов первой и второй ТЧ в общем итоге отчета.
  2. Ширина столбцов: При выводе двух таблиц друг под другом платформа по умолчанию выравнивает ширину колонок второй таблицы по первой. Если требуется независимая ширина колонок, зададим настройки формата и ширины на вкладке Условное оформление для каждого поля каждой группировки отдельно.
← На главную