Имя: Пароль:
1C
 
Условное оформление таблицы на форме
0 termos
 
30.09.15
12:49
Здравствуйте!

Скажите, пожалуйста, почему следующий код неправильно отрабатывает, когда добавляешь сравнение с перечислением? (без него работает)

Процедура УстановитьОформлениеТабличнойЧастиТовары(Форма)
    
    УсловноеОформление = Форма.УсловноеОформление;
    ЭлементыФормы = Форма.Элементы;
    ТаблицаФормы = ЭлементыФормы.ГруппаТовары.ПодчиненныеЭлементы["Товары"];
    
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    
    ПутьКТЧ = ТаблицаФормы.ПутьКДанным;
    
    ОбщегоНазначенияУТ.ЗаполнитьРекурсивноПоляУсловногоОформления(ЭлементУсловногоОформления.Поля, ТаблицаФормы.ПодчиненныеЭлементы);
    
    ГруппаОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

Без куска кода (элемента отбора) всё работает:

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

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

У кого какие мысли? Подскажите, куда смотреть, пожалуйста.
1 jurassic
 
30.09.15
12:50
правое значение ни разу не список
2 termos
 
30.09.15
12:53
Да, извиняюсь! Я по разному пробовал. И в списке и просто.. Вот осталось ВСписке перед копированием сюда! Сорри.
Факт в том что не работает и не ругается даже если
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
3 termos
 
30.09.15
12:54
Если не добавлять сравнение с перечислением, то условное оформление работает и все отмененные строки отмечаются красным цветом, а если добавлять сравнение с перечислением для проверки, что это товар, то ничего не происходит и не отмечается.
4 jurassic
 
30.09.15
12:55
а код написал для "неотменённые товары красным"
5 termos
 
30.09.15
12:57
(4) Тороплюсь в ответах. Всё верно - задача отметить все неотмененные строки, которые имеют тип номенклатуры "товар".

Данный код не работает:

Процедура УстановитьОформлениеТабличнойЧастиТовары(Форма)
    
    УсловноеОформление = Форма.УсловноеОформление;
    ЭлементыФормы = Форма.Элементы;
    ТаблицаФормы = ЭлементыФормы.ГруппаТовары.ПодчиненныеЭлементы["Товары"];
    
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    
    ПутьКТЧ = ТаблицаФормы.ПутьКДанным;
    
    ОбщегоНазначенияУТ.ЗаполнитьРекурсивноПоляУсловногоОформления(ЭлементУсловногоОформления.Поля, ТаблицаФормы.ПодчиненныеЭлементы);
    
    ГруппаОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Отменено");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.ТипНоменклатуры");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Товар;
    
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
    
КонецПроцедуры
6 jurassic
 
30.09.15
13:00
(5) руками пробовал?
7 Nuobu
 
30.09.15
13:01
(5) ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

А

ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НЕРавно;

Работает?
8 termos
 
30.09.15
13:10
(7) попробовал сейчас. Срабатывает первое условие, но не срабатывает второе, то есть окрашиваются все неотмененные строки и в том числе услуги.
9 termos
 
30.09.15
13:10
и товары.
10 termos
 
30.09.15
13:13
Вот коллекция элементов отбора - посмотрел при отладке.

https://gyazo.com/f66122f49cc39160f9bb6dabe522be98

Выглядит всё правильно.
11 termos
 
30.09.15
13:14
(10) И в данном случае отрабатывает только первое условие
12 jurassic
 
30.09.15
13:17
отрабатывают оба, сравнение с типом у тебя истина
13 Nuobu
 
30.09.15
13:19
(8) Тебя это ни на что не наталкивает??))
14 termos
 
30.09.15
13:27
У меня в документе 2 строки.
В первой строке тип номенклатуры товар, а во второй тип номенклатуры услуга и обе строки не отменены.

При отборе, допустим, "Отменено = Ложь" и "ТипНоменклатуры Не Равно Товар" должна окраситься только одна строчка - вторая.

Или я не прав?
15 termos
 
30.09.15
13:29
(12) как же истина, если в документе разные типы номенклатуры имеются? почему окрашиваются обе?
16 jurassic
 
30.09.15
13:30
(15) >как же истина
так работает конкатенация
17 termos
 
30.09.15
13:30
(12) (13) А если делаешь сравнение "Равно Товар", то не окрашивается ни одна строка :)
18 jurassic
 
30.09.15
13:30
(16) *конъюнкция, конечно
19 jurassic
 
30.09.15
13:30
(17) а вот тут уже ложь
20 termos
 
30.09.15
13:32
(19) Так какой выход из ситуации? Не могу понять что-то.
21 jurassic
 
30.09.15
13:34
взять в руки мышь и пытать форму интерактивно, пока не дойдёт
22 termos
 
30.09.15
13:39
(21) спасибо за совет! но как пытать её интерактивно, если интерактивного доступа к условному оформлению таблицы нет?
23 Nuobu
 
30.09.15
13:42
(22) Юзай простой отбор.
24 jurassic
 
30.09.15
13:43
(22) это как?
25 termos
 
30.09.15
13:43
(21) Всё я понял о чем речь :) Спасибо!
ИСТИНА, ЛОЖЬ в логической операции И.
26 jurassic
 
30.09.15
13:43
аллах акбар
27 termos
 
30.09.15
13:44
(26) )))) Спасибо. Хорошего Вам дня!
28 termos
 
30.09.15
14:15
(26) Что-то всё равно не могу понять что не так - условия отбора в коде прописываю следующие - "Отменено = Ложь" И "ТипНоменклатуры Равно Товар". Группа элементов отбора И.

Строки ТЧ документа (отмененных строк не имеется):
1) Номенклатура - Товар: Отменено = Ложь (результат - ИСТИНА), ТипНоменклатуры = Товар (результат - ИСТИНА) ИТОГО ПО СТРОКЕ: Истина И Истина = Истина! Эта строчка подходит по отбору. Должна быть окрашена.
2) Номенклатура - Услуга: Отменено = Ложь (результат - ИСТИНА), ТипНоменклатуры = Товар (результат - ЛОЖЬ) ИТОГО ПО СТРОКЕ: Истина И Ложь = Ложь! Эта строчка не подходит по отбору. Не должна быть окрашена.

А у меня же при данном условии не окрашивается ни одна строка.

Что я делаю не так? Ведь условие то верное стоит.
29 jurassic
 
30.09.15
14:20
>ТипНоменклатуры = Товар (результат - ИСТИНА)
вот откуда этот вывод?
30 termos
 
30.09.15
14:22
(29) Тип номенклатуры установлен в карточке товара у данной номенклатуры и он равен "Товар".
31 termos
 
30.09.15
14:25
(29) По сути этим условием мы и проверяем тип номенклатуры Объект.Товары.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
32 jurassic
 
30.09.15
14:32
а поморгай Отключеной. или вовсе убери
33 jurassic
 
30.09.15
14:32
(32) Отмененой
34 termos
 
30.09.15
14:41
(33) Убрал условие на проверку отменена ли позиция... Ситуация не изменилась.

Возможно ли, что неправильно отрабатывает потому что путь такой длинный? Объект.Товары.Номенклатура.ТипНоменклатуры
35 jurassic
 
30.09.15
14:43
на форме есть этот тип?
36 jurassic
 
30.09.15
14:44
(35) а пофиг, у меня такое не видит, даже если есть
37 termos
 
30.09.15
14:47
(36) Так как быть в итоге?
38 jurassic
 
30.09.15
14:49
ну, например, заделать колонку и заполнять её
39 jurassic
 
30.09.15
14:49
или "номенклатура в списке товаров"
40 termos
 
30.09.15
15:03
(38) Сейчас попробую решение с колонкой и отпишусь.
41 termos
 
30.09.15
15:18
(39) В общем, действительно проблема в длинном пути в отборах условного оформления. Создал новый реквизит табличной части программно, заполняя его типом номенклатуры и в последующем сравнивал уже с этим новым реквизитом, а не с длинным путем "Объект.Товары.Номенклатура.ТипНоменклатуры".

Всё заработало!

jurassic, благодарю за внимание и идеи!