Имя: Пароль:
1C
1C 7.7
v7: План раскраски.
0 Eeakie
 
27.02.14
15:03
Добрый день.

В справочнике висят функции на раскраску строк по определенным условиям. Форма начала подтормаживать - решил переделать раскраску. Не очень понял как работать в Formex_ПланРаскраски. На этот реквизит надо функцию вешать?

Предположим есть условие А и условие Б.
Если условие А выполняется - строка красится в красный, если условие Б - синий.
Как это реализовать через "новый" план раскраски?
1 Ёпрст
 
27.02.14
15:05
(0)
План раскраски
Описание
Для ускорения и упрощения работы раскраски таблиц в компоненту с версии 2.0.5.85 введен функционал плана раскраски таблицы. Для его активизации необходимо вызвать метод ИспользоватьПланРаскраски() объекта Сервис с параметром 1 (соответсвенно, для отключения и перехода на старый принцип раскраски надо вызвать тот же метод, но с параметром 0). По умолчанию функционал плана раскраски отключен и работает старая методика раскраски.
Для реализации раскраски по новому функционалу плана раскраски, необходимо добавить в раскрашиваемую таблицу колонку с заголовком "FormEx_ПланРаскраски" (без кавычек, регистронезависимо). Колонка может располагаться в любом месте таблицы. Содержимое этой колонки задает план раскраски таблицы, основанный на тех же макросах, которые описаны в части "Раскраска таблиц". При этом макросы COUNT и INDENT не обрабатываются. В плане раскраски каждая ячейка текущей строки определяется круглыми скобками. В плане учитываются как видимые, так и невидимые колонки. Макросы раскраски надо помещать в места, соответсвующие смене раскраски. Несколько примеров помогу лучше понять этот принцип.
Пример плана раскраски
"()()()(BRUSH[255])()()(BRUSH[NONE)" - обозначает, что начиная с четвертой колонки (включительно) цвет фона ячеек устанавливается красным, а с седьмо раскраска фона отключается и все остальные колонки не раскрашиваются;
"(BRUSH_S[255])" - обозначается, что вся строка, когда она становится текущей, подсвечивается красным фоном.
©formex.als
2 Eeakie
 
27.02.14
15:39
(1) Да Вы, батенька, издеваетесь ;) Читал это уже. Притом от Вас же, только на другом ресурсе. А перед этим в СП...
3 Eeakie
 
27.02.14
15:41
Предвижу следующий вопрос: "И что тут непонятно?".
Ну неужели тяжело написать:
1. Делаешь реквизит;
2. Вешаешь на него функцию;
3. В функции проверяешь каждое условие и красишь как угодно.
4 povar
 
27.02.14
15:42
(3) нахрена тогда вопрос было задавать ? если сам все знаешь ?
5 Ёпрст
 
27.02.14
15:43
(3) И ?
ни разу не понял твоей проблемы..

в формулу функция, которая возвращает строку "со скобочками"
по условию.. и привет.
6 Azverin
 
27.02.14
15:45
(0) Процедура *Списорк*ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если ДанныеСтроки["Количество"] > 0 Тогда
        ОформлениеСтроки.ЦветФона = WebЦвета.Хаки;
    Иначе
                ОформлениеСтроки.ЦветФона = WebЦвета.НейтральноАквамариновый;
    КонецЕсли;
7 Ёпрст
 
27.02.14
15:45
(6) у автора клюшки..
да и в снеговике, кошернее красить в ПриПолученииДанных, имхо
8 Azverin
 
27.02.14
15:46
(7) упс, не углядел.
учту)
9 Eeakie
 
27.02.14
15:49
В (3) чисто интуитивно написал, а оно заработало...
Теперь встал вопрос об "убыстрении" отрисовки. Что-то я разницы не заметил...
10 Ёпрст
 
27.02.14
15:50
(9) разница есть.. + нам отсюда не видно, что в функции у тебя.
11 Ёпрст
 
27.02.14
15:53
Да и.. раскраска может и не так влиять, как твои условия в функции.. мот ты там расчет останков для каждой строки вычисляешь или еще чего, нам отсюда не видно
12 Eeakie
 
27.02.14
15:53
Если фМусор = 1 Тогда
        Если Мусор = 1 Тогда
            Возврат "(BRUSH[" + глПолучитьЦвет(255, 175, 175) + "])";
        КонецЕсли;
    Иначе
        Если ПустоеЗначение(Товар.Ориентир) = 1 Тогда
            Возврат "";
        ИначеЕсли ПустоеЗначение(Товар.ПараметрЗагрузкиЦены) = 1 Тогда
            Возврат "";
        ИначеЕсли ТекущаяДата() - ДатаИзм > 90 Тогда
            Возврат "";
        КонецЕсли;
        
        Возврат "(BRUSH[" + глПолучитьЦвет(175, 255, 175) + "])";
    КонецЕсли;
13 Ёпрст
 
27.02.14
15:55
а товар, это что ?
14 Eeakie
 
27.02.14
15:55
(13) Реквизит справочника.
15 Eeakie
 
27.02.14
15:56
(13) Хитрая замануха. Это справочник "Прайс-лист". Несколько наименований у одного товара могут быть.
16 Ёпрст
 
27.02.14
15:56
у тебя выборочная раскраска включена ?
17 Eeakie
 
27.02.14
15:57
(16) Не очень понял. ВключитьРаскраскуТаблиц() и ИспользоватьПланРаскраски(1) в "ПриНачалеРаботыСистемы()".
18 Eeakie
 
27.02.14
16:00
(16) "№%:;, ВключитьРаскраскуТаблиц() не стоит 1...
19 Ёпрст
 
27.02.14
16:04
(17) делаешь

Процедура ПриНачалеРаботыСистемы()
   ЗагрузитьВнешнююКомпоненту("formex.dll");
   Сервис= СоздатьОбъект("Сервис");
   Сервис.ВключитьРаскраскуТаблиц(1);
   Сервис.ИспользоватьПланРаскраски(1);

....
в Форме списка справочника
Процедура ПослеОткрытия()
   РасшФ = СоздатьОбъект("РасширениеФормы");
   РасшФ.УстановитьФорму(Форма);
   РасшФ.РаскрашиватьТаблицу("МногострочнаяЧасть);
КонецПроцедуры

Т.е расскраска будет включена только там, где нужно
20 Eeakie
 
27.02.14
16:05
(19) Спасибо! Не мог врубиться как конкретную форму начать раскрашивать.
21 Eeakie
 
27.02.14
16:19
Хм, что-то не хочет...
Воткнул в функцию простое

Если Мусор = 1 Тогда
            Возврат "(BRUSH_S[255])";
        КонецЕсли;

Даже так не отрабатывает.
22 Eeakie
 
27.02.14
17:12
Ап.

В ПриНачалеРаботы():
Сервис.ВключитьРаскраскуТаблиц(1);        Сервис.ИспользоватьПланРаскраски(1);

В форме списка справочника в ПослеОткрытия():
РФ = СоздатьОбъект("РасширениеФормы");
РФ.УстановитьФорму(Форма);
РФ.РаскрашиватьТаблицу("МногострочнаяЧасть");

На форме списка висит текстовый реквизит с именем "FormEx_ПланРаскраски". Колонка сделана невидимой. Висит функция Красим()

В Красим():
Если Мусор = 1 Тогда
    Возврат "(BRUSH[255])"; // как в примере
КонецЕсли;

Не работает.
23 Eeakie
 
27.02.14
17:16
Версия Формекса 2.0.5.109 beta.
Может в ней дело?
24 Eeakie
 
27.02.14
19:42
Товарищи, неужели кроме Ёпрст подсказать некому?
25 Eeakie
 
27.02.14
20:00
Вопрос снят. Невнимательность.