Имя: Пароль:
1C
1С v8
Программное условное оформление
0 DrShust
 
05.12.14
10:33
Всем добрый день!
УФ.
Программно с условным оформлением не работал. Есть ТабЧасть документа: Состав. У неё есть реквизиты Номенклатура и ЭтоЛинейка (булево).
Если стоит галка ЭтоЛинейка, тогда в Ячейке номенклатуры должен быть текст "БлаБлаБла". Почему-то нижеописанный код не работает. Убирал отборы, убирал оформляемые поля, но нужного результата нет :((
Вот что добавил в МФ ПриСозданииНаСервере

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

Я понимаю, что в данном случае можно обойтись без программного оформления (в свойствах формы залезть в условное оформление и там прописать это условие).
Просто задача немного посложнее (на место "БлаБлаБла") нужно будет писать текст собранный из нескольких реквизитов ТабЧасти. Типа: Строка(рек1) + Строка(рек2).
Соответственно, только программно загонять в цикл.
1 ilyavorobyev
 
05.12.14
10:34
(0) вот пример тебе
Список.УсловноеОформление.Элементы.Очистить();
        ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
        ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.Идентификатор"); // имя поля
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
        ЭлементОтбора.ПравоеЗначение = 0;
        ЭлементОтбора.Использование = Истина;
        ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "не унифицировано");
        ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(255, 0, 0));
        ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
        ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СтатусУнификации");
        ПолеОформления.Использование = Истина;
2 ilyavorobyev
 
05.12.14
10:35
(0) тебе вместо этого "Объект.Состав.ЭтоЛинейка" нужно просто написать "Состав.ЭтоЛинейка", попробуй
3 DrShust
 
05.12.14
10:38
(2) Не вышло. Но собственно, я отбор вообще убрал, значит, должно ко всем строкам примениться.
4 DrShust
 
05.12.14
10:40
(1) Пример хороший. Просто не стал свой код нагромождать. Использование ЭлементОтбора стоит по умолчанию,в ПолеОформления тоже.
5 DrShust
 
05.12.14
10:41
(1) Этот код из модуля объекта что ли?