1С 8.3 Условное оформление таблицы программно

1. R_o_n_n_y 67 28.12.23 23:46 Сейчас в теме
В процессе написания WhatsApp клиента для 1С возник вопрос, можно ли раскрасить ячейку таблицы формы программно значением цвета из текущего контакта из строки таблицы:
	Элемент = УсловноеОформление.Элементы.Добавить();
	Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("КонтактыКонтакт");
	ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.Использование		= Истина;         
	ЭлементОтбора.ЛевоеЗначение		= Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта");
	ЭлементОтбора.ВидСравнения		= ВидСравненияКомпоновкиДанных.НеРавно;
	ЭлементОтбора.ПравоеЗначение	= Новый Цвет(0,0,0);
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона",Новый Цвет(55,55,55));
Показать

Вот так работает (окраска фиксированным цветом), т.е. если цвет не Черный(по умолчанию создается), то красим другим.
А вот примерно так не работает
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта"));
Условие отрабатывает, но красит в Черный
Есть идеи?
По теме из базы знаний
Найденные решения
2. Dr.HiHi 3 29.12.23 02:40 Сейчас в теме
(1) скорее всего из-за того, что значение цвета должно быть статистическое, а не динамическое

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

если пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dr.HiHi 3 29.12.23 02:40 Сейчас в теме
(1) скорее всего из-за того, что значение цвета должно быть статистическое, а не динамическое

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

если пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
3. Sashares 34 29.12.23 03:22 Сейчас в теме
(1)Задать явное оформление для каждого контакта.
То есть берем список контактов, для каждого контакта задаем новое условное оформление и устанавливаем цвет из этого контакта.
4. R_o_n_n_y 67 29.12.23 22:32 Сейчас в теме
(2) Сделал пока так
	
&НаСервере
Процедура УстановитьУсловноеОформление()
	
	МассивЦветов = Новый Массив;
	СпрК = Справочники.WhatsApp_Контакты.Выбрать();
	Пока СпрК.Следующий() Цикл
		Если НЕ СпрК.ЦветВСписке.Получить() = Неопределено Тогда
			Если МассивЦветов.Найти(СпрК.ЦветВСписке.Получить()) = Неопределено Тогда
				МассивЦветов.Добавить(СпрК.ЦветВСписке.Получить());
			КОнецЕсли;
		КонецЕсли;
	КонецЦикла;	

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

только пока открыта форма WhatsApp-клиента, появление совсем нового цвета не отработает, но это меньшее из зол.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот