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

Часто возникает необходимость сделать раскраску таблицы в определенные цвета, например

  • раскрасить строки журнала документа по наличию подчиненных документов
  • раскрасить ячейки в обработке в зависимости от величины "цены", выделить ячейку с наименьшей ценой

В управляемом интерфейсе (УФ), для этого предназначен универсальный механизм "условного оформления". Настройку раскраски можно выполнить в двух вариантах. Первый, в конфигураторе мыщью в форме задать необходимые настройки, второй задать эти же настройки "кодом". Рассмотрим эти варианты.

  1. Задать мышью условное оформление в форме.
    1. Открыть в конфигураторе свойства формы (выделить самый корень слева в окне отображения реквизитов)
    2. Кликнуть в свойства формы в пункт "УсловноеОформление" - "Открыть"
    3. Далее через кнопку "+" добавить необходимое оформление для строк. В первой колонке задается как именно оформлять строку, во второй колонке при каких условиях сработает эта строка оформления, в третьей колонке что именно будет оформлено (если выбрать просто название таблицы, то целиком строка, если выбрать одну из колонок, то соответственно эта колонка).
    4. Результат оформления:

  2. Рассмотрим пример программного оформления строк\ячеек табличного поля.
    1. Например у нас есть таблица, с несколькими однотипными колонками. В каждой колонке есть число, надо выделить ячейку с наименьшим значением.
    2. Оформлять будем сразу после перезаполнения таблицы обработки.
    3. После нажатия кнопки типа "заполнить таблицу", вызываем дополнительную процедуру раскраски:
      &НаСервере
      Процедура РаскраситьТаблицу()
      	
      	//очищаем ранее назначенные элементы оформления
      	УсловноеОформление.Элементы.Очистить();
      	
      	КолонкиИмена = Новый Массив();
      	КолонкиИменаНеУчаствуют = Новый Массив();
      	
      	Для каждого Колонка Из ТаблицаТовары.Выгрузить(Новый Массив(),).Колонки Цикл
      		Если СтрНайти(Колонка.Имя, "ЦенаРасчетная_") > 0 Тогда
      			КолонкиИмена.Добавить(Колонка.Имя);
      		ИначеЕсли СтрНайти(Колонка.Имя, "ЦенаИнформативная_") > 0
      			КолонкиИменаНеУчаствуют.Добавить(Колонка.Имя);
      		КонецЕсли;		
      	КонецЦикла;
      
      	
      	Для каждого Колонка Из КолонкиИмена Цикл			
      		//добавляем новый элемент условного оформления
      		ЭлементУО = УсловноеОформление.Элементы.Добавить();
      		//устанавливаем само оформление
      		ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);
      		//добавляем условие
      		ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      		//что сравниваем()
      		ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары."+Колонка);
      		//как сравниваем
      		ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
      		//с чем сравниваем
      		ЭлементУсловия.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары.ЛучшаяЦена");
      		
      		ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      		//что сравниваем()
      		ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары."+Колонка);
      		//как сравниваем
      		ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
      		//с чем сравниваем
      		ЭлементУсловия.ПравоеЗначение = 0;
      		
      		//оформляемые поля
      		ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
      		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаТовары"+Колонка); 	
      	КонецЦикла;
      	
      	//оформление серым цветом колонок "ЦенаИнформативная_.."
      	Для каждого Колонка Из КолонкиИменаНеУчаствуют Цикл
      		ЭлементУО = УсловноеОформление.Элементы.Добавить();				
      		ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоСерый);
      		ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
      		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаТовары"+Колонка)
      	КонецЦикла;
      КонецПроцедуры​
    4. Данная процедура производит раскраску в строке только той ячейки, которая по своему значению равна значению в другой колонке "ЛучшаяЦена".
    5. Также внизу процедуры есть код, по которому все колонки имена которых начинаются с "ЦенаИнформативная_" закрашиваются в серый цвет.
    6. Результат оформления:
Комментарии  
0 #2 Георгий 14.08.2020 15:31
Спасибо!
Цитировать
0 #1 Мимо идущий 26.06.2020 06:08
Спасибо за статью!
Цитировать
Добавить комментарий