gifts2017

Раскраска строк в СКД

Опубликовал Дмитрий Бондарев (Daringer) в раздел Программирование - Практика программирования

Если вы выводите в отчет какой-либо элемент справочника, который хранит цвет, то можете раскрасить строки отчета в соответствии с этим цветом.
Тестировалось на платформе 8.3.6, управляемые формы.

Итак, если у вас есть отчет, в котором вы выводите какие то данные, которые в своем составе имеют поле справочника или документа, хранящее цвет, и желаете оформить выводимую строку в соответствии с этим цветом, то я расскажу, как это сделать.

Для этого нам нужно переопределить стандартное построение отчета в процедуре ПриКомпоновкеРезультата. Смысл процедуры в том, что нужно программно добавить условные оформления для каждого элемента справочника, хранящего цвет. В данном примере это справочник СостоянияЗаказовПокупателей

 

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


Настройки = КомпоновщикНастроек.Настройки;


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

//Обходим весь необходимый справочник и для каждого элемента добавляем условное оформление по цвету фона
ВыборкаСостояния = Справочники.СостоянияЗаказовПокупателей.Выбрать();
Пока ВыборкаСостояния.Следующий() Цикл

ЦветФона = ВыборкаСостояния.Цвет.Получить();
Если ТипЗнч(ЦветФона) <> Тип("Цвет") Тогда
Продолжить;
КонецЕсли;

ЭлементУсловногоОформления = Настройки.УсловноеОформление.Элементы.Добавить();

ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));


ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СостояниеЗаказа"); 
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВыборкаСостояния.Ссылка; 

ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветФона);
ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
//Указываем идентификатор настройки для того, чтобы при повторном формировании отчета
//удалить все элементы с этим идентификатором
ЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "Предустановленный";

КонецЦикла;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Волков (ZUL_MTFKA) 14.10.15 07:56
А почему не добавить условное оформление по определенному признаку в самой СКД?

Прикрепленные файлы:
2. Дмитрий Бондарев (Daringer) 14.10.15 08:35
Потому что цвет заранее не известен. Пользователь сам назначает цвет.
luter-89; dgolovanov; +2 Ответить 1
3. Иван Петров (dgolovanov) 14.10.15 11:23
(2) Daringer, ща будет вопрос типа "а зачем пользователю самому назначать себе цвет?" ))
4. Александр Журавлев (apostal86) 29.10.15 09:07
Что-то я мало что понял. Заголовок публикации "Если вы выводите в отчет какой-либо элемент справочника, который хранит цвет" - это доработка должна быть? Тогда так и пишите. И потом снова, написано "элемент справочника", а на заглавном рисунке - документы "Заказ покупателя".

На фоне всего этого мне улыбается использовать условное оформление компоновки данных:
ZUL_MTFKA; +1 Ответить