Имя: Пароль:
1C
1C 7.7
v7: Раскраска таблицы
0 Масянька
 
25.11.11
09:46
Доброе утро.
Прошу помощи:

Процедура ПриОткрытии()

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

   ..................
   
   гТабВыборка.НоваяКолонка("Пометка"                ,"Число",  4, 0,"Вкл"            ,6);
   
   .................    
   
КонецПроцедуры

Функция ПолучитьЦвет(Красный = 0,Зеленый = 0,Синий = 0)

   Возврат Макс(0,Синий)*65536+Макс(0,Зеленый)*256+Макс(0,Красный);

КонецФункции

Функция Раскрасить()

   Если (гТабВыборка.Цена < гТабВыборка.Себестоимость) Тогда
       Возврат "BRUSH["+ПолучитьЦвет(255,100,100)+"]";
   КонецЕсли;
   
   Возврат "";

КонецФункции    // Раскрасить

Процедура ЗаполнениеСтрокиТаблицы(СписокПараметров)

   гТабВыборка.НоваяСтрока();
   
   гТабВыборка.Код                    = СписокПараметров.ПолучитьЗначение(1);
   .....................    
   Раскрасить();
   
КонецПроцедуры    // ЗаполнениеСтрокиТаблицы


Обработка, таблица формируется динамически.
Раскраска - не работате. Где ошибка?

PS Ногами - не бить!
1 ДенисЧ
 
25.11.11
09:48
Колонку с брашем поставить ПЕРЕД теми колонками, что нужно красить...
2 antoneus
 
25.11.11
09:52
и вообще, используй план раскраски
3 Масянька
 
25.11.11
09:54
Спасибо, пробую.
4 KishMish
 
25.11.11
09:55
наверно так
гТабВыборка.КОлонкаРаскраски =  Раскрасить();
5 Масянька
 
25.11.11
10:16
Люди!
Добавила:
в ПриОткрытии - Сервис.ИспользоватьПланРаскраски(1);
             - гТабВыборка.НоваяКолонка("Цвет", "Строка");
в ЗаполнениеСтрокиТаблицы - гТабВыборка.Цвет = Раскрасить();

Запустила. Выводится колонка "Цвет", в ней "BRUSH[6579455], в той строке, которую нужно раскрасить. Цвета нет :(
6 Масянька
 
25.11.11
10:22
Апну разок :(
7 Масянька
 
25.11.11
10:34
Столько разговоро было про FormEx....
8 Масянька
 
25.11.11
10:41
А ни фига не работает....
9 antoneus
 
25.11.11
10:42
рт наконец уже фм!

Пример плана раскраски.
"()()()(BRUSH[255])()()(BRUSH[NONE)" - обозначает, что начиная с четвертой колонки (включительно) цвет фона ячеек устанавливается красным, а с седьмо раскраска фона отключается и все остальные колонки не раскрашиваются;
"(BRUSH_S[255])" - обозначается, что вся строка, когда она становится текущей, подсвечивается красным фоном.
10 antoneus
 
25.11.11
10:44
Для реализации раскраски по новому функционалу плана раскраски, необходимо добавить в раскрашиваемую таблицу колонку с заголовком "FormEx_ПланРаскраски" (без кавычек, регистронезависимо). Колонка может располагаться в любом месте таблицы. Содержимое этой колонки задает план раскраски таблицы, основанный на тех же макросах, которые описаны в части "Раскраска таблиц". При этом макросы COUNT и INDENT не обрабатываются. В плане раскраски каждая ячейка текущей строки определяется круглыми скобками. В плане учитываются как видимые, так и невидимые колонки. Макросы раскраски надо помещать в места, соответсвующие смене раскраски.
11 Масянька
 
25.11.11
10:48
Ну, наконец-таки!
Спасибо - пошла пробовать.
Еше вопрос - на Win 7 проблем нет?
12 Масянька
 
25.11.11
10:51
(10) Что значит "без кавычек"?
Я сделала - гТабвыборка.НоваяКолонка("FormEx_ПланРаскраски", "Строка");
И в ЗаполнениеСтрокиТаблицы - гТабВыборка. FormEx_ПланРаскраски = Раскрасить();
Не работает.
13 antoneus
 
25.11.11
11:07
больше кода. Что в Раскрасить()?
14 FN
 
25.11.11
11:08
гТабВыборка. FormEx_ПланРаскраски = "("+Раскрасить()+")";
15 Масянька
 
25.11.11
11:14
(14) Поменяла - не арбайтен.
(13)
Функция Раскрасить()
Если (гтабВыборка.Цена > гТабВыборка.Себестоимость) Тогда
Возврат "BRUSH[" ПолучитьЦвет(255, 100, 100) + "]";
КонецЕсли;
Возврат "";
КонецФункции
16 Guk
 
25.11.11
11:16
(8) так это не формекс не работает...
17 Масянька
 
25.11.11
11:17
(16) А что?
18 Масянька
 
25.11.11
11:18
Процедура ПриОткрытии()

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

Функция ПолучитьЦвет(Красный = 0,Зеленый = 0,Синий = 0)

   Возврат Макс(0,Синий)*65536+Макс(0,Зеленый)*256+Макс(0,Красный);

КонецФункции

Функция Раскрасить()

   Если (гТабВыборка.Цена > гТабВыборка.Себестоимость) Тогда
       Возврат "()()()(BRUSH["+ПолучитьЦвет(255,100,100)+"])";
   КонецЕсли;
   
   Возврат "";

КонецФункции    // Раскрасить

//************* заполнение строки таблицы выбранной номенклатурой
Процедура ЗаполнениеСтрокиТаблицы(СписокПараметров)

   гТабВыборка.НоваяСтрока();
   
   гТабВыборка.Код                    = СписокПараметров.ПолучитьЗначение(1);
   гТабВыборка.АртикулПрайс        = СокрЛП(СписокПараметров.ПолучитьЗначение(2));
   гТабВыборка.ЗаголовокЦенника    = СокрЛП(СписокПараметров.ПолучитьЗначение(3));
   гТабВыборка.ФирмаПроизводитель    = СокрЛП(СписокПараметров.ПолучитьЗначение(4));
   гТабВыборка.СтранаПроизводитель    = СокрЛП(СписокПараметров.ПолучитьЗначение(5));
   гТабВыборка.Цена                = СписокПараметров.ПолучитьЗначение(6);
   гТабВыборка.Себестоимость        = СписокПараметров.ПолучитьЗначение(7);

   Если ВидЦенника = 2 Тогда
       гТабВыборка.Описание    = СокрЛП(СписокПараметров.ПолучитьЗначение(8));
       гТабВыборка.Плотность    = СокрЛП(СписокПараметров.ПолучитьЗначение(9));
       гТабВыборка.Структура    = СокрЛП(СписокПараметров.ПолучитьЗначение(10));
       гТабВыборка.Покрытие    = СокрЛП(СписокПараметров.ПолучитьЗначение(11));
       гТабВыборка.КолВоЛистов    = СокрЛП(СписокПараметров.ПолучитьЗначение(12));
   Иначе
       гТабВыборка.Описание    = СокрЛП(СписокПараметров.ПолучитьЗначение(8));
       гТабВыборка.Модель        = СокрЛП(СписокПараметров.ПолучитьЗначение(9));
   КонецЕсли;
   
   гТабВыборка.FormEx_ПланРаскраски = "("+Раскрасить()+")";
КонецПроцедуры    // ЗаполнениеСтрокиТаблицы
19 АЛьФ
 
25.11.11
11:21
Забавно.
20 FN
 
25.11.11
11:23
Попробуй так

Процедура ПриОткрытии()

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

Функция ПолучитьЦвет(Красный = 0,Зеленый = 0,Синий = 0)

   Возврат Макс(0,Синий)*65536+Макс(0,Зеленый)*256+Макс(0,Красный);

КонецФункции

Функция Раскрасить()

   Если (гТабВыборка.Цена > гТабВыборка.Себестоимость) Тогда
       Возврат "BRUSH["+ПолучитьЦвет(255,100,100)+"]";
   КонецЕсли;
   
   Возврат "";

КонецФункции    // Раскрасить


//************* заполнение строки таблицы выбранной номенклатурой

Процедура ЗаполнениеСтрокиТаблицы(СписокПараметров)

   гТабВыборка.НоваяСтрока();
   
   гТабВыборка.Код                    = СписокПараметров.ПолучитьЗначение(1);
   гТабВыборка.АртикулПрайс        = СокрЛП(СписокПараметров.ПолучитьЗначение(2));
   гТабВыборка.ЗаголовокЦенника    = СокрЛП(СписокПараметров.ПолучитьЗначение(3));
   гТабВыборка.ФирмаПроизводитель    = СокрЛП(СписокПараметров.ПолучитьЗначение(4));
   гТабВыборка.СтранаПроизводитель    = СокрЛП(СписокПараметров.ПолучитьЗначение(5));
   гТабВыборка.Цена                = СписокПараметров.ПолучитьЗначение(6);
   гТабВыборка.Себестоимость        = СписокПараметров.ПолучитьЗначение(7);

    Если ВидЦенника = 2 Тогда
       гТабВыборка.Описание    = СокрЛП(СписокПараметров.ПолучитьЗначение(8));
       гТабВыборка.Плотность    = СокрЛП(СписокПараметров.ПолучитьЗначение(9));
       гТабВыборка.Структура    = СокрЛП(СписокПараметров.ПолучитьЗначение(10));
       гТабВыборка.Покрытие    = СокрЛП(СписокПараметров.ПолучитьЗначение(11));
       гТабВыборка.КолВоЛистов    = СокрЛП(СписокПараметров.ПолучитьЗначение(12));
   Иначе
       гТабВыборка.Описание    = СокрЛП(СписокПараметров.ПолучитьЗначение(8));
       гТабВыборка.Модель        = СокрЛП(СписокПараметров.ПолучитьЗначение(9));
   КонецЕсли;
   СтрокаРаскраски=Раскрасить();Сообщить(СтрокаРаскраски);
   гТабВыборка.FormEx_ПланРаскраски = СтрокаРаскраски;
КонецПроцедуры    // ЗаполнениеСтрокиТаблицы
21 Масянька
 
25.11.11
11:59
(20) Выводит:
в таблице 5 строк -
()()()(BRUSH[6579455])
()()()(BRUSH[6579455])
()()()(BRUSH[6579455])

()()()(BRUSH[6579455])

PS - пустая строка - там где нужно менять цвет.
22 Масянька
 
25.11.11
12:09
Пардон - знак перепутала :)
Выводит одну строку
()()()(BRUSH[6579455]) там, где нужно менять цвет, но цвет не меняет.
23 Масянька
 
25.11.11
12:13
Слушайте, если я накосячила - ткните меня, если что-то не работает - скажите - что.
24 big
 
25.11.11
12:24
Создаем таблицу

   ТЦ.Очистить();
   ТЦ.НоваяКолонка("Цвет","Строка",,,"FormEx_ПланРаскраски");
   ТЦ.НоваяКолонка("Магазин","Справочник", , ,"Магазин",12);
   ТЦ.НоваяКолонка("Фирма","Справочник", , ,"Фирма",15);
   ТЦ.НоваяКолонка("МинОст","Справочник");
   ТЦ.НоваяКолонка("КонтрольЗакуп","Число", , ,"хх",3);
   ТЦ.НоваяКолонка("Закупочная","Справочник");

Заметь!!! Для вывода цвета по плану раскраски у колонки должен быть ЗАГОЛОВОК "FormEx_ПланРаскраски"

Делаем функцию для заполнения шаблона цвета

Функция глШаблонЦветаЯчейки(Таб) Экспорт
   Рез="";
   Если ТипЗначенияСтр(Таб)="ТаблицаЗначений" Тогда
       Шагов = Таб.КоличествоКолонок();
   ИначеЕсли ТипЗначенияСтр(Таб)="Число" Тогда
       Шагов = Таб;
   КонецЕсли;
   Для а=1 По Шагов Цикл
       Рез=Рез+"(BRUSH[NONE])";
   КонецЦикла;
   Возврат Рез;
КонецФункции // ШаблонЦветаЯчейки

Заполнение таблицы

   ТЦ.НоваяСтрока();
   ТЦ.Цвет            = ШаблонЦвета;
   ТЦ.Магазин        = ТекМагазин;
   ТЦ.Фирма        = Агент;
   ТЦ.Закупочная            = СпрЦенаЗакуп;

   Если ПустоеЗначение(СпрЦенаЗакуп)=1 Тогда
       глУстановитьЦветЯчейки(ТЦ, ТЦ.КоличествоСтрок(),"ЦенаЗакуп");
   КонецЕсли;


установка цвета нужной ячейки

Процедура глУстановитьЦветЯчейки(Таб, Стр, Кол, Цвет="") Экспорт
   Если ПустаяСтрока(Цвет)=1 Тогда
       Цвет=6773995;                                // цвет ошибки, красный
   КонецЕсли;
   // определим номер (номера) ячеек
   Колонки = СтрЗаменить(Кол,",",РазделительСтрок);
   СпсКолонок = СоздатьОбъект("СписокЗначений");
   Для б=1 По СтрКоличествоСтрок(Колонки) Цикл
       ТекКолонка = СтрПолучитьСтроку(Колонки,б);
       НомерЯчейки = Таб.ПолучитьПараметрыКолонки(ТекКолонка);
       СпсКолонок.ДобавитьЗначение(НомерЯчейки);
   КонецЦикла;
   
   ШаблонЦвета=Таб.ПолучитьЗначение(Стр,"Цвет");
   ШаблонЦвета=Сред(ШаблонЦвета,2,СтрДлина(ШаблонЦвета)-2);
   ШаблонЦвета=СтрЗаменить(ШаблонЦвета,")(",РазделительСтрок);
   Рез="";
   Для а=1 По СтрКоличествоСтрок(ШаблонЦвета) Цикл
       
       Если СпсКолонок.Принадлежит(а)=1 Тогда
           Рез=Рез+"(BRUSH["+Цвет+"])";
       Иначе
           Рез=Рез+"("+СтрПолучитьСтроку(ШаблонЦвета,а)+")";
       КонецЕсли;
   КонецЦикла;
//    Сообщить("Стр:"+Стр+", Кол:"+Кол+", Рез:"+Рез+".");
   Таб.УстановитьЗначение(Стр,"Цвет",Рез);
КонецПроцедуры // УстановитьЦветЯчейки
25 big
 
25.11.11
12:26
(24) + ессно колонка "Цвет" должна быть невидимой.
26 Масянька
 
25.11.11
13:18
Ну, что никто не ткнет?
27 Масянька
 
25.11.11
13:51
Из вас (таких умных) разобралась :)
28 Масянька
 
25.11.11
13:51
+(27) Без вас :)
29 big
 
29.11.11
05:00
Фееричная дятла
30 Андрюха
 
29.11.11
05:56
Дилетанты хреновы
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.