Имя: Пароль:
1C
1C 7.7
v7: FormEx как изменять цвет по условию на экранной форме
0 Maximysis
 
03.09.12
12:34
Нужно закрашивать ячейку реквизит табличной части документа при изменении этого реквизита. Крашу через FormEx "BRUSH[255]" вставленный в текст > Формула. А как быть если условие меняется на форме?
1 fedoss
 
03.09.12
12:37
?(НужноРаскрасить = 1, "BRUSH[255]", "")
2 PuhUfa
 
03.09.12
12:38
Форма.Обновить не прокатывает?
3 ЧеловекДуши
 
03.09.12
12:48
1. Регистрируешь компоненту

       //Загрузить компоненты, которые не требуют регистрации! (И некоторые не нужно грузить независимо!)
       //----FormEx.dll
       ИмяБиблиотеки="FormEx.dll";
       ОписаниеОшСИС="FormEx.dll";
       Если Сред(СтрЗагрузки,6,1)="1" Тогда
           Если ФС.СуществуетФайл(КаталогДЛЛ+ИмяБиблиотеки)=1 Тогда
               Если ЗагрузитьВнешнююКомпоненту(КаталогДЛЛ+ИмяБиблиотеки)=0 Тогда
                   глСообщить("Компонента "+ОписаниеОшСИС+" не загружена!");
               Иначе
                   РезЗагр=РезЗагр+1;
               КонецЕсли;
           Иначе
               Если БезКом=0 Тогда
                   глСообщить("В каталоге ["+КаталогДЛЛ+"] нет файла - "+ИмяБиблиотеки,"i");
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       


2. Делаешь вот такой код при старте системы.

           Попытка
               Если ТипЗначенияСтр(глСервис) = "Сервис" Тогда
               Иначе
                   глСервис = СоздатьОбъект("Сервис");
               КонецЕсли;
               
               глСервис.ВключитьРаскраскуТаблиц(0);
               глСервис.ИспользоватьПланРаскраски(1);
               
               Если ТипЗначенияСтр(глСистема)<>"Система" Тогда
                   глСистема = СоздатьОбъект("Система");
               КонецЕсли;
               
           Исключение
               глСообщить("Компонента ""FormEx.dll"" не загружена или возможно загружена старая версия!","!");
           КонецПопытки;


3. В документе при открытии прописываешь вот такой код:

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

4. В табличной части документа создаешь текстовую колонку, не спутай с реквизитов:
В колоне нужно указать заголовок в виде "FormEx_ПланРаскраски"
Это предопределенный заголовок и он должен быть только один.

5. Читаем Алиас от АльФа :)

FONT[<Цвет>] BRUSH[<Цвет>] FONT_S[<Цвет>] BRUSH_S[<Цвет>] FONT_C[<Цвет>] BRUSH_C[<Цвет>]
COUNT[<КоличествоКолонок>] INDENT[<Отступ>] FONTSET[<КодШрифта>] FONTSET_S[<КодШрифта>]
FONT[<Цвет>] BRUSH[<Цвет>] FONT_S[<Цвет>] BRUSH_S[<Цвет>] FONT_C[<Цвет>] BRUSH_C[<Цвет>]
COUNT[<КоличествоКолонок>] INDENT[<Отступ>] FONTSET[<КодШрифта>] FONTSET_S[<КодШрифта>]
ВНИМАНИЕ:
При использовании плана раскраски (см.выше) очень важно использование
круглых скобок для обозначения строки или колонки таблицы. См. План раскраски таблиц.
Синтаксис:
FONT[<Цвет>] - задает цвет шрифта строки;
BRUSH[<Цвет>] - задает цвет фона строки;
FONT_S[<Цвет>] - задает цвет шрифта строки, если она является текущей (не влияет на текущую ячейку);
BRUSH_S[<Цвет>] - задает цвет фона строки, если она является текущей (не влияет на текущую ячейку);
FONT_C[<Цвет>] - задает цвет шрифта строки, если она является текущей ячейкой (работает только при использовании плана раскраски);
BRUSH_C[<Цвет>] - задает цвет фона строки, если она является текущей ячейкой (работает только при использовании плана раскраски);
COUNT[<КоличествоКолонок>] - задает количество колонок, на которые распространяется раскраска (игнорируется при использовании плана раскраски);
INDENT[<Отступ>] - задает количество колонок, которое необходимо пропустить перед началом раскраски (игнорируется при использовании плана раскраски);
FONTSET[<КодШрифта>] - задает шрифт строки;
FONTSET_S[<КодШрифта>] - задает шрифт строки, если она является текущей;
Назначение:
Компонента позволяет устанавливать произвольную раскраску в таблицах 1С (многострочные части документов, формы списков, таблицы значений на форме, дерево+таблица и т.д.).
Разрешить раскраску таблиц можно с помощью метода ВключитьРаскраскуТаблиц / ColourBrowse или с помощью флажка на странице свойств компоненты. Запрет раскраски производится вызовом метода ВыключитьРаскраскуТаблиц / UnColourBrowse или снятием флажка на странице свойств.
Для включения раскраски в таблицу необходимо добавить колонку, формула в которой должна содержать служебную строку. В общем случае колонка должна располагаться левее колонок, которые предполагается раскрасить.
Служебная строка может быть, как напрямую прописана в формуле колонки (или формироваться функцией, вызываемой из формулы), так и быть содержимым реквизита. Для таблиц значений строка раскраски устанавливается в качестве значения ячейки таблицы. Служебная строка состоит из макрокоманд, которые формируют стиль строки. Макрокоманды регистронезависимы и могут располагаться в любой последовательности. Ни одна из макрокоманд не является обязательной, т.е. любая из них может быть опущена при формировании служебной строки.
Параметры:
<Цвет> - представление необходимого цвета в формате RGB в виде положительного числа. Может быть как десятеричным, так и шестнадцатеричным (в этом случае необходимо добавить ''0x'' перед числом).
<КоличествоКолонок> - положительное число.
<Отступ> - положительное или отрицательное число.
<КодШрифта> - код пользовательского шрифта, возвращенный методом СоздатьШрифт / CreateFont.
Вместо любого из параметров можно написать строку NONE, тогда соответствующая макрокоманда применит текущую системную настройку. Если Отступ задан отрицательным числом, то КоличествоКолонок считает только видимые колонки до текущей колонки со служебной строкой. После текущей строки (или если Отступ >=0) КоличествоКолонок считает как видимые, так и невидимые колонки.
Служебная строка с макрокомандами действует только в пределах одной строки. Макрокоманды FONT, FONT_S, BRUSH, BRUSH_S, FONTSET и FONTSET_S сбрасывают значения макрокоманд COUNT и INDENT, заданные предыдущей служебной строкой, к нулевому состоянию. Макрокоманда COUNT сбрасывает значение макрокоманды INDENT, заданное предыдущей служебной строкой, к нулевому состоянию.
Флаг ''Отрицательное красным'' игнорируется в раскрашиваемых колонках.

6. Создаем функцию на добавленную колонку:

РаскраситьКолонки_()

7. Код для функции "РаскраситьКолонки_()"

Функция РаскраситьКолонкиNONE(ВнешКодОшибки=-1)
   Перем Рез, КодОшибки;
   
   Если ВнешКодОшибки >= 0 Тогда
       КодОшибки = ВнешКодОшибки;
   Иначе
       КодОшибки = ВоСтрокеЕстьОшибки();
   КонецЕсли;
   
   Если КодОшибки = 1 Тогда
       Рез="FONT[NONE] BRUSH[0x0000FF] FONT_S[NONE] BRUSH_S[0x0000FF]";
       
   ИначеЕсли КодОшибки = 2 Тогда
       Рез="FONT[NONE] BRUSH[0x4080FF] FONT_S[NONE] BRUSH_S[0x4080FF]";
       
   Иначе
       Рез="FONT[NONE] BRUSH[NONE] FONT_S[NONE] BRUSH_S[NONE]";// COUNT["+КолКолонок+"]"; //Цвет зеленый - кодировка наоборот RGB -> BGR
   КонецЕсли;
   
   Возврат Рез;
КонецФункции //РаскраситьКолонки(1)

//_____________________________________________________________________________
Функция РаскраситьКолонки(Колонка)
   Перем Рез;
   Перем ЦветСтрока,ЦветСтрока2,ЦветСтрока3,ЦветСтрока4;
   Перем ИЗМ;
   
   Если (ВводНовойСтроки = 1) и (НомерСтроки = ВводНомерСтроки) Тогда
       Рез = РаскраситьКолонкиNONE(0);
   Иначе
       Рез = РаскраситьКолонкиNONE();
   КонецЕсли;

   ЦветСтрока = "0000FF";//"C0C0C0"; //Серый фон
   ЦветСтрока3= "0000FF"; //Красный Фон
   ЦветСтрока2= "FF0000";//"000000"; //Черный шрифт
   ЦветСтрока4= "FF0000"; //Синий шрифт

   ИЗМ = 0;
   
   Если Колонка = "" Тогда
       ИЗМ = ИЗМр;
       ЦветСтрока = "FF80FF";
       ЦветСтрока3= "FF80FF"; //Желтый Фон
       
   ИначеЕсли Колонка = "Контрагент" Тогда     //РаскраситьКолонки("Единица")
       ИЗМ = ИЗМк;
       ЦветСтрока = "80FFFF";
       ЦветСтрока3= "80FFFF"; //Желтый Фон
       Если ПустоеЗначение(Контрагент)=1 Тогда
           ЦветСтрока = "808080";//"C0C0C0"; //Серый фон
           ЦветСтрока3= "808080"; //Красный Фон
       КонецЕсли;
       
   ИначеЕсли Колонка = "Договор" Тогда   //РаскраситьКолонки("Цена")
       ИЗМ = ИЗМд;
       ЦветСтрока = "80FFFF";
       ЦветСтрока3= "80FFFF"; //Желтый Фон
       Если ПустоеЗначение(Договор)=1 Тогда
           ЦветСтрока = "808080";//"C0C0C0"; //Серый фон
           ЦветСтрока3= "808080"; //Красный Фон
       КонецЕсли;
       
   ИначеЕсли Колонка = "БазаРасчета" Тогда //РаскраситьКолонки("Валюта")
       ИЗМ = ИЗМб;
       ЦветСтрока = "80FFFF";
       ЦветСтрока3= "80FFFF"; //Желтый Фон
       Если ПустоеЗначение(БазаРасчета)=1 Тогда
           ЦветСтрока = "808080";//"C0C0C0"; //Серый фон
           ЦветСтрока3= "808080"; //Красный Фон
       КонецЕсли;
       
   ИначеЕсли Колонка = "СтавкаПремии" Тогда//РаскраситьКолонки("Процент")
       ИЗМ = ИЗМст;
       ЦветСтрока = "80FFFF";
       ЦветСтрока3= "80FFFF"; //Желтый Фон
       Если ПустоеЗначение(СтавкаПремии)=1 Тогда
           ЦветСтрока = "808080";//"C0C0C0"; //Серый фон
           ЦветСтрока3= "808080"; //Красный Фон
       КонецЕсли;
       
   ИначеЕсли Колонка = "СуммаПремии" Тогда//РаскраситьКолонки("Процент")
       ИЗМ = ИЗМсу;
       ЦветСтрока = "80FFFF";
       ЦветСтрока3= "80FFFF"; //Желтый Фон
       Если ПустоеЗначение(СуммаПремии)=1 Тогда
           ЦветСтрока = "808080";//"C0C0C0"; //Серый фон
           ЦветСтрока3= "808080"; //Красный Фон
       КонецЕсли;
       
   КонецЕсли;
   
   Если ИЗМ = 0 Тогда
       Возврат Рез;
   КонецЕсли;
   
   Рез="FONT[0x"+ЦветСтрока2+"] BRUSH[0x"+ЦветСтрока+"] FONT_S[0x"+ЦветСтрока4+"] BRUSH_S[0x"+ЦветСтрока3+"]";// COUNT["+КолКолонок+"]"; //Цвет зеленый - кодировка наоборот RGB -> BGR
   
   Возврат Рез;
КонецФункции //РаскраситьКолонки(1)

Функция РаскраситьКолонки_() //FormEx_ПланРаскраски
   
   Возврат "()("+РаскраситьКолонки("")+")("+РаскраситьКолонки("Контрагент")+")()("+//("+РаскраситьКолонкиNONE()+")("+
   РаскраситьКолонки("Договор")+")()("+//РаскраситьКолонкиNONE()+")()("+
   РаскраситьКолонки("БазаРасчета")+")("+//РаскраситьКолонкиNONE()+")("+РаскраситьКолонки("Процент")+")("+РаскраситьКолонкиNONE()+")";
   РаскраситьКолонки("СтавкаПремии")+")("+
   РаскраситьКолонки("СуммаПремии")+")";
   
КонецФункции    //  РаскраситьКолонки_()

8. Если ты читаешь этот текст, то ты осилил код из пункта № 7 :)
4 ЧеловекДуши
 
03.09.12
12:52
+ к пункту № 4

Заголовок колонки и Идентификатор, это разные вещи. И я не перепутал их ;)
5 Maximysis
 
03.09.12
13:36
(3)Спасибо за подробный ответ.
а зачем пункт 3?
и как заставить колонку "FormEx_ПланРаскраски"
выполнить свою формулу "BRUSH..." при каком нибудь действии на форме.
при открытии формы все ок, красится. а при изменении???
6 Maximysis
 
03.09.12
14:54
надо что то типа (2)......
7 ЧеловекДуши
 
03.09.12
15:00
(5)Затем, что иначе в документе не будет разукрашиваться табличная часть ;)
8 ЧеловекДуши
 
03.09.12
15:00
(6)ДНК - оно не излечимо :)
...Удачи, через "Обновить"... :)
9 ЧеловекДуши
 
03.09.12
15:01
+(5)Смотри Пункт № 7 в (3)... постарайся осилить коД :)
10 Злопчинский
 
03.09.12
15:40
(5) при изменении - меняешь в соот.строк ТЧ планраскраски как надо. При изменении данных - идет перерисовка формы - и план раскраски "исполнится"
11 Maximysis
 
03.09.12
15:54
о все разобрался спасибо (10)...
12 Maximysis
 
03.09.12
15:57
(3)
так я и не понял зачем 3 пункт и без него отлично работает..