Раскраска заголовков вертикальных ресурсов в СКД
Как покрасить заголовки ресурсов, расположенных вертикально? Предложенный вариант решает эту проблему
- Описание
- Подробнее
Описание
Когда мне поручили создать отчет, в котором виды выплат по каждому сотруднику будут располагаться вертикально, а периоды (месяцы) горизонтально, то проблема решилась достаточно быстро длягодаря Infostart и серому веществу ;).
Но когда мне поручили раскрасить строки в разные цвета, я изрядно поломал голову и, в итоге, уперся в стену. ячейки с ресурсами красились успешно, а их горизонтальные заголовки — ни в какую! Чего только не перепробовал, вспомнить страшно.
Но всё решилось банально просто — постобработкой табличного документа. Вначале формируется документ на основе СКД, а потом меняется цвет нужных ячеек по их содержимому. Можно задавать оригинальное форматирование, а можно брать из соседней правой ячейки с ресурсом.
ДокументРезультат=ЭлементыФормы.Результат;
ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
ЭлементРезультата=ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата=Неопределено Тогда
Прервать;
Иначе
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
МассивЦвета = Новый Массив();
МассивЦвета.Добавить(«Уровень начисленный»);
МассивЦвета.Добавить(«Всего нач с учетом компенсаций»);
МассивЦвета.Добавить(«Всего начислено»);
МассивЦвета.Добавить(«Уровень на руки»);
МассивЦвета.Добавить(«На руки с учетом компенсаций»);
МассивЦвета.Добавить(«На руки со всех видов начислений»);
МассивЦвета.Добавить(«НДФЛ со всех видов начислений»);
Для каждого Элемент Из МассивЦвета Цикл
НайденнаяОбласть = ДокументРезультат.НайтиТекст(Элемент);
Пока НайденнаяОбласть <> Неопределено Цикл
СоседняяЯчейка = ДокументРезультат.Область(НайденнаяОбласть.Верх, НайденнаяОбласть.Право + 1, НайденнаяОбласть.Низ, НайденнаяОбласть.Право + 1);
НайденнаяОбласть.ЦветФона = СоседняяЯчейка.ЦветФона; //Цвет;
НайденнаяОбласть.Шрифт = СоседняяЯчейка.Шрифт; //Цвет;
НайденнаяОбласть = ДокументРезультат.НайтиТекст(Элемент, НайденнаяОбласть);
КонецЦикла;
КонецЦикла;
Приведенный код требует правки каждый раз, когда меняется наименование заголовка ресурса в СКД.
Если у кого-то данная задача имеет более изящное решение, буду рад увидеть Ваш вариант.
