Имя: Пароль:
1C
1C 7.7
v7: Раскраска ячейки многострочной части документа.
,
0 Slim747
 
19.09.19
15:34
Здравствуйте уважаемые программисты.
Снова к вам с очередной проблемой.
Необходимо раскрасить цветом определенные ячейки многострочной части документа.
Есть Formex. С раскраской строки целиком разобрался. А вот как раскрасить конкретные ячейки?
Перелопатил кучу информации. Голову сломал а решения до сих пор нет.
Может кто сталкивался. Подскажите алгоритм. Или хоть в какую сторону копать.
Заранее благодарен...
1 АЛьФ
 
19.09.19
15:36
Не надо перелопачивать кучу информации. Все есть в синтаксис-помощнике. Надо использовать план раскраски.

"()()()(BRUSH[255])()()(BRUSH[NONE])" - обозначает, что начиная с четвертой колонки (включительно) цвет фона ячеек устанавливается красным, а с седьмой раскраска фона отключается и все остальные колонки не раскрашиваются;
"(BRUSH_S[255])" - обозначается, что вся строка, когда она становится текущей, подсвечивается красным фоном.
2 Slim747
 
19.09.19
15:46
Вопрос.
"()()()(BRUSH[255])()()(BRUSH[NONE])"
при помощи данной записи раскрашивается только указанная строка или все строки в многострочной части.
Можно ли сделать несколько условий? Т.е. в одной строке например 4-ую колонку раскрасить синим, а 7-ю зеленым цветом?
3 Slim747
 
19.09.19
15:47
Разобрался в строке...
4 Slim747
 
19.09.19
15:49
Эта запись будет работать для всей многострочной части или только для конкретной строки?
5 АЛьФ
 
19.09.19
15:59
2(4) В той строке, в которой указана, будет работать. В другой строке в колонке FormEx_ПланРаскраски можно указать другие параметры раскраски.
6 Slim747
 
19.09.19
16:03
ОК. Будем пробовать...
7 Slim747
 
19.09.19
16:03
По результатам отпишусь...
8 Slim747
 
20.09.19
08:49
Получилось!!!!)))
А подскажите можно ли как то управлять этим.
Т.е. создать кнопку, при нажатии на которую на колонке устанавливался выбранный цвет???
9 АЛьФ
 
20.09.19
08:51
2(8) Повесить в колонку FormEx_ПланРаскраски функцию и в ней формировать строку раскраски как угодно.
10 Slim747
 
20.09.19
10:35
Походу что то не так делаю....

Перем парам;
Функция РаскраситьКолонки(парам)
    Перем Рез;                  

    Рез = парам;
    
    Возврат Рез;        
    
КонецФункции


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

Процедура ПокраситьВКрасный()  
    Перем п;
    п = "()()()()(BRUSH[250])()";
    РаскраситьКолонки(п);    
КонецПроцедуры
11 victuan1
 
20.09.19
11:49
(10) На колонку FormEx_ПланРаскраски какую функцию повесили?
12 АЛьФ
 
20.09.19
12:58
2(10) Код в ПриОткрытии не нужен.
ПокраситьВКрасный() - это функция на кнопке? Так не работает. Кликаешь на колонке FormEx_ПланРаскраски, на закладке "Дополнительно" в поле "Формула" прописываешь вызов функции. Далее в этой функции уже рулишь строкой раскраски.
13 Slim747
 
20.09.19
14:11
Функция на колонке  FormEx_ПланРаскраски  РаскраситьКолонки(парам)
14 Slim747
 
20.09.19
14:13
ПокраситьВКрасный() функция на кнопке.
Пытался при нажатии устанавливать значение раскраски
15 HawkEye
 
20.09.19
14:17
(14) как ты считаешь, что делает этот код:
Функция РаскраситьКолонки(парам)
    Перем Рез;                  
    Рез = парам;
    Возврат Рез;
16 Slim747
 
20.09.19
14:21
Подскажите каким образом тогда контролить саму раскруску?
Т.е. устанавливать цвет ячейки, выбранной в таблице.
17 Slim747
 
20.09.19
14:26
По коду
Функция РаскраситьКолонки(парам)
установлена на служебной колонке FormEx_ПланРаскраски
Пробовал вызвать ее с передачей параметра плана раскраски.
Пытаюсь получить от функции возврат установки для раскраски таблицы.
Или я в чем то ошибаюсь и не так пишу....
18 АЛьФ
 
20.09.19
14:30
Я дико извиняюсь. Ты начал программировать в 1С вчера? Может потренироваться на простых примерах, посмотреть типовые?
19 Slim747
 
20.09.19
14:32
программирую уже давно. Просто с раскраской не сталкивался.
Не судите строго.....
20 dedmoroz777
 
20.09.19
14:34
Функция РазукраситьГрёбанныеКолонки()
   Если (тут какое-то условие) Тогда
       Возврат "()()()()(BRUSH[250])()";
   Иначе
       Возврат "()()(BRUSH[250])()";
   КонецЕсли;
КонецФункции
21 HawkEye
 
20.09.19
14:48
(17) функция возвращает то, что в нее передаешь... зачем эта функция нужна?
никакого отношения к раскраске она не имеет..

чтобы раскрасить колонку, надо перед ней поместить колонку (скрыть её) и в ней написать "()()()(BRUSH[255])()()(BRUSH[NONE])" или что ты там хочешь разукрасить.


а чтобы в колонку написать то, что надо, надо в нее добавить функцию которая будет возвращать то, что надо, для этого есть код в (20)
22 Slim747
 
20.09.19
15:27
Спасибо всем за информацию...
Буду пытаться решить проблему.
Исходный код выложу в сообщении.
23 Slim747
 
24.09.19
09:19
Рабочий код выборочной раскраски элементов многострочной части документа
Модуль формы:

Функция РаскраситьКолонки()
    Возврат Память;                      
КонецФункции  

Процедура ПокраситьВЦвет()
    Перем ТК;
    Перем СТ_1,СТ_2,СТ_3,СТ_4,СТ_5,СТ_6,СТ_7;
    Перем врПамять;
    Перем знЦвет;
    
    //Серв = СоздатьОбъект("Сервис");
    знЦвет = Сервис.ВыбратьЦвет(1,);
    
    ПолучитьСтрокуПоНомеру(НомерСтроки);  
    
    Если ПустоеЗначение(Память) = 1 Тогда
        Память = "()()()()(BRUSH[NONE])(BRUSH[NONE])(BRUSH[NONE]";
    КонецЕсли;  
    //  
    врПамять = СокрЛП(Память);
    
    СТ_1 =Лев(врПамять,Найти(врПамять,")"));
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_2 =Лев(врПамять,Найти(врПамять,")"));
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_3 =Лев(врПамять,Найти(врПамять,")"));
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_4 =Лев(врПамять,Найти(врПамять,")"));
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_5 =Лев(врПамять,Найти(врПамять,")"));
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_6 =Лев(врПамять,Найти(врПамять,")"));              
    врПамять = Прав(врПамять,СтрДлина(врПамять)-Найти(врПамять,")"));
    СТ_7 =Лев(врПамять,Найти(врПамять,")"));              

    ТК = Форма.ТекущаяКолонка();
    
    Если ТК = "Пт2" Тогда
        СТ_5 = "(BRUSH["+знЦвет+"])";
    КонецЕсли;
    
    Если ТК = "Пт3" Тогда
        СТ_6 = "(BRUSH["+знЦвет+"])";
    КонецЕсли;
    
    Если ТК = "Пт9" Тогда
        СТ_7 = "(BRUSH["+знЦвет+"])";
    КонецЕсли;
    
    Память = СТ_1+СТ_2+СТ_3+СТ_4+СТ_5+СТ_6+СТ_7;
КонецПроцедуры

Процедура ПриОткрытии()        
    Перем ФормаРасш;
    
    ФормаРасш = 0;
    ФормаРасш = СоздатьОбъект("РасширениеФормы");
    ФормаРасш.РаскрашиватьТаблицу("МногострочнаяЧасть");    
    ПриЗаписиПерепроводить(1);
КонецПроцедуры
24 Злопчинский
 
24.09.19
09:27
расширениеформы надо создавать в ПослеОткрытия
25 Slim747
 
24.09.19
09:35
В чем отличие?
26 Злопчинский
 
24.09.19
11:28
(25) ну, если работает в твоем случае - то в твоем случае - ни в чем
27 Slim747
 
24.09.19
11:46
Все работает безупречно.
28 АЛьФ
 
24.09.19
11:55
Еще раз скажу, что код в ПриОткрытии() абсолютно бесполезен.
29 Злопчинский
 
24.09.19
12:04
(28) вот представь, как ты сейчас автора унизил... ;-)
30 АЛьФ
 
24.09.19
16:51
2(29) Я дико извинился еще в (18). Так что теперь можно.