Условное оформление табличной части документа.

1. alexkulikov1990 14.12.18 13:54 Сейчас в теме
Добрый день, уважаемые форумчане.

Интересует следующий момент, а именно:
Хочу разрисовать табличную часть документа в зависимости от нескольких условий, например:
У меня есть две колонки в табличной части ("заказано","доступно") если хотя бы одна из них не заполнена то шрифт текста в данной строке быть желтым,
если не заполнены обе колонки, то красным.

Сейчас я написал вот такой код:
МассивИменКолонокДляПодсветки = Новый Массив;
	Для каждого Стр из Элементы.Товары.ПодчиненныеЭлементы Цикл
		МассивИменКолонокДляПодсветки.Добавить(Стр.Имя);
	КонецЦикла;
	
	
	
	ЭлементОформления = УсловноеОформление.Элементы.Добавить();
	ЭлементОформления.Использование = Истина;
	//ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", ИСТИНА);
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СероСиний);
	
	ЭлементУсловия                = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
	ЭлементУсловия.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковок");
	ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Меньше;
	//ЭлементУсловия.ПравоеЗначение = ТестНоменклатура;
	//ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно; 
	ЭлементУсловия.Использование  = Истина;
	
	Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
		ОформляемоеПоле      = ЭлементОформления.Поля.Элементы.Добавить();
		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
3. SPID 14.12.18 14:56 Сейчас в теме
Да. Я так понимаю основная проблема с И/Или? Добавьте группы условий, что то вида
    ЭлементУсловияГруппа               = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ЭлементУсловияГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных .ГруппаИ;
 
    ЭлементУсловия1 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия1.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
    ЭлементУсловия1.ПравоеЗначение = 0;
    ЭлементУсловия1.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;

    ЭлементУсловия2 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия2.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
    ЭлементУсловия2.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковок");
    ЭлементУсловия2.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;

.....
Показать
YannikAlx; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alexkulikov1990 14.12.18 14:03 Сейчас в теме
Дополню:
Дано три колонки
"Количество" | "Заказано" | "Доступно"
3 2 1

Если у меня "заказано" и "доступно" не равны 0 и хотябы одна из них не равна количеству, то раскрашиваю желтым.
Можно ли такое условие написать в условном оформлении?
3. SPID 14.12.18 14:56 Сейчас в теме
Да. Я так понимаю основная проблема с И/Или? Добавьте группы условий, что то вида
    ЭлементУсловияГруппа               = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ЭлементУсловияГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных .ГруппаИ;
 
    ЭлементУсловия1 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия1.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
    ЭлементУсловия1.ПравоеЗначение = 0;
    ЭлементУсловия1.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;

    ЭлементУсловия2 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия2.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
    ЭлементУсловия2.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковок");
    ЭлементУсловия2.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;

.....
Показать
YannikAlx; +1 Ответить
5. alexkulikov1990 14.12.18 16:34 Сейчас в теме
(3) Спасибо за ответ, дело пошло. Но есть такая проблема:
Сейчас у меня код написан во так, и все отрабатывает как и должно:
//новый вариант
	
	МассивИменКолонокДляПодсветки = Новый Массив;
	Для каждого Стр из Элементы.Товары.ПодчиненныеЭлементы Цикл
		МассивИменКолонокДляПодсветки.Добавить(Стр.Имя);
	КонецЦикла;
	
	
	ЭлементОформления = УсловноеОформление.Элементы.Добавить();
	ЭлементОформления.Использование = Истина;
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Зеленый);
	
	ЭлементУсловияГруппа  = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ЭлементУсловияГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	ЭлементУсловияГруппа.Использование = Истина;
		
    ЭлементУсловия2 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия2.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
    ЭлементУсловия2.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковок");
    ЭлементУсловия2.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловия2.Использование  = Истина;
	
	ЭлементУсловия4 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия4.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Доступно");
    ЭлементУсловия4.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковок");
    ЭлементУсловия4.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловия4.Использование  = Истина;

	Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
		ОформляемоеПоле      = ЭлементОформления.Поля.Элементы.Добавить();
		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
	КонецЦикла;
Показать



Но если я добавляю еще одну группу вот таким образом, то он вообще перестает красить строки, любые
//равны 0
	
	ЭлементОформления2 = УсловноеОформление.Элементы.Добавить();
	ЭлементОформления2.Использование = Истина;
	ЭлементОформления2.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);

	ЭлементУсловияГруппа2  = ЭлементОформления2.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ЭлементУсловияГруппа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	ЭлементУсловияГруппа2.Использование = Истина;
	
	ЭлементУсловия5 = ЭлементУсловияГруппа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия5.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Заказано");
	ЭлементУсловия5.ПравоеЗначение = 0;
	ЭлементУсловия5.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловия5.Использование  = Истина;
	
	ЭлементУсловия6 = ЭлементУсловияГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия6.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Доступно");
	ЭлементУсловия6.ПравоеЗначение = 0;
	ЭлементУсловия6.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловия6.Использование  = Истина;

	Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
		ОформляемоеПоле      = ЭлементОформления2.Поля.Элементы.Добавить();
		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
	КонецЦикла;
Показать
6. SPID 14.12.18 16:39 Сейчас в теме
(5)
В своем примере ЭлементУсловия1 , ЭлементУсловия2 я использовал для наглядности, можно везде оставить ЭлементУсловия.
Вероятно Вы запутались с этими индексами... Первое условие добавляется в ЭлементУсловияГруппа2, второе условие добавляется в просто ЭлементУсловияГруппа (без двойки). Может тут проблема....?
7. alexkulikov1990 14.12.18 16:42 Сейчас в теме
(6)Именно, уже поправил у себя все заработало. Сейчас буду пробовать группу "ИЛИ"
4. YannikAlx 43 14.12.18 15:06 Сейчас в теме
Раскрашивать ты хочешь не колонки а строки - судя по исходным данным.
А в коде пытаешься раскрашивать колонки
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот