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

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

При разработке отчетов в Системе компоновки данных (СКД) часто возникает задача вывести документы различных типов (например, ПриходОтПоставщика и ОтгрузкаПокупателю) в единой колонке, чтобы сформировать общий реестр или хронологический список операций.

Начинающие разработчики часто пытаются решить эту задачу путем соединения таблиц с использованием условий ВЫБОР КОГДА ... ЕСТЬ NULL или добавлением отдельных полей для каждого документа. Однако такие подходы приводят либо к дублированию колонок в настройках структуры отчета, либо к некорректному заполнению данных. Рассмотрим, как правильно объединить документы разных типов в одном поле СКД и каких подводных камней следует избегать.

Причина проблемы и правильный подход

Если в схеме компоновки данных добавить поля ссылок из разных таблиц как отдельные реквизиты набора данных, платформа 1С воспринимает их как независимые поля. В настройках структуры отчета они будут отображаться как разные группировки или колонки (например, Ссылка и Ссылка1).

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

Пример запроса для объединения документов разных типов

Проанализируем пример запроса, с помощью которого документы поступления и реализации объединяются в единый набор данных с сохранением общих суммовых показателей и аналитики:


ВЫБРАТЬ
	ОтгрузкаПокупателюТЧ.Ссылка КАК Документ,
	СУММА(ОтгрузкаПокупателюТЧ.НДС) КАК НДС,
	ОтгрузкаПокупателюТЧ.СтавкаНДС КАК СтавкаНДС
ПОМЕСТИТЬ ВТ_Данные
ИЗ
	Документ.ОтгрузкаПокупателю.ТЧ КАК ОтгрузкаПокупателюТЧ
СГРУППИРОВАТЬ ПО
	ОтгрузкаПокупателюТЧ.Ссылка,
	ОтгрузкаПокупателюТЧ.СтавкаНДС

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

ВЫБРАТЬ
	ПриходОтПоставщикаТЧ.Ссылка,
	СУММА(ПриходОтПоставщикаТЧ.НДС),
	ПриходОтПоставщикаТЧ.СтавкаНДС
ИЗ
	Документ.ПриходОтПоставщика.ТЧ КАК ПриходОтПоставщикаТЧ
СГРУППИРОВАТЬ ПО
	ПриходОтПоставщикаТЧ.Ссылка,
	ПриходОтПоставщикаТЧ.СтавкаНДС
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_Данные.Документ КАК Документ,
	ВТ_Данные.НДС КАК НДС,
	ВТ_Данные.СтавкаНДС КАК СтавкаНДС
ИЗ
	ВТ_Данные КАК ВТ_Данные

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

Особенности работы с составными полями в СКД

При использовании составных полей в СКД следует учитывать несколько технических нюансов, влияющих на производительность и внешний вид отчета:

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

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

← На главную