Имя: Пароль:
1C
1С v8
Почему не работает условное оформление динамического списка?
0 Климов Сергей
 
19.05.26
09:58
УФ. На форме динамический список СписокУПоставщика, произвольный запрос. В запросе есть поле "Остаток", число. Хочу раскрасить строки в зависимости от величины остатка: больше нуля - один цвет, меньше нуля - другой.
В запросе поле  получается вот так:
    ЕСТЬNULL(ОстаткиУПоставщиковОстатки.КоличествоОстаток, 0) КАК Количество

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

В результате все строки зелёные, как с остатком, так и без. ЧЯДНТ?
1 asady
 
19.05.26
10:40
(0) для начала попытайся установить уо через форму и элемент СписокУПоставщика визуальными методами - ПКМ - Свойства...
Если сможешь, пробуй этого же добиться программно
2 Климов Сергей
 
19.05.26
10:50
(1) Та же фигня, не работает.
3 LienXo
 
19.05.26
10:55
(0) Количество выведено на форму? Если нет - тогда галочку "Использовать всегда" поставь
4 toypaul
 
гуру
19.05.26
10:55
а где поля, к которым УО применяется?
5 Климов Сергей
 
19.05.26
10:59
(3) Да
6 Климов Сергей
 
19.05.26
10:59
(4) В букваре написано, что если поля не указывать, то к всей строке применяется. И оно таки применяется, красит в зелёный цвет. Но без разбора.
7 Климов Сергей
 
19.05.26
11:02
А если условное оформление задавать визуально, в свойствах формы, то оно НЕ применяется. Тоже без разбора.
8 LienXo
 
19.05.26
11:00
(3) так оно у тебя зеленое и так. (4) только заметил, хотел спросить тоже самое
9 toypaul
 
гуру
19.05.26
11:01
А. Думал УО формы добавляется. Обычно УО самого ДС не трогаем. Делаем все через УО формы. Чтобы последователи потом не проклинали.
10 Климов Сергей
 
19.05.26
11:06
(8) См (5). Все строки зелёные, хоть с остатком, хоть без.
11 toypaul
 
гуру
19.05.26
11:29
СписокУПоставщика.Количество если применяется у ДС может убрать "СписокУПоставщика."
12 Мультук
 
гуру
19.05.26
11:42
(10)

Ради интереса.
1) Создал обработку.
Кинул на форму ДС с запросом

ВЫБРАТЬ 
"440" КАК код,
100 как Количество
ПОМЕСТИТЬ ВТ_Т

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ 
"380",
200
      
;
ВЫБРАТЬ
	СтраныМира.Код КАК Код,
	СтраныМира.Ссылка КАК Ссылка,
	СтраныМира.Наименование КАК Наименование,
	СтраныМира.КодАльфа2 КАК КодАльфа2,
	СтраныМира.КодАльфа3 КАК КодАльфа3,
	ЕСТЬNULL(ВТ_Т.Количество, -1) КАК Количество
ИЗ
	Справочник.СтраныМира КАК СтраныМира
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Т
	ПО СтраныМира.Код = ВТ_Т.КОД


2) УО натыкал в форме в самом дин.списке

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

P.S.
Обычно, когда непонятно, NULL это или ноль или...
Я пишу для отладки вот так

ЕСТЬNULL(ОстаткиУПоставщиковОстатки.КоличествоОстаток, -1) КАК Количество

P.P.S.
Я бы почистил кэш, перезагрузился и пошёл бы покурил (осуждаю конечно. Или нет ?).
Ибо явно, ты тут просто где-то обманываешь сам себя.
Ну или жмешь Ctrl+S, а оно не жмется
13 Климов Сергей
 
19.05.26
11:47
Вот так работает:

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

Всем спасибо за волшебные пендели!
14 Климов Сергей
 
19.05.26
11:51
(12) УО работает :-) А обманул я сам себя в двух местах:
1. При программной установке таки надо обязательно указывать оформляемые поля;
2. А если устанавливаешь УО в свойствах формы, то не надо в коде писать УсловноеОформление.Элементы.Очистить();

(9) Таки я сделал УО формы, а не списка. А за что могут быть проклятия, если устанавливать УО списка?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.