Имя: Пароль:
1C
1С v8
УсловноеОформление в УФ
, ,
0 pessok
 
04.12.12
15:58
Коллеги, привет. Продолжаю изучать УФ, и появляются все новые вопросы. Теперь задача следующая. На форме лежит таблица, созданная динамически. К ней привинчены обработчики ожидания. По одному из обработчик в реквизит формы (ТЗ) пишется информация о том, на какой строчке и в какой колонке мы стояли, когда выбрался обработчик. Собственно, это раскраска таблицы пользователем. После того, как все это записалось (а пишется оно нормально), хочу считать данные и заполнить условное оформление, но лыжи не едут...

Вот код, ткните носом в ошибку, плз.

&НаСервере
Процедура УстановитьУсловноеОформление()
   
   УсловноеОформление.Элементы.Очистить();
   
   Для Каждого СтрокаЦветов Из ДанныеПоЦветам Цикл
       
       ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
       
       ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
       ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаЗаполнения"+СтрокаЦветов.КолонкаТаблицы);
       
       ЭлементОтбораСтрока = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
       ЭлементОтбораСтрока.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЗаполнения.НомерСтроки");
       ЭлементОтбораСтрока.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
       ЭлементОтбораСтрока.ПравоеЗначение = СтрокаЦветов.СтрокаТаблицы + 1;
       
       ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", СтрокаЦветов.Цвет);
       
   КонецЦикла;
   
КонецПроцедуры
1 samozvanec
 
04.12.12
16:01
ты хочешь конкретной строке условное оформление задать?
2 pessok
 
04.12.12
16:04
(1) именно
3 pessok
 
04.12.12
16:06
(1) я бы даже сказал, что я хочу делать как в обычных формах а ля

Для Каждого Оф Из ОформленияСтрок Цикл
Если Истина Тогда Оф.Ячейка.ЦветФона = Красный Иначе Оф.Ячейка.ЦветФона = Зеленый
КонецЦикла

и т.п.
4 acsent
 
04.12.12
16:09
у тз нет номера строки, если только руками не создать
5 samozvanec
 
04.12.12
16:10
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
       ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаЗаполнения"+СтрокаЦветов.КолонкаТаблицы);
       
вот это вроде лишнее, если всю строку хочешь выделять. на чем хоть валится?
6 pessok
 
04.12.12
16:10
(4) я в курсе
(5) нигде не валится, ошибок не выдает. в УсловноеОформление элемент на месте. На форме ничего не видно
7 samozvanec
 
04.12.12
16:11
Новый ПолеКомпоновкиДанных("ТаблицаЗаполнения.НомерСтроки");
ТаблицаЗаполнения тут зачем?
8 samozvanec
 
04.12.12
16:11
использование?
9 samozvanec
 
04.12.12
16:13
вобще у тебя так на каждую строку оформление создастся. добавь поле какое-нибудь, заполняй истиной-ложью, по нему оформляй
10 pessok
 
04.12.12
16:50
сорри, отвлекали.
(7) ну так номер строки по строке реквизита я хочу искать.
(8) использование на месте
(9) мне и надо на каждую строку, там не только истина/ложь, там справочник :)
11 pessok
 
04.12.12
16:54
+(10) собственно по этому и создана таблица дополнительная
12 samozvanec
 
04.12.12
16:56
в условном оформлении элемент появился, корректно заполнен?
13 pessok
 
04.12.12
17:00
14 samozvanec
 
04.12.12
17:02
(13) зачем поле задаешь? тебе всю строку покрасить или только это поле?
вобще выглядит нормально. возможно что-то с отбором. использование Истина у отбора?
15 samozvanec
 
04.12.12
17:05
вобще вот такой кусок должен работать

УО = СписокДокументов.УсловноеОформление.Элементы;
ЭлементУО = УО.Добавить();
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Зеленый);
ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементУсловия.ПравоеЗначение = НачалоДня(ТекущаяДата());
16 samozvanec
 
04.12.12
17:06
+ ты в каком событии все это делаешь? может обновить надо форму?
17 pessok
 
04.12.12
17:06
(14) красить только поле. притом в каждой строке раскраска каждого поля по своему условию, собственно условие и заложено в таблице ДанныеПоЦветам

Отбор

http://rghost.ru/42000829.view
18 samozvanec
 
04.12.12
17:07
(17) в отборе у тебя левое значение - ПолеКомпоновкиДанных, правое - число
19 pessok
 
04.12.12
17:08
(18)
а такой код

ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементУсловия.ПравоеЗначение = НачалоДня(ТекущаяДата());

разве не такое же сравнение вернет?..
20 samozvanec
 
04.12.12
17:09
(18) о чем это я...
21 samozvanec
 
04.12.12
17:10
(19) вернет вернет, (16) смотри
22 pessok
 
04.12.12
17:14
(21) это делается в динамически создаваемой команде. потом вызывается
Элементы.ТаблицаЗаполнения.Обновить();
23 samozvanec
 
04.12.12
17:42
ЭлементОтбораСтрока.ПравоеЗначение = СтрокаЦветов.СтрокаТаблицы + 1;

а вот тут уверен?
24 samozvanec
 
04.12.12
17:44
если УО заполнено верно - косяк в отборе. попробуй задать отбор другой, который обязательно сработает. типа номер строки больше 1
25 pessok
 
04.12.12
17:47
(24) пробовал я уже такой отбор :( не уверен, что УО правильно заполнено
26 samozvanec
 
04.12.12
17:49
(25) судя по коду - все верно. сделай руками УО в режиме предприятия и посмотри, чем он от твоего отличаться будет
27 pessok
 
04.12.12
17:50
(26) у меня таблица демонически создается. пробовал для другой таблицы, вроде бы один в один
28 samozvanec
 
04.12.12
17:56
вернемся к (6). у тебя элемент есть в УО. попробуй снять использование, сохранить, установить, сохранить... нутыпонел, чето поделай с ним интерактивно, чтоб  заработал, смотри, что
29 pessok
 
04.12.12
17:58
(28) ладно, мерси, завтра буду ковыряться :) щас уже хваааатит)