Почему не работает расшифровка по полю субконто в отчете СКД и как это исправить?

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

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

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

Причины возникновения проблемы

Проанализируем ситуация с технической стороны. Поля Субконто1, Субконто2 и далее в виртуальных таблицах регистров бухгалтерии имеют составной тип данных, базирующийся на плане видов характеристик (ПВХ ВидыСубконтоХозрасчетные). Из-за этого платформа 1С при автоматическом формировании схемы компоновки данных сталкивается с ограничениями:

  1. Составной тип данных: Платформа не может однозначно сопоставить значение ячейки с конкретным типом объекта метаданных. В результате механизму расшифровки «неизвестно», какую именно форму объекта или списков нужно открыть при клике.
  2. Особенности автозаполнения СКД: Даже если в тексте запроса попытаться применить функцию ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Подразделения), включенный механизм автозаполнения схемы СКД может сбросить уточнение типа и вернуть полю исходный составной тип виртуальной таблицы.

Рассмотрим пример запроса, при котором возникает подобное поведение:


ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет.СтатьиЗатрат КАК СтатьяЗатрат,
	ХозрасчетныйОбороты.Субконто1 КАК Подразделение,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.Регистратор КАК Регистратор,
	ХозрасчетныйОбороты.ПериодМесяц КАК ПериодМесяц
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Авто, Счет.Ссылка В ИЕРАРХИИ (&Сч), , , , ) КАК ХозрасчетныйОбороты

Основное решение: уточнение типа значения на вкладке «Наборы данных»

Самый простой и эффективный способ вернуть расшифровку для поля субконто — указать тип значения непосредственно в конструкторе схемы компоновки данных, не меняя сам запрос.

Разберем процесс настройки по шагам:

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

После указания точного типа платформа сможет однозначно идентифицировать ссылки, и стандартная расшифровка СКД начнет функционировать штатно.

Альтернативные способы решения

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

Способ 1: Явное левое соединение в запросе

Вместо использования поля Субконто1 напрямую из виртуальной таблицы, соединим ее с нужным справочником по условию равенства ссылок:


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

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

Способ 2: Отключение автозаполнения набора данных

Если требуется сохранить гибкость запроса, можно отключить флажок «Автозаполнение» на вкладке «Наборы данных». В этом случае все поля отчета, их типы и роли описываются разработчиком вручную. Это исключает переопределение типов алгоритмами платформы.

Способ 3: Программная обработка события «ОбработкаРасшифровки»

В случаях, когда отчет формируется на управляемой форме и требуется нестандартное поведение при клике (например, открытие подчиненного отчета с передачей параметров), используем событие ОбработкаРасшифровки элемента ТабличныйДокумент.

Выясним, как перехватить клик программно:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОбработкаРасшифровкиНаСервере(Расшифровка);
	
КонецПроцедуры

Ограничения платформы и важные нюансы

Критически важно учитывать: если поле субконто на разных счетах может принимать значения разных типов (например, на одном счету это «Подразделения», а на другом — «Контрагенты»), жесткое ограничение типа поля в СКД до одного конкретного справочника приведет к тому, что значения других типов будут выводиться как пустые значения (NULL).

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

← На главную