Имя: Пароль:
1C
1С v8
УФ: раскраска строк в тонком клиенте
0 Blade Runner
 
07.11.12
14:17
Необычный вопрос: как в зависимости от поля Статус раскрашивать в табличной части справочника в тонком клиенте?

не работает такой код на клиенте:
   ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();

пишет "Условное оформление недоступно на клиенте"
что я делаю не так?
1 Blade Runner
 
07.11.12
14:31
апну, вроде ж не пятница...
2 Goggy
 
07.11.12
14:36
а судя по твоему вопросу именно тяпница...



УправляемаяФорма (ManagedForm)
УсловноеОформление (ConditionalAppearance)

Использование:
Только чтение.

Описание:
Тип: УсловноеОформлениеКомпоновкиДанных.
Содержит настройки условного оформления формы.

Доступность:
Сервер.
3 Defender aka LINN
 
07.11.12
14:39
"пишет "Условное оформление недоступно на клиенте"
что я делаю не так?" - не читаешь нихрена, не?
4 НастоящееИмя
 
07.11.12
14:39
(3)видимо не доступно
5 НастоящееИмя
 
07.11.12
14:40
УправляемаяФорма (ManagedForm)
УсловноеОформление (ConditionalAppearance)
Использование:

Только чтение.
Описание:

Тип: УсловноеОформлениеКомпоновкиДанных.
Содержит настройки условного оформления формы.

Доступность:

Сервер.
6 vmv
 
07.11.12
14:41
я так сделал когда у меня был мешок травы, по примеру кода ясно, как динамически менять УО Правда у меня еще есть справочник цветовых палитр, где можно задать наборы цветов на все случаи жизни и не терзать каждой УО каждой хрени всякий раз


//
// Add_ComM_ОтчетыКС.ПолучитьСписокЦветовУо(РодительЦветов, "RGB10", "Счет", Истина);
//
Функция ПолучитьСписокЦветовУо(Знач РодительЦветов = Неопределено, RGB10ПолеКдИмя, ПолеКдИмя = "", ПолеКдПроверкаЗаполнения = Истина) Экспорт
   
   СзЦвета   = Add_ComM_ОтчетыС.ПолучитьСписокЦветов(РодительЦветов, Ложь);
   СзЦветаУо = Новый СписокЗначений;
   
   НомерПп = 0;
   
   Для каждого ЭлементСз Из СзЦвета Цикл
   
       СтвОтбора = Новый Соответствие;
       
       СтвЭлементаОтбора = Новый Соответствие;
       СтвЭлементаОтбора.Вставить("ЛевоеЗначение" , Новый ПолеКомпоновкиДанных(RGB10ПолеКдИмя));
       СтвЭлементаОтбора.Вставить("ВидСравнения"  , ВидСравненияКомпоновкиДанных.Равно);
       СтвЭлементаОтбора.Вставить("ПравоеЗначение", ЭлементСз.Представление);
       СтвОтбора.Вставить("СтвЭлементаОтбора1", СтвЭлементаОтбора);
       
       Если ЗначениеЗаполнено(ПолеКдИмя) И ПолеКдПроверкаЗаполнения Тогда
           
           СтвЭлементаОтбора = Новый Соответствие;
           СтвЭлементаОтбора.Вставить("ЛевоеЗначение" , Новый ПолеКомпоновкиДанных(ПолеКдИмя));
           СтвЭлементаОтбора.Вставить("ВидСравнения"  , ?(ЗначениеЗаполнено(ПолеКдИмя), ВидСравненияКомпоновкиДанных.Заполнено, ВидСравненияКомпоновкиДанных.НеЗаполнено));
           СтвЭлементаОтбора.Вставить("ПравоеЗначение", Неопределено);
           СтвОтбора.Вставить("СтвЭлементаОтбора2", СтвЭлементаОтбора);
           
       КонецЕсли;
       
       СтвЗнчПараметров = Новый Соответствие;
       СтвЗнчПараметров.Вставить("ЦветФона", ЭлементСз.Значение);
       //... установка прочих значений параметров
       
       СтруктураЭлементаУо = Новый Структура;
       СтруктураЭлементаУо.Вставить("СтвЗнчПараметров", СтвЗнчПараметров);
       СтруктураЭлементаУо.Вставить("СтвОтбора"       , СтвОтбора);
       
       НомерПп = НомерПп + 1;
       КодПп   = Формат(НомерПп, "ЧЦ=5; ЧН=; ЧВН=; ЧГ=");
       
       СзЦветаУо.Добавить(СтруктураЭлементаУо, КодПп);
       
   КонецЦикла;

   СзЦветаУо.СортироватьПоПредставлению();
   
   Возврат СзЦветаУо;
   
КонецФункции

//
// Варианты вызова:
//
// Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "RGB10",, Ложь);
//
// Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "СтрокаБ.RGB10",, Ложь);
//
// Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "RGB10", "Счет", Истина);
//
Функция УстановитьЦветаУо(Уо, РодительЦветов = Неопределено, RGB10ПолеКдИмя, ПолеКдИмя = "", ПолеКдПроверкаЗаполнения = Истина, ПоляРесурсов = Ложь) Экспорт
   
   // Получим УИД текущего пользователя строкой и ключ поиска элемента в ПредставлениеПользовательскойНастройки
   УидПлзСтр = Add_ComM_ОтчетыС.ТекущийПользовательИд(Истина);
   Если ЗначениеЗаполнено(ПолеКдИмя) Тогда
       КлючВПредставлениеПлзНс = ПолеКдИмя + "/" + УидПлзСтр;
   ИначеЕсли ПоляРесурсов Тогда
       КлючВПредставлениеПлзНс = "ПоляРесурсов" + "/" + УидПлзСтр;
   Иначе    
       КлючВПредставлениеПлзНс = УидПлзСтр;
   КонецЕсли;
   
   СзЦветаУо  = ПолучитьСписокЦветовУо(РодительЦветов, RGB10ПолеКдИмя, ПолеКдИмя, ПолеКдПроверкаЗаполнения);
   ЭлементыУо = Уо.Элементы;
   
   // Получим в массив все добавленные ранее этим методом элементы условного оформления по УидПлзСтр и ПолеКдИмя
   мЭлементыУо = Новый Массив;
   Для каждого ЭлементУо Из ЭлементыУо Цикл
       Если Найти(ЭлементУо.ПредставлениеПользовательскойНастройки, КлючВПредставлениеПлзНс) Тогда
           мЭлементыУо.Добавить(ЭлементУо);
       КонецЕсли;
       Если Найти(ЭлементУо.ИдентификаторПользовательскойНастройки, КлючВПредставлениеПлзНс) Тогда
           мЭлементыУо.Добавить(ЭлементУо);
       КонецЕсли;
   КонецЦикла;
   
   // Удалим все добавленные ранее этим методом элементы условного оформления по ИдПн
   Для каждого ЭлементУо Из мЭлементыУо Цикл
       ЭлементыУо.Удалить(ЭлементУо);
   КонецЦикла;
       
   Для каждого СзЦветаУоЭлемент Из СзЦветаУо Цикл
       
       СтруктураЭлементаУо = СзЦветаУоЭлемент.Значение;
       
       // Соответствие значений парметров условного оформления текущего элемента условного оформления
       СтвЗнчПараметров = СтруктураЭлементаУо.СтвЗнчПараметров;
       СтвЗнчПараметровКво = СтвЗнчПараметров.Количество();
       Если НЕ СтвЗнчПараметровКво Тогда
           Продолжить;
       КонецЕсли;
       
       // Соответствие отбора условного оформления текущего элемента условного оформления
       СтвОтбора    = СтруктураЭлементаУо.СтвОтбора;
       СтвОтбораКво = СтвОтбора.Количество();
       Если НЕ СтвОтбораКво Тогда
           Продолжить;
       КонецЕсли;
       
       // Инициализация текущего элемента условного оформления
       ЭлементУо = ЭлементыУо.Добавить();
       ЭлементУо.Представление = СзЦветаУоЭлемент.Представление + "/" + RGB10ПолеКдИмя;
       ЭлементУо.ПредставлениеПользовательскойНастройки = ЭлементУо.Представление + "/" + КлючВПредставлениеПлзНс;
       
       Для каждого СтвЗнчПараметровЭлемент Из СтвЗнчПараметров Цикл
           ТекущийПараметрКД = Новый ПараметрКомпоновкиДанных(СтвЗнчПараметровЭлемент.Ключ);
           ЗнчПараметраНастроекКД = ЭлементУо.Оформление.НайтиЗначениеПараметра(ТекущийПараметрКД);
           Если ЗнчПараметраНастроекКД = Неопределено Тогда
               Продолжить;
           КонецЕсли;
           ЗнчПараметраНастроекКД.Использование = Истина;
           ЗнчПараметраНастроекКД.Значение = СтвЗнчПараметровЭлемент.Значение;
       КонецЦикла;
       
       // Инициализация отбора по текущему элементу условного оформления
       Если СтвОтбораКво = 1 Тогда
           
           // Если соответствие содержит один элемент, то это элемент Уо с простым отбором.
           СтвЭлементаОтбора = СтвОтбора.Получить("СтвЭлементаОтбора1");
           
           ЭлементОтбора = ЭлементУо.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
           
           ЭлементОтбора.Использование  = Истина;
           ЭлементОтбора.ЛевоеЗначение  = СтвЭлементаОтбора.Получить("ЛевоеЗначение");
           ЭлементОтбора.ВидСравнения   = СтвЭлементаОтбора.Получить("ВидСравнения");
           ЭлементОтбора.ПравоеЗначение = СтвЭлементаОтбора.Получить("ПравоеЗначение");
           
       ИначеЕсли СтвОтбораКво > 1 Тогда
           
           // Если соответствие содержит более чем один элемент, то это элемент Уо с групповым отбором.
           // Инициализируем группу элементов отбора по текущему элементу условного оформления
           ГруппаИОтбораУо = ЭлементУо.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
           ГруппаИОтбораУо.Использование = Истина;
           ГруппаИОтбораУо.ТипГруппы     = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
           
           Для каждого СтвЭлементаОтбораКЗ Из СтвОтбора Цикл
               Если СтвЭлементаОтбораКЗ.Ключ = "Цвет" Тогда
                   Продолжить;
               КонецЕсли;
               ЭлементОтбора                = ГруппаИОтбораУо.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
               ЭлементОтбора.Использование  = Истина;
               ЭлементОтбора.ЛевоеЗначение  = СтвЭлементаОтбораКЗ.Значение.Получить("ЛевоеЗначение");
               ЭлементОтбора.ВидСравнения   = СтвЭлементаОтбораКЗ.Значение.Получить("ВидСравнения");
               ЭлементОтбора.ПравоеЗначение = СтвЭлементаОтбораКЗ.Значение.Получить("ПравоеЗначение");
           КонецЦикла;
           
       Иначе    
           
           Продолжить;
           
       КонецЕсли;
       
       // Инициализация полей по текущему элементу условного оформления
       ЭлементУоПоляЭлементы = ЭлементУо.Поля.Элементы;
       
       Если ЗначениеЗаполнено(ПолеКдИмя) Тогда
           ПолеОформления = ЭлементУоПоляЭлементы.Добавить();
           ПолеОформления.Использование = Истина;
           ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПолеКдИмя);
           
       ИначеЕсли ПоляРесурсов Тогда    
           Для каждого ДоступноеПолеКд Из Уо.ДоступныеПоляПолей.Элементы Цикл
               Если ДоступноеПолеКд.Ресурс И (НЕ ДоступноеПолеКд.Папка) И (НЕ ДоступноеПолеКд.Таблица) Тогда
                   ПолеОформления = ЭлементУоПоляЭлементы.Добавить();
                   ПолеОформления.Использование = Истина;
                   ПолеОформления.Поле = ДоступноеПолеКд.Поле;
                   
               КонецЕсли;
           КонецЦикла;
           
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Истина;
   
КонецФункции
7 vmv
 
07.11.12
14:44
+(6) эти медоты КС, т.е. работают и на клиенте и на сервере, так и должно быть для УО, ибо модификации УО может понадобиться

1. ПриСозданииФормы, т.е. на сервере
2. По воздействию пользователя на управляющий реквизит формы или элемент настройки в настройке варианта компоновки, т.е. на клиенте
8 Blade Runner
 
07.11.12
14:52
вотжеж набросились, (1)(2)(3) я аналогично книге делаю.
Демонстрационная конфигурация "Оформление списков" к книге "Разработка управляемого интерфейса" (1.0.0.1)

(6) спасибо, вроде то что нужно.
9 Blade Runner
 
07.11.12
14:57
о! а вот что показывает мой СП
может у меня другоей СП? :)

УсловноеОформление (ConditionalAppearance)
УсловноеОформление (ConditionalAppearance)
Элементы коллекции:

ЭлементУсловногоОформления
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы условного оформления.
Возможно обращение к элементу оформления посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).

Свойства:

<Имя элемента оформления> (<Format element name>)

Методы:

Вставить (Insert)
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Очистить (Clear)
Получить (Get)
ПолучитьДоступныеПоля (GetAvailableFields)
Сдвинуть (Move)
Удалить (Delete)
УстановитьДоступныеПоля (SetAvailableFields)

Конструкторы:

Основной

Описание:

Содержит набор условных оформлений областей.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Сериализуется.
См. также:

ПостроительОтчета, свойство УсловноеОформление
10 vmv
 
07.11.12
15:00
(9) не все так просто чувак, в сабже неявно поставлен вопрос, как установить занчение парметров УО связанных с цветом(Цвет фона, текста и т.д.) с ОТБОРОМ, так что кописпасть сп дальше)
11 Blade Runner
 
07.11.12
15:18
(10) чувак, и я о том же, не все так просто, не понимаю вот почему!
читаю твой код, а расскажи пожалуйста, какая у тебя была задача?.. в (7)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой