Для условного оформления в списках и формах
в обычном приложении использовалось событие ПриПолученииДанных() или ПриВыводеСтроки(),
где через "ячейку" в зависимости от данных строки устанавливали нужное свойство.
С приходом нового режима работы платформы возможности условного оформления расширились.
В данной статье разберем основные аспекты.
Доброе время суток. А у меня вопрос к автору. Добавляю условное оформление в Настройку списка в конфигураторе (пример 2 пункта 1 статьи) дополнительно к типовым настройкам (формы списка документа Заказы покупателей и спр. Договоры контрагентов, Управление торговлей ред.11 платформа 8.2.17.169), а в режиме предприятия настройки не обновляются. Куда смотреть, что делать, к кому бежать? чистка кэша не помогает, да и не вариант.
(2) son_v, есть справочник настройки пользователей как то так, его можно открыть в режиме предприятия через справочник Пользователи.. ну и очистить настройки форм там надо
Условное оформление бывает только для формы! Оно включает и условное оформление всех элементов связанных с этой формой, в том числе и таблиц, дерева. Хотя для динамических списков оно может быть отдельно в динамическом списке, с ними сложнее.
(6) psa247, от платформы не зависит, зависит от конфигурации.
(7) AllexSoft, да, так и есть, спасибо за ответ. Уже кое-чего примитивное настроил на уровне конфы.
для управления оформлением программно в динамическом списке вот так сделал:
&НаСервере
Процедура НастроитьУсловноеФорматирование()
Для Каждого СтрокаДанных Из Объект.СписокКлиентов Цикл
// Условное оформление - Номер первой строки
СтрокаДанных.ВерсияППОтображение = ПолучитьНомерВерсииПП(СтрокаДанных.НоваяВерсия);
(8) psa247, зачем?) чем не подошло условное оформление самого динамического списка ? если оно не обновляется нужно добавить какой нибудь реквизитик (колонку в дин список) сохранить, открыть и проверить условное оформление, потом удалить эту ненужную колонку
(10) psa247, в УФ немного приловчится и в принципе многое проще чем в обычных формах. Ну правда дин. список очень очень сырой, как минимум из того что мне уже неоднократно было нужно это:
1. невозможность вывести итоговую сумму в подвал дин. списка.
2. нельзя использовать пакеты запросов в произвольном запросе дин. списка.
Надо было в таблице на форме сравнить две колонки.
В одной колонке значения типа Справочник.ЦеновыеГруппы.
Во второй колонке значения типа Строка.
Сравнивать надо было наименование справочника первой колонки и строку из второй колонки.
Через УсловноеОформление формы посмотрел - нельзя обратиться к свойствам поля, нету их.
Создал в реквизитах у этой таблицы еще одно поле ЦеновыеГруппыНаименование, элемент в форме не создавал.
Программно задал условие:
ИмяПоляОформления = "ЗагружаемыеДанныеЦеновыеГруппы";
ПутьКПолюОтбора = "ЗагружаемыеДанные.ЦеновыеГруппыНаименование";
ПутьКПолюСравнения = "ЗагружаемыеДанные.ЦеновыеГруппыПоставщика";
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементыФормы[ИмяПоляОформления].Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКПолюОтбора);
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКПолюСравнения);
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.НавахоБелый);
Показать
Не пинайте, если через Ж...
Полдня искал как сделать нормально...
(14)
Отличный код. Великолепное шаманство. Нужно было сравнить в документе Колонки Количество и КоеоходимоеКоличество. Через стандартное оформление не взлетело.
Хорошо, что так можно напилить.
скажите, мне нужно ЦветФона изменить, такой Параметр есть но если указываю ЦветФона то никакого результата, а вот когда указываю ЦветТекста то работает
Спасибо за статью. Ранее настраивал условное оформление на форме через свойство "Условное оформление" и не работало. И как всегда списал на глюк 1с.
Но после прочтения статьи решил все перепроверить - и нашел ошибку в условии. Исправил и все заработало.
1с - на высоте. А если у кого не работает, то будьте внимательны и ищите свои ошибки.
подскажите, а можно ли в принципе применять условное оформление из внешней обработки к форме владельца.
параметр ВладелецФормы на сервере выдает ошибку, а на клиенте условное оформление недоступно.
заполняю из внешней обработки ТЧ документа, нужно для текста ячеек в одной колонке установить свойство: ГоризонтальноеПоложение - Право.
может, у кого-нибудь есть идеи как это сделать?
типовую Конфигурацию менять нельзя.
На форме есть дерево значений. У дерева значений один из реквизитов - таблица значений. И вот для этой таблицы значений, которая для каждого элемента своя, не работает условное оформление.
Либо я не понимаю как его настроить
В отборе стоит "
Добрый день. Интересует такая тема. В поле ТЧ на форме добавил сумму. Вычисляется она банальненько, как "строка.Цена*Строка.Количество". Так как в УФ нет таких обработчиков, как "ПриПолученииДанных" или "ПриВыводеСтроки" необходимо проделать следующее:
1. собственно вычислить эту сумму для каждой строки для разных случаев, будь то изменение номенклатуры или цены или количества. Опять же изменение может быть отовсюду, как из строки ТЧ непосредственно, так и из внешних обработок заполнения. Поэтому - возможно ли вычислить сумму через настройку условного оформления, в идеале - непрограммно. Т.е. условно устанавливать текст ячейки равным сумме=цена*количество
2. Показать такую сумму в подвале
Возможно, пропустил, но есть один нюанс при программном добавлении условного оформления.
Реквизиты в условии УО указываются по пути через "Объект.ххх...", а в оформляемых полях УО - по имени элемента формы.
Поделюсь своим случаем сложного - добавляю реквизит в табличную часть Товары и настраиваю условное оформление.
&НаСервере
Процедура _РасчитатьКоличествоПоСериям() Экспорт
//Осипов 2020-04-24
НастройкиФормыУжеПроизведены = ложь;
ИдентификаторПользовательскойНастройки = "_ОКПоСериям";
Для Каждого ЭлементОформления ИЗ УсловноеОформление.Элементы Цикл
Если ЭлементОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда
НастройкиФормыУжеПроизведены = истина;
Прервать;
КонецЕсли;
КонецЦикла;
//При первом вызове добавляем реквизиты и форму
Если НЕ НастройкиФормыУжеПроизведены Тогда
//Добавляем реквизит в ТЧ
НовыеКолонки = Новый Массив;
РеквизитФормы = Новый РеквизитФормы("ОКПоСериям", Новый ОписаниеТипов("Булево"), "Объект.Товары");
НовыеКолонки.Добавить(РеквизитФормы);
ИзменитьРеквизиты(НовыеКолонки);
//Добавляем условное оформление, отсюда: https://infostart.ru/public/181336/
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = истина;
ЭлементОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Новый ПолеКомпоновкиДанных("Объект.Товары.ОКПоСериям")); // имя поля
//ЭлементОтбора.ЛевоеЗначение = ложь; // имя поля
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
ЭлементОтбора.ПравоеЗначение = ложь;
ЭлементОтбора.Использование = Истина;
//Оформление
Элемент = ЭлементОформления.Оформление.Элементы[0]; //цвет фона
Элемент.Значение = WebЦвета.ТусклоРозовый;
Элемент.Использование = Истина; //Временно не используем
Элемент = ЭлементОформления.Оформление.Элементы[1]; //цвет текста
Элемент.Значение = WebЦвета.Красный;
Элемент.Использование = Истина;
// Создаем поля оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
ПолеОформления.Использование = Истина;
КонецЕсли;
//Проверяем на корректность соответствия количества товаров и серий
ТТовары = Объект.Товары.Выгрузить(, "Номенклатура, Количество, НомерСтроки");
ТСерии = Объект.Серии.Выгрузить(, "Номенклатура, Количество");
З = Новый Запрос(
"ВЫБРАТЬ
| Т.Номенклатура КАК Номенклатура,
| Т.Количество КАК Количество,
| Т.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ТТовары
|ИЗ
| &ТТовары КАК Т
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Т.Номенклатура КАК Номенклатура,
| Т.Количество КАК Количество
|ПОМЕСТИТЬ ТСерии
|ИЗ
| &ТСерии КАК Т
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТСерии.Номенклатура КАК Номенклатура,
| СУММА(ТСерии.Количество) КАК Количество
|ПОМЕСТИТЬ ТСерииИтоги
|ИЗ
| ТСерии КАК ТСерии
|
|СГРУППИРОВАТЬ ПО
| ТСерии.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТТовары.Номенклатура КАК Номенклатура,
| СУММА(ТТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ТТоварыИтоги
|ИЗ
| ТТовары КАК ТТовары
|
|СГРУППИРОВАТЬ ПО
| ТТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТТовары.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА ТТоварыИТоги.Количество = ТСерииИтоги.Количество
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОК
|ИЗ
| ТТовары КАК ТТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ТТоварыИтоги КАК ТТоварыИТоги
| ПО (ТТоварыИТоги.Номенклатура = ТТовары.Номенклатура)
| ЛЕВОЕ СОЕДИНЕНИЕ ТСерииИтоги КАК ТСерииИтоги
| ПО (ТСерииИтоги.Номенклатура = ТТовары.Номенклатура)");
З.УстановитьПараметр("ТТовары", ТТовары);
З.УстановитьПараметр("ТСерии", ТСерии);
Выборка = З.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект.Товары[Выборка.НомерСтроки - 1].ОКПоСериям = Выборка.ОК;
КонецЦикла;
КонецПроцедуры
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:
Пытался делать как в статье не работало, нашёл ответ в ИТС:
Книга "Разработка интерфейса" В.А. Ажеронок, часть 3, глава 3.1.5
"Напоследок хочется сделать еще одно небольшое замечание. В отличие от динамических списков, в условном оформлении формы обязательно нужно указывать оформляемые поля. Если хочется выделить всю строку табличной части, нужно указать все поля, которые в ней содержатся."
(40) Всем привет.
Я так понимаю это работает только для табличной части? Пробую перенести на таблицу значений нет результата. Как можно тоже проделать с таблицей значений?