в обычном приложении использовалось событие ПриПолученииДанных() или ПриВыводеСтроки(),
где через "ячейку" в зависимости от данных строки устанавливали нужное свойство.
С приходом нового режима работы платформы возможности условного оформления расширились.
В данной статье разберем основные аспекты.
Итак начнем.
1. Условное оформление в упр. формах настраивается как в режиме конфигуратора, так и в режиме пользовательском.
— в конфигураторе условное оформление существует на уровне самой формы (как в формах объекта, так и списка):
В формах списка условное оформление существует и на уровне самого динамического списка:
Добавлять элементы условного оформления можно не прибегая к программированию, но конечно есть возможность и программного добавления элементов, который мы рассмотрим чуть ниже.
— в пользовательском режиме настройки оформления доступны для динамических списков, все настройки оформления в форме документа необходимо выполнять в режиме конфигуратора. Для настройки переходим во все действия списка и выбираем настроить список:
2. Программная работа с условным оформлением (УО).
Начнем с того, что работа с УО доступна только:
&НаСервере
Для Добавления элемента УО в списке нужно обратится к списку и добавить элемент УО:
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
Для УО формы добавление происходит через прикладной объект УсловноеОформление:
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
Далее алгоритмы будут похожими. Для УО нам нужно задать условие отбора, задать значение свойства УО и добавить оформляемые поля.
// Создаем условие отбора
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); // имя поля
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
//**** Значение для отбора
ЭлементОтбора.ПравоеЗначение = ЗначениеДляОтбора;
// следует заметить что правым значением может выступать ПолеКомпоновкиДанных формы или списка
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
//****
ЭлементОтбора.Использование = Истина;
Значение свойства УО:
// Установка значения элемента УО
// Возможно обращение как по индексу так и установка через метод
//1.
Элемент = ЭлементОформления.Оформление.Элементы[0];
Элемент.Значение = Цвет;
//2.
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.СеребристоСерый);
Элемент.Использование = Истина;
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:
// Создаем поля оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПолеДляОформления);
ПолеОформления.Использование = Истина;
В качестве ИменПолей нужно передавать строковое представление ИМЕНИ реквизита.
3. Все настройки УО хранятся для каждого пользователя отдельно.
4. Пример.
Очень часто сталкивался с проблемой настройки свойства АвтоОтметкаНезаполненного в ТЧ по условию. В обычных формах все решалось в процедурах упомянутых выше, а здесь таких событий нет. А решается это все конечно при помощи УО. Заходим в форме объекта в Условное оформление и видим свойство — Отметка незаполненного. Ну а дальше настроииваем как надо.
Выводы:
— Простое условное оформление пользователь может настроить и сам, если его научить :). Это будет сложно конечно, но возможно.
— УО в табличной части можно задать в конфигураторе через УО формы.
— Программная работа с УО требуется в случае сложного условия отбора, в таких случаях лучше создавать процедуру в общем модуле использования в различных документах и списках.
— Простое условное оформление пользователь может настроить и сам, если его научить :). Это будет сложно конечно, но возможно.
Спасибо, КЭП! )
Доброе время суток. А у меня вопрос к автору. Добавляю условное оформление в Настройку списка в конфигураторе (пример 2 пункта 1 статьи) дополнительно к типовым настройкам (формы списка документа Заказы покупателей и спр. Договоры контрагентов, Управление торговлей ред.11 платформа 8.2.17.169), а в режиме предприятия настройки не обновляются. Куда смотреть, что делать, к кому бежать? чистка кэша не помогает, да и не вариант.
(2) son_v, есть справочник настройки пользователей как то так, его можно открыть в режиме предприятия через справочник Пользователи.. ну и очистить настройки форм там надо
(3) СПАСИБО!!!!!!!! Сами бы еще годами думали ))
Спасибо, помогло. Только почему то работает только для Формы, а для таблицы или дерева нет.
(5) Znef, скорее всего, у Вас более свежая платформа. У меня тоже такого нет
Условное оформление бывает только для формы! Оно включает и условное оформление всех элементов связанных с этой формой, в том числе и таблиц, дерева. Хотя для динамических списков оно может быть отдельно в динамическом списке, с ними сложнее.
(6) psa247, от платформы не зависит, зависит от конфигурации.
(7) AllexSoft, да, так и есть, спасибо за ответ. Уже кое-чего примитивное настроил на уровне конфы.
для управления оформлением программно в динамическом списке вот так сделал:
&НаСервере
Процедура НастроитьУсловноеФорматирование()
Для Каждого СтрокаДанных Из Объект.СписокКлиентов Цикл
// Условное оформление — Номер первой строки
СтрокаДанных.ВерсияППОтображение = ПолучитьНомерВерсииПП(СтрокаДанных.НоваяВерсия);
НовыйЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
//НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = «»Стр.НомерСтроки;
НовыйЭлементУсловногоОформления.Представление = «СозданоПрограммно»;
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«СписокКлиентов.НоваяВерсия»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(Справочники.ВерсияПП.ПустаяСсылка());
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
НастроитьУсловноеФорматирование();
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
НастроитьУсловноеФорматирование();
КонецПроцедуры
(8) psa247, зачем?) чем не подошло условное оформление самого динамического списка ? если оно не обновляется нужно добавить какой нибудь реквизитик (колонку в дин список) сохранить, открыть и проверить условное оформление, потом удалить эту ненужную колонку
(9) AllexSoft, нее, я часа три убил на то, что в толстом клиенте делается 3 минуты
(10) psa247, в УФ немного приловчится и в принципе многое проще чем в обычных формах. Ну правда дин. список очень очень сырой, как минимум из того что мне уже неоднократно было нужно это:
1. невозможность вывести итоговую сумму в подвал дин. списка.
2. нельзя использовать пакеты запросов в произвольном запросе дин. списка.
1С — Недоступно, но всерьез ? ))
(12) psa247, ))) есть такое
Спасибо, очень помогло.
От себя добавлю, если вдруг кому пригодится:
Надо было в таблице на форме сравнить две колонки.
В одной колонке значения типа Справочник.ЦеновыеГруппы.
Во второй колонке значения типа Строка.
Сравнивать надо было наименование справочника первой колонки и строку из второй колонки.
Через УсловноеОформление формы посмотрел — нельзя обратиться к свойствам поля, нету их.
Создал в реквизитах у этой таблицы еще одно поле ЦеновыеГруппыНаименование, элемент в форме не создавал.
Программно задал условие:
Показать
Не пинайте, если через Ж…
Полдня искал как сделать нормально…
Статья помогла
Показать
скажите, мне нужно ЦветФона изменить, такой Параметр есть но если указываю ЦветФона то никакого результата, а вот когда указываю ЦветТекста то работает
Спасибо за статью. Ранее настраивал условное оформление на форме через свойство «Условное оформление» и не работало. И как всегда списал на глюк 1с.
Но после прочтения статьи решил все перепроверить — и нашел ошибку в условии. Исправил и все заработало.
1с — на высоте. А если у кого не работает, то будьте внимательны и ищите свои ошибки.
подскажите, а можно ли в принципе применять условное оформление из внешней обработки к форме владельца.
параметр ВладелецФормы на сервере выдает ошибку, а на клиенте условное оформление недоступно.
заполняю из внешней обработки ТЧ документа, нужно для текста ячеек в одной колонке установить свойство: ГоризонтальноеПоложение — Право.
может, у кого-нибудь есть идеи как это сделать?
типовую Конфигурацию менять нельзя.
Понимал, что что-то такое есть на УФ. Даже процедуру написал. Но благодаря статье решилось все за 5 минут!
(19) dklp, А если засунуть форму в расширение и в расширении сделать как нужно?
1С:Предприятие 8.3 (8.3.9.1818), Розница, редакция 2.2 (2.2.4.33) , не могу найти Условное оформление.Есть ли оно там вообще?
На форме есть дерево значений. У дерева значений один из реквизитов — таблица значений. И вот для этой таблицы значений, которая для каждого элемента своя, не работает условное оформление.
Либо я не понимаю как его настроить
В отборе стоит «
«.
В оформлении стоит «
»
Грубо говоря, есть дерево задач, у каждой задачи список исполнителей в виде таблицы и нужно определённых исполнителей подсветить.
Вот это трюк в (9) с добавлением реквизита в динамический список! И работает же!
Условное оформление на форме. Как в оформляемые поля полностью занести строку табличной части не перечисляя реквизиты табличной части?
(25) Добавить имя табличной части как оно есть на форме
(26)Пробовала — не получилось.
(27) Код в студию
.
А если мне нужно оформить цвет фона в табличной части формы в одной колонке в зависимости от значения (значение — элемент справочника) , тогда как?
Спасибо
Спасибо! Очень помогло быстро сделать.
Добрый день. Интересует такая тема. В поле ТЧ на форме добавил сумму. Вычисляется она банальненько, как «строка.Цена*Строка.Количество». Так как в УФ нет таких обработчиков, как «ПриПолученииДанных» или «ПриВыводеСтроки» необходимо проделать следующее:
1. собственно вычислить эту сумму для каждой строки для разных случаев, будь то изменение номенклатуры или цены или количества. Опять же изменение может быть отовсюду, как из строки ТЧ непосредственно, так и из внешних обработок заполнения. Поэтому — возможно ли вычислить сумму через настройку условного оформления, в идеале — непрограммно. Т.е. условно устанавливать текст ячейки равным сумме=цена*количество
2. Показать такую сумму в подвале
ут 11.4.6.188
буду благодарен за вразумительный ответ
Возможно, пропустил, но есть один нюанс при программном добавлении условного оформления.
Реквизиты в условии УО указываются по пути через «Объект.ххх…», а в оформляемых полях УО — по имени элемента формы.
Подробно описано здесь:https://its.1c.ru/db/pubv8devui/content/239/hdoc/_top/%D1%83%D1%81%D0%BB%D0 %BE%D0%B2%D0%BD%D0%BE%D0%B5%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0 %BB%D0%B5%D0%BD%D0%B8%D0%B5.%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B.%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C