Свести два отчёта 1С в один: СКД, запрос и табличный документ

· 9 мин

Содержание

Объединить два отчёта в 1С можно тремя путями: собрать оба набора данных в одной схеме компоновки (СКД), склеить их запросом с ОБЪЕДИНИТЬ ВСЕ в обработке или внешнем отчёте либо вывести результаты друг за другом в один табличный документ и выгрузить в Excel. Выбор зависит от того, нужны ли итоги и группировки или достаточно просто свести строки в одну таблицу.

Частая ошибка — пытаться «слить» два готовых отчёта на уровне печатных форм, копируя ячейки вручную. При любом изменении периода или фильтра всё приходится делать заново. Правильнее объединять данные на уровне источника: тогда сводный отчёт пересобирается одной кнопкой.

Разберём каждый способ по шагам, когда он уместен, и как поставить формирование сводного отчёта на автомат.

Что именно вы объединяете: строки или колонки

Перед тем как лезть в конструктор, уточните задачу. От этого зависит механизм.

Возможны два принципиально разных случая:

  • 🔗 Склейка строк (по вертикали). Отчёты однотипные: одинаковый состав колонок, но разные источники. Например, продажи по одному складу и по другому, или приход и расход в одной ведомости. Строки одного подставляются под строки другого.
  • 🧩 Склейка по ключу (по горизонтали). Отчёты показывают разные показатели по одному и тому же объекту. Например, план по номенклатуре из одного регистра и факт из другого. Здесь строки сопоставляются по общему полю (номенклатура, контрагент, период), а колонки показателей идут рядом.

Определите это до начала работы: от выбора зависит, нужен вам ОБЪЕДИНИТЬ или связь (соединение) по ключу.

Простой пример. Нужен отчёт «приход и расход по контрагентам». Приход и расход — это однотипные строки (контрагент, сумма) из разных регистров, их склеивают по вертикали. А вот отчёт «план продаж и фактические продажи по номенклатуре» — это разные показатели по одному объекту, их сопоставляют по ключу «номенклатура» и ставят в соседние колонки.

Заодно проверьте совместимость источников:

  1. Совпадают ли типы ключевых полей. Если в одном отчёте контрагент — это ссылка, а в другом строка с наименованием, сопоставление по ключу не сработает без приведения типов.
  2. Одинаков ли период и единицы измерения. Суммы в рублях и в валюте нельзя складывать без пересчёта.
  3. Нет ли задвоения. Если оба источника уже содержат одни и те же движения, итог завысится вдвое.

Объединение двух отчётов через СКД

Это основной способ для штатных отчётов. Один отчёт на СКД умеет тянуть данные сразу из нескольких запросов и показывать их в общих группировках.

На вкладке Наборы данных схемы компоновки доступны три типа набора: «Запрос», «Объект» и «Объединение». Для склейки строк нужен именно набор-объединение.

Порядок действий:

  1. Откройте схему компоновки данных внешнего отчёта в конфигураторе (или в режиме «1С:Предприятие», если отчёт настраивается там).
  2. На вкладке Наборы данных добавьте набор типа Объединение.
  3. Внутрь него вложите два набора-запроса — по одному на каждый исходный отчёт.
  4. Проследите, чтобы имена полей (псевдонимы) совпадали. Поля с одинаковым именем сольются в одну колонку; поля, которых нет во втором запросе, заполнятся пустыми значениями.

Если в одном наборе поле называется Сумма, а в другом СуммаДокумента, в объединённой таблице будут две разные колонки. Приведите псевдонимы к одному имени через КАК.

Чтобы различать источник строки, добавьте в каждый запрос поле-признак:

ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    Продажи.СуммаОборот КАК Сумма,
    "Продажи" КАК Источник
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

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

ВЫБРАТЬ
    Закупки.Контрагент,
    Закупки.СуммаОборот,
    "Закупки"
ИЗ
    РегистрНакопления.Закупки.Обороты КАК Закупки

Поле Источник затем выносится в группировку или в отбор — так в одном отчёте видно и то, и другое, с возможностью свернуть по источнику.

Если же нужна склейка по ключу (план и факт рядом), объединение не подходит. Делайте два отдельных набора-запроса и свяжите их на вкладке Связи наборов данных: укажите источник, приёмник и поле связи. Это аналог левого соединения — у приёмника могут появиться пустые значения там, где нет пары.

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

Запрос с ОБЪЕДИНИТЬ ВСЕ в обработке или внешнем отчёте

Когда данные нужно не просто показать, а обработать — переложить в таблицу значений, пересчитать, выгрузить — удобнее собрать всё одним запросом в модуле.

Способ подходит для внешних обработок и для отчётов без СКД, где результат строится кодом.

Базовый приём — временные таблицы и ОБЪЕДИНИТЬ ВСЕ в финальной выборке:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура КАК Номенклатура,
|    Количество КАК План,
|    0 КАК Факт
|ПОМЕСТИТЬ ВседанныеПлан
|ИЗ
|    РегистрСведений.ПланПродаж КАК ПланПродаж
|;
|ВЫБРАТЬ
|    ПродажиОбороты.Номенклатура,
|    0,
|    ПродажиОбороты.КоличествоОборот
|ИЗ
|    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты";

Чтобы показатели встали рядом по номенклатуре, оберните объединение во внешний запрос с группировкой:

"ВЫБРАТЬ
|    Данные.Номенклатура КАК Номенклатура,
|    СУММА(Данные.План) КАК План,
|    СУММА(Данные.Факт) КАК Факт
|ИЗ
|    (ВЫБРАТЬ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ...) КАК Данные
|СГРУППИРОВАТЬ ПО
|    Данные.Номенклатура"

Дальше результат выгружается в таблицу значений и обрабатывается как обычно:

РезультатЗапроса = Запрос.Выполнить();
ТаблицаИтог = РезультатЗапроса.Выгрузить();

Если один источник — это документ или объект метаданных, а не регистр, добавьте его как набор типа «Объект» или выгрузите в таблицу значений заранее и передайте в запрос через ПоместитьВременнуюТаблицу менеджера временных таблиц.

Бывает, что данные двух отчётов в один запрос свести нельзя: разные базы, разные механизмы, часть приходит из внешнего файла. Тогда объединяют две готовые таблицы значений по ключу уже в коде.

Логика такая: у первой таблицы добавляете колонки для показателей второй, затем по каждой строке ищете пару во второй таблице методом Найти по ключевому полю и переносите значения. Строки второй таблицы, которым не нашлось пары в первой, добавляете в конец. Так вы получаете горизонтальную склейку (план и факт рядом) там, где единый запрос невозможен.

Внешний отчёт или обработку затем подключают к базе в разделе Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Это штатный механизм типовых конфигураций на управляемых формах — он не требует снимать базу с поддержки.

Сведение двух отчётов в одном табличном документе

Иногда перестраивать источники нельзя или некогда, а два готовых отчёта нужно показать на одном листе и отдать в Excel. Тогда работают на уровне табличного документа.

У табличного документа есть два метода склейки:

  • Вывести() — добавляет область снизу, под уже выведенным. Так отчёты встают один под другим.
  • Присоединить() — добавляет область справа, в те же строки. Так отчёты встают рядом по горизонтали.

Простейший вариант — сформировать оба отчёта в свои табличные документы, а потом слить в третий:

ИтоговыйДокумент = Новый ТабличныйДокумент;
ИтоговыйДокумент.Вывести(ПервыйОтчёт.ПолучитьОбласть());
ИтоговыйДокумент.Вывести(ВторойОтчёт.ПолучитьОбласть());

Для вывода рядом в тех же строках используйте Присоединить() вместо второго Вывести().

Готовый документ сразу выгружается в файл для аналитики:

ИтоговыйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);

Пользователь может сделать то же вручную: сформировать первый отчёт, затем через Файл → Сохранить как выгрузить в .xlsx, повторить со вторым и свести листы в Excel. Но это ровно та ручная склейка, от которой мы уходим: при смене периода всё повторяется заново.

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

Какой способ выбрать под вашу задачу

Три механизма закрывают разные ситуации. Коротко — по тому, что на выходе.

СпособКогда подходитЧто на выходеСложность
СКД (объединение/связи)Штатный отчёт, нужны группировки и итогиИнтерактивный отчёт с настройкамиСредняя
Запрос в обработкеДанные надо пересчитать или выгрузитьТаблица значений под дальнейшую логикуВысокая
Табличный документДва готовых отчёта свести на один листГотовая печатная форма, ExcelНизкая
Какой способ объединения выбрать?

Ошибки при консолидации отчётов

Здесь собраны только проблемы, специфичные для объединения, — не повтор шагов выше.

🔸 Задвоение сумм. Самая частая. Возникает, когда оба источника уже включают пересекающиеся движения, либо когда при связи наборов данных одной строке приёмника соответствует несколько строк источника. Проверяйте: сумма сводного отчёта должна равняться сумме двух исходных по отдельности.

🔸 Разъехавшиеся колонки в объединении. Если псевдонимы полей в двух запросах не совпали, данные встают в разные колонки, а не в одну. Внешне отчёт «теряет» половину сумм. Лечится приведением имён через КАК.

🔸 Несовпадение типов в связи. Связь по полю, где в одном наборе ссылка, а в другом строка, молча даёт пустой результат — пары просто не находятся. Приводите ключи к одному типу в запросе.

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

🔸 Двойные итоги в табличном документе. Склейка печатных форм переносит и строки «Итого» из каждого отчёта. Общего итога при этом не считается — он только визуально «складывается» в голове у читателя.

🔸 Разные периоды и валюты. Складывать показатели за разные периоды или в разных валютах без явного приведения нельзя — итог получится бессмысленным.

Автоматизация и формирование по расписанию

Если сводный отчёт нужен регулярно, настройте его формирование без ручного запуска.

Для внешнего отчёта или обработки, собирающей данные кодом, подойдёт регламентное задание. Процедуру формирования выносят в общий модуль, а задание запускает её по расписанию на сервере. Готовый табличный документ при этом сохраняют в файл или вкладывают в письмо.

В типовых конфигурациях на БСП есть штатная рассылка отчётов. Путь обычно: Администрирование → Печатные формы, отчёты и обработки → Рассылки отчётов (название пункта может немного отличаться в разных релизах). В рассылку добавляют один или несколько отчётов, задают получателей, формат вложения (.xlsx, .pdf, .mxl) и расписание — ежедневно, по дням недели, по месяцам.

Порядок настройки рассылки:

  1. Создайте новую рассылку и добавьте в неё сводный отчёт (внешний отчёт предварительно подключается как дополнительный).
  2. Укажите получателей — пользователей или контактные адреса.
  3. Выберите формат вложения и способ доставки: письмо, каталог на диске или сетевой ресурс.
  4. Задайте расписание и включите рассылку.

Регламентное задание и рассылка выполняются на сервере под фоновым сеансом. Проверьте, что у этого сеанса достаточно прав на все объекты обоих отчётов, иначе часть данных вернётся пустой без видимой ошибки.

Проверка перед запуском сводного отчёта на автомат
Выполнено: 0 / 6

Частые вопросы

Можно ли объединить отчёт на СКД и обычный отчёт без схемы компоновки?
Напрямую — нет, это разные механизмы. Приведите оба к одному: либо перенесите источник второго отчёта в набор данных СКД, либо соберите оба запросом в обработке и постройте результат кодом.
Чем объединение наборов данных отличается от связи наборов?
Объединение ставит строки одного под строки другого (склейка по вертикали, аналог ОБЪЕДИНИТЬ ВСЕ). Связь сопоставляет строки по общему полю и ставит показатели рядом (склейка по горизонтали, аналог соединения).
Почему после объединения часть сумм пропала?
Чаще всего не совпали псевдонимы полей: одноимённые поля сливаются в колонку, разноимённые — расходятся по разным. Приведите имена через КАК в обоих запросах.
Как вывести два отчёта рядом, а не один под другим?
В табличном документе используйте Присоединить() вместо Вывести() — область добавится справа, в те же строки.
Нужно ли снимать конфигурацию с поддержки, чтобы сделать сводный отчёт?
Нет. Внешний отчёт или обработка подключаются через раздел дополнительных отчётов и обработок без изменения типовой конфигурации.