Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)

19.01.21

Разработка - Работа с интерфейсом

Большое количество динамических списков на форме, большое количество условий, долгое интерактивное добавление условий, оформление по значению элементов справочников - всё это не позволяет использовать интерактивный режим назначения условного оформления динамического списка. В публикации с открытым кодом детально разберем программное решение назначения условного оформления, создадим универсальную функцию для оформления списка.

В интерфейсе Такси (Управляемые формы) системы Кронос: WMS на 1С во многих местах требовалось различное оформление динамических списков, поэтому мы решили для себя создать универсальную функцию по работе с ними. 

Например, цвет раскраски строк списка заявок на хранение (входящих поставок) настраивается в каждой складской операции:

 

 

Внешний вид списка при этом выглядит следующим образом:

 

 

Итак, приступим.

Для начала придумаем имя нашей универсальной функции, её параметры 

Функция ДобавитьУсловноеОформление(ФормаОбъекта, ПараметрыОформления, Отбор) экспорт

Пример вызова функции - 

ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("ЦветФона, Поле", ЦветФонаСписка,    ИмяСписка), Новый Структура("ТЧ, Поле, Значение", ИмяСписка, "СкладскаяОперация", СкладскаяОперация));

Разберем параметры функции: 

1. ФормаОбъекта. Передаем контекст нашей формы - ЭтаФорма, для возможности установки условного оформления.

2. ПараметрыОформления. В этом параметре мы указываем необходимое оформление, которое нужно добавить в условное оформление списка - Новый Структура("ЦветФона, Поле", ЦветФонаСписка,    ИмяСписка). ЦветФонаСписка - например, цвет, который нам нужно задать на фон, ИмяСписка - это имя нашего динамического списка на форме, если требуется задать на весь список. Можно указать конкретную графу (поле) динамического списка, которое нужно оформить. 

3. Отбор. В этом параметре мы указываем необходимый отбор, при котором нужно, чтобы срабатывало условие оформления - Новый Структура("ТЧ, Поле, Значение", ИмяСписка, "СкладскаяОперация", СкладскаяОперация).  ИмяСписка(ТЧ) - это имя нашего динамического списка на форме, "СкладскаяОперация" (Поле) - на которое устанавливается отбор, СкладскаяОперация (Значение) - значение, при котором нужно, чтобы оформление работало. 

 

Еще примеры вызовов функции:

ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("ЦветТекста", WebЦвета.ЛимонноЗеленый), Новый Структура("ТЧ, Поле, Значение","Объект.Двор_СостояниеВорот", "Направление", ""))

ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("ЦветТекста", WebЦвета.ОранжевоКрасный), Новый Структура("ТЧ, Поле, Значение, ВидСравнения","СписокДокументов_Приемка_Паллеты", "Длительность", 2, ВидСравненияКомпоновкиДанных.Больше))

ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("Шрифт, Поле", Новый Шрифт(,,Истина), ИмяСписка+"Анализ"), Новый Структура("ТЧ, Поле, Значение","Объект.АнализДокумента", "ВидЗапроса", 7))

 

Как видно, параметр "ТЧ" у нас может принимать как значения "СписокДокументов_Приемка_Паллеты", так и "Объект.АнализДокумента", т.е. как быть объектом метаданных, так и быть просто списком на форме.

Добавим новый элемент оформления и его параметры:

    НовыйЭлемент = ФормаОбъекта.УсловноеОформление.Элементы.Добавить(); 

	Для Каждого Элемент Из ПараметрыОформления Цикл
		
		Если Элемент.Ключ="Поле" Тогда
			ПолеОформления = Элемент.Значение;
		Иначе
			НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(Элемент.Ключ, Элемент.Значение);	
		КонецЕсли;	
		
	КонецЦикла;		

	НовыйЭлемент.Использование = Истина;

 

Отбор, как обычно, устанавливается для полей компоновки:

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

В окончании нашей функции сделаем возврат добавленного оформления для возможности последующей работы с ним:

Возврат Новый Структура("Элемент, Отбор", ФормаОбъекта.УсловноеОформление.Элементы.Количество()-1, НовыйЭлемент.Отбор.Элементы.Количество()-1);

 

Для удобства привожу функцию целиком:

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

 

 

UPD. Возникает вопрос, а как хранить оформление в справочнике и как его оттуда получать.

Есть несколько вариантов, например, в виде ХранилищеЗначения или отдельными полями, или ЗначениеВСтрокуВнутр.

У ХранилищеЗначения есть существенный недостаток - нельзя в запросе проверить есть в нем, что или нет, заполнено оно или нет. Поэтому мы у себя храним в ЗначениеВСтрокуВнутр. Однако, если Вы хотите использовать для мобильного приложения, то ЗначениеВСтрокуВнутр там нет, поэтому рекомендую ХранилищеЗначения. 

 

Итак, как сохранить в справочнике установленное пользователем оформление (цвет текста, цвет фона, шрифты):

&НаСервере
Процедура ПередЗаписьюСервер(Отказ, ПараметрыЗаписи)
	
	Если НастроеноОформление Тогда
		
		СтруктураПараметров = Новый Структура();
		
		СтруктураПараметров.Вставить("Шрифт",Шрифт);
		СтруктураПараметров.Вставить("ЦветТекстаСписка",ЦветТекста);
		СтруктураПараметров.Вставить("ЦветФонаСписка",ЦветФона);
		
		Объект.НастройкаСписка = ЗначениеВСтрокуВнутр(СтруктураПараметров);
		
	Иначе
		Объект.НастройкаСписка = "";
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
		
	ПередЗаписьюСервер(Отказ, ПараметрыЗаписи)
	
КонецПроцедуры

Назад в справочнике восстанавливаем так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
		
	Если НЕ ПустаяСтрока(Объект.НастройкаСписка) Тогда
		
		СтруктураПараметров = ЗначениеИзСтрокиВнутр(Объект.НастройкаСписка);
		
		Шрифт = СтруктураПараметров.Шрифт;
		ЦветТекста	= СтруктураПараметров.ЦветТекстаСписка;
		ЦветФона	= СтруктураПараметров.ЦветФонаСписка;
		
		НастроеноОформление = Истина;
	КонецЕсли;

КонецПроцедуры

 

А там где нужно вывести, например, в функцию 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
  ....
  ОформитьСпискиПоСкладскимОперациям(мУсловноеОформлениеТаблиц, мСтруктураФормы);
	
КонецПроцедуры

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

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

 

 

Надеюсь, моя публикация была Вам полезна и сэкономит Ваше время, ссылка на все публикации SizovE, думаю Вам понравится Ускоряем тормозной стандартный поиск по динамическому списку, настраиваем его под себя.

 

Подписывайтесь на мой канал (наверху), будет много интересного бесплатного контента :)

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62986    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18855    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10229    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16819    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7365    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14790    916    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11915    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VZhulanov 5 07.02.21 20:48 Сейчас в теме
Раскрашивать каждый элемент справочника тоже не каждый пользователь будет, даже если это удобно.

Я делал отдельный справочник оформлений, в который добавляются элементы для различных типовых ситуаций, которые необходимо как-то выделить в программе.
У каждого элемента есть Код, под которым он используется в программе, и подробное Наименование, которое видит пользователь при настройке оформлений под себя.
Настраиваются такие параметры как цвет текста/фона и шрифт.
У каждого элемента справочника есть значение настройки по умолчанию, которое применяется для всех пользователей, которые не переопределили оформление под свой вкус.

Постепенно, при обновлении программы, этот справочник наполнился уже почти сотней различных элементов. Процедура обновления до очередной версии добавляет в этот справочник свои элементы.
Так-же этим справочником пользуется не только сама конфигурация, но и внешние обработки, которые могут дописывать к ней сторонние программисты. Ведь добавить элемент в справочник очень просто - вызов одной функции, и использовать для раскраски тоже просто.

Для удобства пользователей справочник разбит на группы по темам.

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

Пока программа была на обычных формах - все работало замечательно. Щас постепенно перевожу на управляемые - обычные типовые оформления легко добавляются, код почти один в один как в данной публикации, а вот с условными приходится возиться, так как там условия отборов вообще не зависят от данных, которые на форме показаны )) Приходится юзать событие ПриПолученииДанныхНаСервере
2. SizovE 269 08.02.21 00:37 Сейчас в теме
(1) в нашей задачке, изложенное решение, было оптимально, это больше для админа, а не пользователя
Ваш кейс интересный, плюсик )
Хотя и моё мнение, что вариантов не должно быть много, это как с фирменным стилем сайта/компании, слишком много разных цветов или похожих будет путать пользователя, 5-7 цветов, жирность вполне достаточно для реальной жизни. В тоже время в каждой компании свои "хотелки", кто-то любит радугу ))) уточним - составленную из цветов спектра видимого излучения (wiki)
3. VZhulanov 5 08.02.21 17:52 Сейчас в теме
(2)Конечно, радуга будет мешаться.
Просто в программе много различных форм с информацией разного типа, вот и получилось много элементов этого справочника.
Но некоторые менеджеры за счет возможности раскраски по своим условиям иногда делают радугу и кассиры их матерят ))
4. пользователь 08.02.21 20:00
Сообщение было скрыто модератором.
...
5. imaxtr 29.07.21 11:54 Сейчас в теме
Здравствуйте!!! А как на рознице 2.3 можно покрасить документы (Акт переоценки и Поступление Товаров) после того как через них были напечатаны ценники????
6. linkwar 07.11.22 15:05 Сейчас в теме
// Функция - Добавить условное оформление
//  https://infostart.ru/1c/articles/1335442/
//
// Параметры:
//  ФормаОбъекта		 - ФормаПриложения				 - управляемая форма
//  ПараметрыОформления	 - Структура					 - параметры оформления
//  Отборы				 - Массив, Структура			 - возможен массив структур
//  			* Ключи -
//  			** ТЧ - Строка - имя таблицы
//  			** Поле - Строка - имя поля
//  			** Значение - Произвольный - устанавливаемое значение
//  			** ВидСравнения - ВидСравненияКомпоновкиДанных - необязательное
//  ВидГруппы			 - ТипГруппыЭлементовОтбораКомпоновкиДанных	 - необязательное, по умолчанию "ГруппаИ"
// 
// Возвращаемое значение:
//  Структура - содержит ключи:
//  - Элемент - количество элементов
//  - Отбор - количество отборов
//
Функция ДобавитьУсловноеОформление(ФормаОбъекта, ПараметрыОформления, Отборы, ВидГруппы = Неопределено) экспорт
	
	Если Не ТипЗнч(Отборы) = Тип("Массив") Тогда
		Отборы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Отборы);
	КонецЕсли;
	Отбор = Отборы[0];
	ПолеОформления = СтрЗаменить(Отбор.ТЧ,"Объект.","");
	
	НовыйЭлемент = ФормаОбъекта.УсловноеОформление.Элементы.Добавить(); 
	Для Каждого Элемент Из ПараметрыОформления Цикл
		
		Если Элемент.Ключ="Поле" Тогда
			ПолеОформления = Элемент.Значение;
		Иначе
			НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(Элемент.Ключ, Элемент.Значение);
		КонецЕсли;
		
	КонецЦикла;
	НовыйЭлемент.Использование = Истина;
	
	ОформляемыеПоля = НовыйЭлемент.Поля.Элементы.Добавить();
	ОформляемыеПоля.Поле = Новый ПолеКомпоновкиДанных(ПолеОформления);
	
	Если Отборы.Количество()>1 Тогда
		ГруппаОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		Если ЗначениеЗаполнено(ВидГруппы) Тогда
			ГруппаОтбора.ТипГруппы = ВидГруппы;
		Иначе
			ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		КонецЕсли;
		ГруппаОтбора.Использование = Истина;
	Иначе
		ГруппаОтбора = Неопределено;
	КонецЕсли;
	
	Для Каждого Отбор Из Отборы Цикл
		
		Если ГруппаОтбора = Неопределено Тогда
			ЭлементОтбор = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		Иначе
			ЭлементОтбор = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		КонецЕсли;
		
		ЭлементОтбор.ЛевоеЗначение	= Новый ПолеКомпоновкиДанных(Отбор.ТЧ+"."+Отбор.Поле);
		
		Если Отбор.Свойство("ВидСравнения") Тогда
			ЭлементОтбор.ВидСравнения	= Отбор.ВидСравнения;
		Иначе	
			ЭлементОтбор.ВидСравнения	= ВидСравненияКомпоновкиДанных.Равно;
		КонецЕсли;
		
		ЭлементОтбор.ПравоеЗначение = Отбор.Значение;
	КонецЦикла;
	
	Возврат Новый Структура("Элемент, Отбор", ФормаОбъекта.УсловноеОформление.Элементы.Количество()-1, НовыйЭлемент.Отбор.Элементы.Количество()-1);
	
КонецФункции
Показать
7. Shomak 45 07.02.23 08:46 Сейчас в теме
У меня не заводилось в документообороте.
поменял под себя.
// Функция назначения условного оформления динамического списка
//
// Параметры:
//	Форма - УправляемаяФорма, ДинамическийСписок - Передаем контекст нашей формы - ЭтаФорма, для возможности установки условного оформления.
//		Также можно передать динамический список с формы.
//	ПараметрыОформления - Структура - В этом параметре мы указываем необходимое оформление, 
//		которое нужно добавить в условное оформление списка - Новый Структура("ЦветФона, Поле", ЦветФонаСписка,    ИмяПоля). 
//		ЦветФонаСписка - например, цвет, который нам нужно задать на фон, ИмяПоля - Можно указать конкретную графу (поле) динамического списка, которое нужно оформить.
//	Отборы - Массив, Структура             - возможен массив структур
//              * Ключи -
//              ** ТЧ - Строка - имя таблицы
//              ** Поле - Строка - имя поля
//              ** Значение - Произвольный - устанавливаемое значение
//              ** ВидСравнения - ВидСравненияКомпоновкиДанных - необязательное
//
//		В этом параметре мы указываем необходимый отбор, при котором нужно, 
//		чтобы срабатывало условие оформления - Новый Структура("ТЧ, Поле, Значение", ИмяСписка, "СкладскаяОперация", СкладскаяОперация).  
//		ИмяСписка(ТЧ) - это имя нашего динамического списка на форме, "СкладскаяОперация" (Поле) - на которое устанавливается отбор, 
//		СкладскаяОперация (Значение) - значение, при котором нужно, чтобы оформление работало.
//	ВидГруппы             - ТипГруппыЭлементовОтбораКомпоновкиДанных     - необязательное, по умолчанию "ГруппаИ"
//
//
// Возвращаемое значение:
//	Структура - содержит ключи:
//	- Элемент - количество элементов
//	- Отбор - количество отборов
//
//Пример:
//	ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("ЦветТекста", WebЦвета.ЛимонноЗеленый), Новый Структура("ТЧ, Поле, Значение","Объект.Двор_СостояниеВорот", "Направление", ""))
//	ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("ЦветТекста", WebЦвета.ОранжевоКрасный), Новый Структура("ТЧ, Поле, Значение, ВидСравнения","СписокДокументов_Приемка_Паллеты", "Длительность", 2, ВидСравненияКомпоновкиДанных.Больше))
//	ДобавитьУсловноеОформление(ЭтаФорма, Новый Структура("Шрифт, Поле", Новый Шрифт(,,Истина), ИмяСписка+"Анализ"), Новый Структура("ТЧ, Поле, Значение","Объект.АнализДокумента", "ВидЗапроса", 7))
//
Функция ДобавитьУсловноеОформление(ФормаОбъекта, ПараметрыОформления, Отборы, ВидГруппы = Неопределено) экспорт
	
	Если Не ТипЗнч(Отборы) = Тип("Массив") Тогда
		Отборы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Отборы);
	КонецЕсли;
	
	НовыйЭлемент = ФормаОбъекта.УсловноеОформление.Элементы.Добавить(); 
	Для Каждого Элемент Из ПараметрыОформления Цикл
		
		Если Элемент.Ключ="Поле" Тогда
			ПолеОформления = Элемент.Значение;
			ОформляемыеПоля = НовыйЭлемент.Поля.Элементы.Добавить();
			ОформляемыеПоля.Поле = Новый ПолеКомпоновкиДанных(ПолеОформления);
		Иначе
			НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(Элемент.Ключ, Элемент.Значение);
		КонецЕсли;
		
	КонецЦикла;
	НовыйЭлемент.Использование = Истина;
	
	
	
	Если Отборы.Количество()>1 Тогда
		ГруппаОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		Если ЗначениеЗаполнено(ВидГруппы) Тогда
			ГруппаОтбора.ТипГруппы = ВидГруппы;
		Иначе
			ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		КонецЕсли;
		ГруппаОтбора.Использование = Истина;
	Иначе
		ГруппаОтбора = Неопределено;
	КонецЕсли;
	
	Для Каждого Отбор Из Отборы Цикл
		
		Если ГруппаОтбора = Неопределено Тогда
			ЭлементОтбор = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		Иначе
			ЭлементОтбор = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		КонецЕсли;
		
		ЭлементОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(?(ТипЗнч(ФормаОбъекта)=Тип("ДинамическийСписок"), Отбор.Поле, Отбор.ТЧ+"."+Отбор.Поле));
		
		Если Отбор.Свойство("ВидСравнения") Тогда
			ЭлементОтбор.ВидСравнения    = Отбор.ВидСравнения;
		Иначе    
			ЭлементОтбор.ВидСравнения    = ВидСравненияКомпоновкиДанных.Равно;
		КонецЕсли;
		
		ЭлементОтбор.ПравоеЗначение = Отбор.Значение;
	КонецЦикла;
	
	Возврат Новый Структура("Элемент, Отбор", ФормаОбъекта.УсловноеОформление.Элементы.Количество()-1, НовыйЭлемент.Отбор.Элементы.Количество()-1);
	
КонецФункции
Показать
8. 31337 39 15.12.23 12:34 Сейчас в теме
Подскажите пожалуйста, как заполняются поля мУсловноеОформлениеТаблиц и мСтруктураФормы ? Можете скинуть пример полностью как вы используете эту функцию ОформитьСпискиПоСкладскимОперациям(мУсловноеОформлениеТаблиц, мСтруктураФормы);
Спасибо
9. SizovE 269 15.12.23 19:01 Сейчас в теме
(8) это особенности конкретного решения, на раскраску не влияют.
Оставьте свое сообщение