Как в отчете СКД динамически менять заголовок колонки Субконто в зависимости от счета?

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

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

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

Почему не работает Выражение представления

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

Способ 1. Программное изменение заголовков выбранных полей в СКД

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

Разберем по шагам логику реализации:

  1. Получаем значение счета из параметров или отборов компоновщика настроек.
  2. Определяем виды субконто, привязанные к этому счету.
  3. Находим поле Субконто1 в выбранных полях настроек отчета и перезаписываем его свойство Заголовок.

Посмотрим на пример программного кода в модуле объекта отчета:


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

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

Способ 2. Использование пользовательских макетов на вкладке Макеты

Рассмотрим вариант без прямого вмешательства в структуру выбранных полей, используя механизм макетов СКД:

  1. В схеме компоновки данных переходим на вкладку Макеты.
  2. Нажимаем кнопку добавления макета и выбираем Добавить макет заголовка поля для поля Субконто1.
  3. В созданной ячейке макета устанавливаем тип заполнения Параметр или Шаблон, например: [ЗаголовокСубконто1].
  4. В таблице параметров макета для созданного параметра сопоставляем выражение, получаемое из параметра данных: ПараметрыДанных.ВидСубконто1.
  5. При открытии формы или изменении счета на форме программно передаем строковое представление вида субконто в параметр данных отчета.

Важные ограничения и нюансы

Проанализируем ситуации, которые необходимо учитывать при разработке:

  1. Несколько счетов в отчете: если отчет формируется без жесткого отбора по одному счету (или по группе разнородных счетов), колонка Субконто1 будет содержать значения разных видов субконто (например, для 60 счета — Контрагенты, а для 20 счета — Статьи затрат). В этом случае переименовывать общую шапку колонки некорректно, логичнее выводить субконто в строках иерархических группировок.
  2. Типизация полей отбора: при программном изменении схемы компоновки данных рекомендуется также корректировать свойство ТипЗначения для поля набора данных, чтобы в пользовательских отборах система предлагала выбор конкретного справочника или документа, а не весь составной тип субконто.
← На главную