Как объединить данные из двух разных документов в одном отчете 1С?

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

Часто при разработке отчетов в 1С перед разработчиком встает задача вывести данные, которые хранятся в разных документах, в рамках одного общего списка или сводной таблицы. Попытки просто «сложить» результаты запросов или использовать арифметические операции к объектам 1С приводят к ошибкам. Давайте разберем, как правильно организовать такой отчет.

Почему возникают ошибки при объединении данных?

В языке запросов 1С попытка написать Документ1.Ссылка + Документ2.Ссылка является грубой ошибкой. Запрос — это инструмент выборки данных из базы, он работает с типами данных и структурами таблиц. Объекты 1С (ссылки на документы) нельзя складывать математически, как числа. Более того, если вы просто перечислите две таблицы в блоке ИЗ, платформа создаст так называемое «декартово произведение», что приведет к неверным цифрам и многократному дублированию строк.

Решение: использование оператора ОБЪЕДИНИТЬ ВСЕ

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

Разберем по шагам, как подготовить такой запрос:

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

Пример корректного запроса

Рассмотрим, как должен выглядеть программный код построения такого запроса. Мы берем нужные поля из табличных частей обоих документов и приводим их к общему знаменателю:


ВЫБРАТЬ
    ПрочиеРасходыТЧ.Ссылка КАК Регистратор,
    ПрочиеРасходыТЧ.Заметка КАК Комментарий,
    ПрочиеРасходыТЧ.Сумма КАК СуммаРасход
ИЗ
    Документ.ПрочиеРасходы.ТЧ КАК ПрочиеРасходыТЧ

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

ВЫБРАТЬ
    ЗарплатаТЧ.Ссылка КАК Регистратор,
    ЗарплатаТЧ.Заметка КАК Комментарий,
    ЗарплатаТЧ.Сумма КАК СуммаРасход
ИЗ
    Документ.Зарплата.ТЧ КАК ЗарплатаТЧ

Важные правила при использовании объединений

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

Альтернативный подход: работа с регистрами

Если ваши документы делают движения по одному и тому же регистру накопления (например, «Касса»), зачастую проще и эффективнее вообще не обращаться к табличным частям документов напрямую. Вы можете сделать запрос к виртуальной таблице регистра:


ВЫБРАТЬ
    КассаДвижения.Регистратор,
    КассаДвижения.СуммаРасход
ИЗ
    РегистрНакопления.Касса.Обороты(&ДатаНачала, &ДатаКонца) КАК КассаДвижения

В этом случае платформа сама объединит все движения документов в рамках периода, что избавит вас от необходимости вручную прописывать ОБЪЕДИНИТЬ ВСЕ для каждого нового вида документа. Использование ВЫРАЗИТЬ(Регистратор КАК Документ.ИмяДокумента) позволит вам получать доступ к специфичным реквизитам документов, если это потребуется в процессе формирования отчета.

Используйте этот метод, и ваш код станет чище, а работа с отчетами — надежнее!

← На главную