Имя: Пароль:
1C
1C 7.7
v7: Класс ВыделениеЦветом на вин 2019
,
0 uno-group
 
16.02.22
09:31
Перенесли базу на новый сервер. 1с под админом запустил. В параметрах настройка 1с++ появилась. Вроде бы и таблица раскрашивается но красится чисто черным.
Актив Х скопировал, но не регистрируется regsvr32 VColorPicker.ocx. Куда копать? ДЛЛ ОСХ лежат в базе каталоге программы и систем 32.
1 Kigo_Kigo
 
16.02.22
10:07
Надеюсь регать пробуете из батника?
2 Ёпрст
 
16.02.22
10:17
(0)
%WINDIR%\SysWOW64\regsvr32.exe %WINDIR%\System32\VColorPicker.ocx
от имени админа
3 АгентБезопасной Нацио
 
16.02.22
10:59
— Ребе, а черный это цвет?
—— Цвет.
— А белый это цвет?
—— Конечно цвет.
— Изя, ребе подтвердил, что я продал тебе ЦВЕТНОЙ телевизор!
©
4 Злопчинский
 
16.02.22
11:06
А что этот класс делает? не, понятно что ответ "Выделяет цветом".. ;-) а пример скриншот..?
5 Ёпрст
 
16.02.22
11:10
6 АгентБезопасной Нацио
 
16.02.22
11:11
(4) ага. у серкретарши в ворде красное волнистое подчеркивание синтаксиса - она звонит админу: "подойди, пожалуйста, у меня тут красные выделения..."©
7 uno-group
 
16.02.22
11:30
проверте что двоичный файл хранится на указаном пути...проблемы с этим файлом или зависимыми ДЛЛ.
кроме VColorPicker.ocx в систем 32 еще какието ДЛЛ нужно кидать. файл лежит по указанному пути
8 uno-group
 
16.02.22
11:46
В базе была ДЛЛ  версии 2.0.3.7
С ней ЗагрузитьВнешнююКомпоненту("1cpp.dll"); дает ошибку.
Ошибка при инициализации объекта из компоненты F:\Базы 2019\сервис 2019\1cpp.dll
обновил до версии 3.2.4.0  с ней 1с++ грузится без ошибок но раскраска не работает добавил FormEx.dll 2.0.5.0
не помогло
9 uno-group
 
16.02.22
11:53
(1) регистрирую из CMD запущенного под админом.
10 Ёпрст
 
16.02.22
12:07
(8) выкинуть этот класс расскраски с кода, скачать формекс на поновее, все расскраски сделать через методы формекса и новый план расскраски
11 Злопчинский
 
16.02.22
14:51
(10) я поэтому и спросил в (4)
12 Злопчинский
 
16.02.22
14:52
АЛьФ куда-то пропал, не допиливает формекс
13 Kigo_Kigo
 
16.02.22
14:54
(12) он уже достаточен и его развитие, как вижу я, у же особого смысла не имеет, все на снеговики!
14 tgu82
 
16.02.22
15:11
(12) Да ведь недавно же что-то он в формекс добавлял
15 uno-group
 
16.02.22
15:23
(10) Это конфа у знакомых там довольно много накрасили в свое время. Сейчас сервак обновили и все слетело, хотели малой кровью обойтись. Нет большого желания влазить в нее. там кто только не писал ее. насчитал 10 ВК непонятно для чего прикрученных. думал закинуть набор рабочих на сегодня ДЛЛ и умыть руки.
16 uno-group
 
16.02.22
15:26
(11) По внешнему виду результат от FormEx.dll не отличается. По описанию вроде можно через актив Х выбрать юзеру цвета для раскрашивания но тут не реализовано и сомневаюсь что ктото из юзеров этим будет заниматься
17 uno-group
 
16.02.22
15:27
Если бы не надо было раскрашивание в куче мест отлавливать было бы действительно проще переписать без класса.
18 uno-group
 
16.02.22
15:45
Смотрю на 10 (обробока из 5 себя также ведет. вроде все работает не на что не ругается, но цвет черный.
Я правильно думаю что достаточно в классе. 2 процедуры на формЕх переписать а не лазить по всей конфе или заблуждаюсь?
цвета там вроде везде жестко прописаны.
//=======================================================================================
Процедура УстановитьЦвет() Экспорт
    Перем лоОбъект;

    //извлечем текущий шаблон цветовой раскраски из реквизита-контейнера объекта
    Если ТипЗначенияСтр(моТЗ)="ТаблицаЗначений" Тогда
        лсШаблон = моТЗ.ПолучитьЗначение(моТЗ.ТекущаяСтрока(), мсКонтейнерЦвета);
    Иначе
        лсШаблон = мКонт.ПолучитьАтрибут(мсКонтейнерЦвета);
    КонецЕсли;
    //-
    Если ПустоеЗначение(лсШаблон)=1 Тогда
        //сформируем шаблон цветовой раскраски по системным цветам
        лсШаблон = "FONT["+_ЦветИзРеестра("WindowText")
        +"]BRUSH["+_ЦветИзРеестра("Window")
        +"]FONT_S["+_ЦветИзРеестра("WindowText")
        +"]BRUSH_S["+_ЦветИзРеестра("Window")+"]";//COUNT[NONE]INDENT[1]FONTSET[NONE]FONTSET_S[NONE]";
    КонецЕсли;
    //установим выбранный цвет в строке шаблона цветовой раскраски
    Если ВРег(ТекстФон)="ТЕКСТ" Тогда
        лсШаблон = "FONT["+эуЦвет.Объект.CurrColor
                    +"]BRUSH["+_ПолучитьЦветПоШаблону(лсШаблон, "BRUSH")
                    +"]FONT_S["+эуЦвет.Объект.CurrColor
                    +"BRUSH_S["+_ПолучитьЦветПоШаблону(лсШаблон, "BRUSH_S")
                    +"]";//COUNT[NONE]INDENT[1]FONTSET[NONE]FONTSET_S[NONE]";
    ИначеЕсли ВРег(ТекстФон)="ФОН" Тогда
        лсШаблон = "FONT["+_ПолучитьЦветПоШаблону(лсШаблон, "FONT")
                    +"]BRUSH["+эуЦвет.Объект.CurrColor
                    +"]FONT_S["+_ПолучитьЦветПоШаблону(лсШаблон, "FONT")
                    +"]BRUSH_S["+эуЦвет.Объект.CurrColor
                    +"]";//COUNT[NONE]INDENT[1]FONTSET[NONE]FONTSET_S[NONE]";
    КонецЕсли;
    //запишем выбранный цвет в атрибут класса
    ТекущийЦвет = эуЦвет.Объект.CurrColor;
    //-
    Если ТипЗначенияСтр(моТЗ)="ТаблицаЗначений" Тогда
        //выделение цветом проводится в ТЗ:
        //запишем шаблон в нужную колонку
        моТЗ.УстановитьЗначение(моТЗ.ТекущаяСтрока(), мсКонтейнерЦвета, лсШаблон);
        мКонт.Форма.Обновить();
        //передаем фокус таблице значений
        мКонт.Активизировать(моТЗ.ТекущаяКолонка());
    ИначеЕсли Лев(мсТипВызФормы, 8)= "Документ" Тогда
        //выделение цветом проводится в форме документа
        мКонт.УстановитьАтрибут(мсКонтейнерЦвета, лсШаблон);
        мКонт.Форма.Обновить();
        //передаем фокус многострочной части
        мКонт.Активизировать(мКонт.Форма.ТекущаяКолонка(), 0);
    Иначе
        Если Лев(мсТипВызФормы, 10) = "Справочник" Тогда
            //выделение цветом проводится в списке справочника
            Если ПустоеЗначение(САМ(Контекст).ПолучитьКонтекстОкружения().ТекущийЭлемент())=1 Тогда
                Предупреждение("Не выбран объект для выделения цветом в вызывающей форме! ");
                Возврат;
            КонецЕсли;
            //-
            лоОбъект = СоздатьОбъект("Справочник."+мКонт.ТекущийЭлемент().Вид());
            лоОбъект.НайтиЭлемент(мКонт.ТекущийЭлемент());
            Если лоОбъект.Блокировка(1)=0 Тогда
                Предупреждение("Элемент справочника заблокирован (открыт).
                |Установка цвета невозможна! ");
                Возврат;
            КонецЕсли;
        ИначеЕсли Лев(мсТипВызФормы, 6) = "Журнал" Тогда
            //выделение цветом проводится в журнале документов
            Если ПустоеЗначение(мКонт.ТекущийДокумент)=1 Тогда
                Предупреждение("Не выбран объект для выделения цветом в вызывающей форме! ");
                Возврат;
            КонецЕсли;
            //-
            лоОбъект = СоздатьОбъект("Документ."+мКонт.ТекущийДокумент.Вид());        
            лоОбъект.НайтиДокумент(мКонт.ТекущийДокумент);
            Если лоОбъект.Блокировка(1)=0 Тогда
                Предупреждение("Документ заблокирован (открыт).
                |Установка цвета невозможна! ");
                Возврат;
            КонецЕсли;
        КонецЕсли;
        //подставляем макрокоманду цвета в текущий объект формы списка справочника
        //или журнала документов и попытаемся ее записать в объект
        лоОбъект.УстановитьАтрибут(мсКонтейнерЦвета, лсШаблон);
        Попытка
            лоОбъект.Записать();
        Исключение
            Предупреждение("Не удалось записать установку цвета! ");
        КонецПопытки;
        //передаем фокус многострочной части
        мКонт.Активизировать(мКонт.Форма.ТекущаяКолонка(), 0);
    КонецЕсли;
КонецПроцедуры
//=======================================================================================
Процедура Инициализация(псТекстФон, псТекстоваяМетка, псКонтейнер, пчПомнитьПоследнийЦвет, поТЗ) Экспорт
    Перем лсВерсия;
    
    //считываем параметры
    ТекстФон               = псТекстФон;
    мсКонтейнерЦвета       = псКонтейнер;
    мчПомнитьПоследнийЦвет = пчПомнитьПоследнийЦвет;
    моТЗ                   = поТЗ;
    //в зависимости от версии FormEx создаем на исходной форме ЭУ для раскраски строк
    лоСервис = СоздатьОбъект("Сервис");
    лоСервис.ВерсияFormEx(лсВерсия);
    Если лсВерсия >= "2.0.5" Тогда
        //версии FormEx и 1С++ раздельные
        эуЦвет  = СоздатьОбъект("АктивИкс");
        лоФорма = СоздатьОбъект("Форма");
        лоФорма.СоздатьЭлементУправленияНаФорме(мКонт.Форма, эуЦвет, псТекстоваяМетка);
    Иначе
        эуЦвет   = СоздатьОбъект("АктивИкс");
        АтрФормы = СоздатьОбъект("АтрибутФормы");
        АтрФормы.УстановитьАтрибут(мКонт.Форма, псТекстоваяМетка);
        АтрФормы.СоздатьЭлементУправления(эуЦвет); // СоздатьЭУ
    КонецЕсли;
    эуЦвет.СоздатьЭУ("VCOLORPICKER.VColorPickerCtrl.1");
    //предустановим значения некоторых атрибутов класса и ЭУ
    САМ(Контекст).ЗаголовокКнопки         = ТекстФон;
    САМ(Контекст).ЗаголовокАвтоЦвета      = "Системный";
    САМ(Контекст).ЗаголовокТекущегоЦвета  = "Выбрать цвет...";
    САМ(Контекст).ЦветТекстаКнопки        = _ЦветИзРеестра("WindowText");
    САМ(Контекст).ЦветФонаКнопки          = _ЦветИзРеестра("Menu");
    САМ(Контекст).АвтоЦвет                = _ПредустановкаЦвета("Авто");
    САМ(Контекст).ТекущийЦвет             = _ПредустановкаЦвета("Текущий");
    //скопируем значения оставшихся атрибутов ЭУ в атрибуты класса
    ВыравниваниеПоГоризонтали = эуЦвет.Объект.HorzAlign;
    ВыравниваниеПоВертикали   = эуЦвет.Объект.VertAlign;
    МногострочныйЗаголовок    = эуЦвет.Объект.Multiline;
    НевидимаяКнопка           = эуЦвет.Объект.HyperLook;
    ПлоскаяКнопка             = эуЦвет.Объект.TrackLook;
    ДоступностьКнопки         = эуЦвет.Объект.Enabled;
    ПлавающееОкноВыбораЦвета  = эуЦвет.Объект.FloatingPopup;
КонецПроцедуры

//=======================================================================================
19 Ёпрст
 
16.02.22
22:01
(18) судя по коду, сам активикс нужен только для выбора цвета, расскраска идёт формексом
20 Злопчинский
 
16.02.22
22:09
(13) ну, так-то да, все по функциям норм.. но мелкие косячки есть... если в ТЗ задать высоту заголовка = 0, то листание таблицы ведет себя некрасиво, ну и прочее по мелочи, связанное с размером шрифта в ТЗ и в текстовом реквизите - они малость не совпадают (тут могу лажать, ибо несколько итераций было, надо будет проверить дополниетльно)
21 Злопчинский
 
16.02.22
22:10
(19) где-то были примеры - то ли здесь, то ли на ИС - вызов стандартного диалога виндов для выбора цвета
22 Злопчинский
 
16.02.22
22:11
во, правильный вариант, а то иногда ставишь 256 цветов в РДП - открываешь форму - а там по раскраске хрень полная
https://infostart.ru/public/1247627/
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой