Вывод произвольных цветов построчно в динамическом списке

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

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

Добавил справочник цветов и поле дор_Цвет в справочник договоров:

В текст запроса динамического списка по договорам добавил извлечение цвета RGB:

ЕстьNULL(СправочникДоговора.дор_Цвет.ЦветRGB, "") как ЦветRGB

В настройке списка добавил для поля ЦветRGB галочку «Использовать всегда».

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

&НаКлиентеНаСервереБезКонтекста
Функция ЦветИзСтрокиRGB(HEX) Экспорт
	
	RED   = ЧислоИзШестнадцатеричнойСтроки("0x" + Сред(HEX, 2, 2)); 	
	GREEN =	ЧислоИзШестнадцатеричнойСтроки("0x" + Сред(HEX, 4, 2));
	BLUE  = ЧислоИзШестнадцатеричнойСтроки("0x" + Сред(HEX, 6, 2));
	
	Возврат Новый Цвет(RED, GREEN, BLUE);
КонецФункции

В алгоритме пришлось игнорировать в явном виде те договора, для котрых используется стандартное условное оформление (для просроченных договоров).

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

Попытку использую на случай, если цвет занесен в справочник неправильно.

Объем: 1 час. Платформа: 8.3.17.1386