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