Кое-что важное об условном оформлении

Столкнулся с проблемой в условном оформлении динамического списка, которая дважды поставила меня в тупик. Но, слава богу, я догадался в чем проблема. Думаю, вам будет полезна эта информация.

Первое. Нельзя использовать поля реквизитов.

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

Поэтому пришлось менять запрос динамического списка:

&НаСервере
Процедура M_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)      

	Маркер = "СправочникНоменклатура.Весовой КАК Весовой,";
	СписокЗапасы.ТекстЗапроса = СтрЗаменить(СписокЗапасы.ТекстЗапроса, Маркер, Маркер + " СправочникНоменклатура.дор_МинМаксЗаполнено КАК дор_МинМаксЗаполнено, ");
	СписокЗапасы.УстановитьОбязательноеИспользование("дор_МинМаксЗаполнено", Истина);
	
	ЭлементОформления = УсловноеОформление.Элементы.Добавить();
	
	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокЗапасы.дор_МинМаксЗаполнено"); // имя поля
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
	ЭлементОтбора.ПравоеЗначение = Ложь;
	ЭлементОтбора.Использование = Истина;

	Элемент = ЭлементОформления.Оформление.Элементы.Найти("ЦветФона");
	Элемент.Значение = WebЦвета.СеребристоСерый;
	Элемент.Использование = Истина;
	
	ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
	ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Наименование");
	ПолеОформления.Использование = Истина;

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

Второе. Реквизит условного оформления должен иметь галочку «Использовать всегда»

Но и после этого у меня не заработало. Методом проб и ошибок я решил проблему, программно установив галочку «Использовать всегда» у своего реквизита процедурой УстановитьОбязательноеИспользование.

Так что условное оформление таит в себе много нюансов, друзья…

UPD 2023-05-29: однако есть способ, который позволяет обойти все эти сложности. Мне подсказал его читатель в комментириях, вот он:

	//=== Оформление поля мин-макс
	ЭлементОформления = СписокЗапасы.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление.Элементы.Добавить();
	Элемент = ЭлементОформления.Оформление.Элементы.Найти("ЦветФона");
	Элемент.Значение = WebЦвета.СеребристоСерый;
	Элемент.Использование = Истина;
	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура.дор_МинМаксЗаполнено");
	ЭлементОтбора.ПравоеЗначение = Ложь;
	ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
	ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Наименование");
	ПолеОформления.Использование = Истина;

Здесь вместо условного оформления формы используется условное оформление фиксированных настроек компоновщика настроек списка. Неисповедимы пути 1Сные!

Среда: 3.0.3.147 Платформа: 8.3.20.1710

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. Гыня:

    Все прекрасно работает…

    Процедура M_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

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

    Элемент = ЭлементОформления.Оформление.Элементы.Найти(«ЦветФона»);
    Элемент.Значение = WebЦвета.СеребристоСерый;
    Элемент.Использование = Истина;

    ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номенклатура.дор_МинМаксЗаполнено»);
    ЭлементОтбора.ПравоеЗначение = Ложь;

    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(«Наименование»);
    ПолеОформления.Использование = Истина;

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

    • не работает в условном оформлении формы. Но если это работает в компоновщике настроек списка, отлично.

Добавить комментарий

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