Каталог решений - Программное изменение заголовка отчета СКД

Программное изменение заголовка отчета СКД

Программное изменение заголовка отчета СКД

В наличии

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

Категория:

Описание

Всем добрый день. Иногда бывает необходимо поменять в СКД преогромно заголовок.

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

Создадим отчет с группировкой Период и подчиненной ей группировкой Сотрудник и ресурс Начисление.

 

 

 

Также у группировки период сделаем синоним Месяц

 

Сформируем отчет

 

 

Чтобы перехватить программное заполнение заголовка, нужно в модуле отчета создать процедуру. ПриКомпоновкеРезультата.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
КонецПроцедуры

И заполнить ее стандартным образом (если ее так не заполнять, то будет выполняться то же самое, но если мы ее заполним, то у нас появится возможность перехватывать обработку данных на любом этапе, в этом смысл ее заполнения)

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
	ЭлементыНастроек = Настройки.Выбор.Элементы;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать( МакетКомпоновки, , ДанныеРасшифровки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

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

	ЭлементыНастроек = Настройки.Выбор.Элементы;

		Для Каждого Элемент Из ЭлементыНастроек Цикл		
			Если Строка(Элемент.Поле) = "Период" Тогда
				Элемент.Заголовок = "Дата"
			КонецЕсли; 
		КонецЦикла;
	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

Результат теперь будет выглядеть так:

 

 

Как видим, у группировки Периода заголовок Месяц поменялся на заголовок Дата.

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

 Совсем пустым СКД сделать ее не даст, но программным образом это можно сделать.

	ЭлементыНастроек = Настройки.Выбор.Элементы;

	Для Каждого Элемент Из ЭлементыНастроек Цикл
		Если Строка(Элемент.Поле) = "Период" Тогда
			Элемент.Заголовок = " "
		КонецЕсли; 
	КонецЦикла;
	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

То есть делаем то же самое, но в заголовке пишем пробел.

Сформируем отчет

 

 

Теперь видим, что  у группировки Периода заголовок Месяц поменялся на пустой заголовок.

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

Если Строка(Элемент.Поле) = "Период" Тогда

Но это не совсем правильный способ.  Для более корректного способа нужно создать новую переменную:

	ПараметрКомпоновкиДанныхПериод = Новый ПолеКомпоновкиДанных("Период");

	Для Каждого Элемент Из ЭлементыНастроек Цикл		
		Если Элемент.Поле = ПараметрКомпоновкиДанныхПериод Тогда
			Элемент.Заголовок = " "
		КонецЕсли; 
	КонецЦикла;

 

Конечный код будет выглядит так:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
	ЭлементыНастроек = Настройки.Выбор.Элементы;
	ПараметрКомпоновкиДанныхПериод = Новый ПолеКомпоновкиДанных("Период");

	Для Каждого Элемент Из ЭлементыНастроек Цикл
		
		Если Элемент.Поле = ПараметрКомпоновкиДанныхПериод Тогда
			Элемент.Заголовок = " "
		КонецЕсли; 
		
	КонецЦикла;
	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать( МакетКомпоновки, , ДанныеРасшифровки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

 

has been added to your cart:
Оформление заказа