1С 8.3 Условное оформление таблицы программно
В процессе написания WhatsApp клиента для 1С возник вопрос, можно ли раскрасить ячейку таблицы формы программно значением цвета из текущего контакта из строки таблицы:
Вот так работает (окраска фиксированным цветом), т.е. если цвет не Черный(по умолчанию создается), то красим другим.
А вот примерно так не работает
Условие отрабатывает, но красит в Черный
Есть идеи?
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("КонтактыКонтакт");
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = Новый Цвет(0,0,0);
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона",Новый Цвет(55,55,55));
ПоказатьВот так работает (окраска фиксированным цветом), т.е. если цвет не Черный(по умолчанию создается), то красим другим.
А вот примерно так не работает
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта"));
Есть идеи?
По теме из базы знаний
- Условное оформление таблицы управляемой формы
- Учет по проектам в 1С:Бухгалтерии 3.0
- Программная корректировка при выводе отчета СКД
- Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)
- Базовый курс для начинающих 1С-программистов. Онлайн-курс с 7 февраля по 17 апреля 2024 г.
Найденные решения
(1) скорее всего из-за того, что значение цвета должно быть статистическое, а не динамическое
как вариант, костыльный метод, но должен работать
при открытии формы, получать все различные цвета и для каждого цвета формировать условное оформление
если пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
как вариант, костыльный метод, но должен работать
при открытии формы, получать все различные цвета и для каждого цвета формировать условное оформление
Для Каждого Цвет Из Цвета Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("КонтактыКонтакт");
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Цвет;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Цвет);
КонецЦикла;
Показатьесли пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) скорее всего из-за того, что значение цвета должно быть статистическое, а не динамическое
как вариант, костыльный метод, но должен работать
при открытии формы, получать все различные цвета и для каждого цвета формировать условное оформление
если пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
как вариант, костыльный метод, но должен работать
при открытии формы, получать все различные цвета и для каждого цвета формировать условное оформление
Для Каждого Цвет Из Цвета Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("КонтактыКонтакт");
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Цвет;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Цвет);
КонецЦикла;
Показатьесли пользователю разрешено редактирование цвета - то при изменении цвета нужно пройтись по условным оформлениям и если нету такого цвета - то добавить условное оформление для этого цвета
(2) Сделал пока так
только пока открыта форма WhatsApp-клиента, появление совсем нового цвета не отработает, но это меньшее из зол.
&НаСервере
Процедура УстановитьУсловноеОформление()
МассивЦветов = Новый Массив;
СпрК = Справочники.WhatsApp_Контакты.Выбрать();
Пока СпрК.Следующий() Цикл
Если НЕ СпрК.ЦветВСписке.Получить() = Неопределено Тогда
Если МассивЦветов.Найти(СпрК.ЦветВСписке.Получить()) = Неопределено Тогда
МассивЦветов.Добавить(СпрК.ЦветВСписке.Получить());
КОнецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Цвет из МассивЦветов Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("КонтактыКонтакт");
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контакты.ЦветКонтакта");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Цвет;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Цвет);
КонецЦикла;
КонецПроцедуры
Показатьтолько пока открыта форма WhatsApp-клиента, появление совсем нового цвета не отработает, но это меньшее из зол.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот