При разработке бухгалтерских отчетов на системе компоновки данных (СКД) часто возникает задача: отображать в шапке таблицы не обобщенное название Субконто1, а конкретный тип субконто (например, Контрагенты, Номенклатура или Статьи затрат), закрепленный за выбранным счетом бухгалтерского учета.
Разберем, почему стандартное свойство Выражение представления не работает для шапки отчета, и рассмотрим правильные варианты реализации этой задачи.
Выясним причину частой ошибки начинающих разработчиков. Свойство Выражение представления в полях набора данных СКД отвечает исключительно за отображение значений непосредственно в ячейках с данными (в строках отчета). Оно не влияет на заголовок колонки. Текст заголовка формируется платформой на основе свойств Синоним или Заголовок поля, настроек выбранных полей варианта отчета либо на основании назначенных пользовательских макетов заголовков.
Рассмотрим основной способ решения задачи через программное управление настройками компоновки данных. Данный метод применяется в процедуре ПриКомпоновкеРезультата модуля объекта отчета или в модуле формы перед началом компоновки.
Разберем по шагам логику реализации:
Субконто1 в выбранных полях настроек отчета и перезаписываем его свойство Заголовок.Посмотрим на пример программного кода в модуле объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем значение счета из настроек
СчетУчета = Неопределено;
ЭлементПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Счет");
Если ЭлементПараметра <> Неопределено И ЭлементПараметра.Использование Тогда
СчетУчета = ЭлементПараметра.Значение;
КонецЕсли;
// Если счет выбран, переопределяем заголовки полей
Если ЗначениеЗаполнено(СчетУчета) Тогда
ВидыСубконто = СчетУчета.ВидыСубконто;
Для Индекс = 1 По 3 Цикл
ИмяПоля = "Субконто" + Формат(Индекс, "ЧГ=0");
Если ВидыСубконто.Количество() >= Индекс Тогда
ИмяВидаСубконто = Строка(ВидыСубконто[Индекс - 1].ВидСубконто);
Иначе
ИмяВидаСубконто = ИмяПоля;
КонецЕсли;
// Поиск и замена заголовка в выбранных полях
Для Каждого ЭлементВыбора Из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
Если ТипЗнч(ЭлементВыбора) = Тип("ВыбранноеПолеКомпоновкиДанных")
И Строка(ЭлементВыбора.Поле) = ИмяПоля Тогда
ЭлементВыбора.Использование = Истина;
ЭлементВыбора.Заголовок = ИмяВидаСубконто;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Обратите внимание: если в настройках варианта отчета используется группировка полей через системный элемент Авто, этот элемент необходимо предварительно развернуть в реальный состав полей, либо устанавливать заголовки непосредственно в выбранных полях конкретной группировки.
Рассмотрим вариант без прямого вмешательства в структуру выбранных полей, используя механизм макетов СКД:
Субконто1.[ЗаголовокСубконто1].ПараметрыДанных.ВидСубконто1.Проанализируем ситуации, которые необходимо учитывать при разработке:
Субконто1 будет содержать значения разных видов субконто (например, для 60 счета — Контрагенты, а для 20 счета — Статьи затрат). В этом случае переименовывать общую шапку колонки некорректно, логичнее выводить субконто в строках иерархических группировок.ТипЗначения для поля набора данных, чтобы в пользовательских отборах система предлагала выбор конкретного справочника или документа, а не весь составной тип субконто.