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

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

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

Почему возникает сложность?

Главная проблема при попытке собрать данные из нескольких табличных частей в одном запросе — это возникновение декартова произведения. Если вы соедините две таблицы ТЧ1 и ТЧ2 через ЛЕВОЕ СОЕДИНЕНИЕ по ссылке документа, строки первой таблицы начнут дублироваться для каждой строки второй. В итоге вы получите неверные суммы и «раздутый» отчет. Чтобы этого избежать, мы рассмотрим архитектурно верные способы решения.

Способ 1: Использование нескольких наборов данных

Этот метод является наиболее правильным с точки зрения архитектуры СКД. Мы не пытаемся «схлопнуть» все в один запрос, а работаем с данными раздельно.

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

Способ 2: Объединение запросов (UNION ALL)

Если структура обеих табличных частей схожа (например, обе содержат номенклатуру, количество и цену), их можно объединить в один набор.

Для этого мы используем конструкцию ОБЪЕДИНИТЬ ВСЕ. Важным моментом здесь является добавление «искусственного» поля, которое поможет нам в настройках отчета разделить выводимые данные.


ВЫБРАТЬ
    "Товары" КАК ТипСтроки,
    ТЧ_Товары.Номенклатура КАК Номенклатура,
    ТЧ_Товары.Количество КАК Количество
ИЗ
    Документ.НашДокумент.Товары КАК ТЧ_Товары
ГДЕ
    ТЧ_Товары.Ссылка = &Ссылка

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

ВЫБРАТЬ
    "Услуги" КАК ТипСтроки,
    ТЧ_Услуги.Номенклатура КАК Номенклатура,
    ТЧ_Услуги.Количество КАК Количество
ИЗ
    Документ.НашДокумент.Услуги КАК ТЧ_Услуги
ГДЕ
    ТЧ_Услуги.Ссылка = &Ссылка

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

Способ 3: Использование вложенных отчетов

Этот способ максимально удобен для создания печатных форм, так как он дает полный контроль над визуальным оформлением каждой таблицы.

  1. Создайте основной отчет, который выводит только «шапку» документа.
  2. В структуре отчета добавьте два Вложенных отчета.
  3. Для каждого вложенного отчета настройте свой отдельный запрос к нужной табличной части.
  4. Настройте передачу параметра Ссылка из основного отчета во вложенные, чтобы данные фильтровались по текущему документу.

Советы по сохранению в Excel

Поскольку цель — получение печатной формы с последующим сохранением в Excel, важно уделить внимание верстке макета в СКД:

Подводя итог, помните, что в СКД мы не «рисуем» макет в привычном понимании, а описываем логику получения данных. Если вы используете подход с вложенными отчетами, вы получите максимально гибкий инструмент, который позволит вам печатать любые документы, независимо от количества и сложности их табличных частей.

← На главную