Получить консультацию

Как в отчете на СКД сделать нумерацию колонок?

Иногда по заданию необходимо сделать нумерацию колонок отчета. Если отчет с фиксированной структурой колонок, нумерацию можно сделать при помощи макета заголовка. Но как быть, если структура колонок будет динамически меняться в зависимости от выбранных полей? В этом случае нумерацию можно сделать в обработчике ПриКомпоновкеРезультата при программном формировании отчета.  О том, как сформировать отчет программно, можно прочитать по ссылке, мы же рассмотрим сам фрагмент кода нумерации колонок.

Сперва мы определяем, есть ли фиксация сверху, а также количество строк шапки. Переменной ВысотаШапки можно присвоить Неопределено, либо, если в отчете фиксации строк сверху нет, можно как-то еще вычислить нужную высоту шапки – например, давать пользователю указывать ее в параметре, рассчитывать динамически по каким-то критериям, или вовсе прописать в коде жестко.

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

ФиксацияСверху = ДокументРезультат.ФиксацияСверху;
КоличествоСтрокШапки = ?(ВысотаШапки = Неопределено, ФиксацияСверху, ВысотаШапки);
Если КоличествоСтрокШапки = 0 Тогда
	Возврат;
КонецЕсли;      
КоличествоКолонок = ДокументРезультат.ШиринаТаблицы;
ИсходнаяОбласть = ДокументРезультат.Область(КоличествоСтрокШапки,, КоличествоСтрокШапки);
ОбластьПриемник = ДокументРезультат.Область(КоличествоСтрокШапки + 1,, КоличествоСтрокШапки + 1);
ДокументРезультат.ВставитьОбласть(ИсходнаяОбласть, ОбластьПриемник, ТипСмещенияТабличногоДокумента.ПоГоризонтали);

Для НомерКолонки = 1 По КоличествоКолонок Цикл
	ТекОбласть = ДокументРезультат.Область(КоличествоСтрокШапки + 1, НомерКолонки);
	ЗаполнитьЗначенияСвойств(ТекОбласть,ДокументРезультат.Область(КоличествоСтрокШапки, НомерКолонки));
	ТекОбласть.Текст = Формат(НомерКолонки, "ЧГ=");
	ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
	ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;

Если ФиксацияСверху > 0 Тогда
	ДокументРезультат.ФиксацияСверху = ФиксацияСверху + 1;
КонецЕсли;

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

17 − один =

К НАЧАЛУ