Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как получить цифровое значение цвета из стиля?

Как получить цифровое значение цвета из стиля?
Я
   Nzzzz
 
14.08.20 - 08:06
Нужно сделать так, чтобы пользователи по нажатию кнопки появлялся диалог с выбором цвета.
Вроде подходит этот вариант:

Диалог = Новый ДиалогВыбораЦвета;
    Если Диалог.Выбрать() Тогда
        ВыбранныйЦвет = Диалог.Цвет;
    КонецЕсли;

НО есть большое НО!
Мне нужно получить выбранный цвет в формате значение: "200,0,0"
Но с помощью метода выше у меня выбранный пользователем цвет получаю в формате стиля "стиль: Отрицательное число".
(Кстати, если в этом диалоге я выбираю цвет не из списка, а снизу в полях "Зеленый", "Красный", "Синий" пишу цифры, то возвращаются цифры, а не стиль в случае когда я выбираю из списка)
   Гипервизор
 
1 - 14.08.20 - 08:28
   Волшебник
 
2 - 14.08.20 - 08:28
Цвет.Красный
Цвет.Зеленый
Цвет.Синий
   Nzzzz
 
3 - 14.08.20 - 08:30
(2)
-1
-1
-1
   Nzzzz
 
4 - 14.08.20 - 08:31
Сделала так:

&НаКлиенте
Процедура Команда1(Команда)
    
    Диалог = Новый ДиалогВыбораЦвета; 
    Если Диалог.Выбрать() Тогда 
        ВыбранныйЦвет = Диалог.Цвет; 
    КонецЕсли;
    Если Диалог.Цвет.Вид = ВидЦвета.ЭлементСтиля Тогда
        Команда1НаСервере(ВыбранныйЦвет);
     КонецЕсли;    
 КонецПроцедуры
 
&НаСервере
Процедура Команда1НаСервере(ВыбранныйЦвет)
        ОбъектМетаданныхСтиля = Метаданные.ЭлементыСтиля.Найти(Сред(Строка(ВыбранныйЦвет), 8));
        Если ОбъектМетаданныхСтиля <> Неопределено Тогда 
            Цвет = ОбъектМетаданныхСтиля.Значение;
        КонецЕсли;
КонецПроцедуры

НО
вот здесь не находит ничего:
"ОбъектМетаданныхСтиля = Метаданные.ЭлементыСтиля.Найти(Сред(Строка(ВыбранныйЦвет), 8));"
   Гипервизор
 
5 - 14.08.20 - 08:31
(2) Если бы ((
"Если цвет задан не абсолютным, то содержит -1"
   Волшебник
 
6 - 14.08.20 - 08:32
Надо проверить ВидЦвета и если там АвтоЦвет или ЭлементСтиля, то лезть в метаданные
   Nzzzz
 
7 - 14.08.20 - 08:33
(6) ЭлементСтиля
   Nzzzz
 
8 - 14.08.20 - 08:33
(5) Вот вот((
   Волшебник
 
9 - 14.08.20 - 08:35
А это работает? Взято из (1)


//

// Add_ComM_ОАС_КС.ПолучитьАбсолютныйЦвет(ИсходныйЦвет);
//

Функция ПолучитьАбсолютныйЦвет(ИсходныйЦвет) Экспорт
    
    Если ИсходныйЦвет.Вид = ВидЦвета.Абсолютный Тогда
        Возврат ИсходныйЦвет;
    КонецЕсли;
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет;
    ТабДок.Записать("ПреобразованиеЦвета.mxl", ТипФайлаТабличногоДокумента.MXL7); 
    ТабДок.Прочитать("ПреобразованиеЦвета.mxl");
    
    АЦвет = ТабДок.Область("R1C1").ЦветФона;
    
    Возврат АЦвет;
    
КонецФункции 

//

// Add_ComM_ОАС_КС.ПолучитьСтроку10АбсолютногоЦвета(АЦвет);
//

Функция ПолучитьСтроку10АбсолютногоЦвета(АЦвет) Экспорт
    
    // Форматная строка составляющей цвета

    ФсСц = "ЧЦ=3; ЧН=; ЧВН=; ЧГ=";
    
    // Допустим, что АЦвет равен (0, 0, 0) или (24, 15, 255). Где составляющие цвета - это числа

    
    RGB10 = 
    Формат(АЦвет.Красный, ФсСц) + "," + 
    Формат(АЦвет.Зеленый, ФсСц) + "," +
    Формат(АЦвет.Синий  , ФсСц);
    
    // Для примера выше получим строки "000,000,000" или "024,015,255", т.е. строго фиксированные строки.

    
    Возврат RGB10;
    
КонецФункции
   Nzzzz
 
10 - 14.08.20 - 08:38
(9) Попробую сейчас
   Nzzzz
 
11 - 14.08.20 - 08:41
(9)     
Ошибка при вызове метода контекста (Записать)
    ТабДок.Записать("ПреобразованиеЦвета.mxl", ТипФайлаТабличногоДокумента.MXL7); 
по причине:
Ошибка доступа к файлу 'ПреобразованиеЦвета.mxl'
   Nzzzz
 
12 - 14.08.20 - 08:50
(11) Куда мне этот файл надо? что с ним сделать?
   youalex
 
13 - 14.08.20 - 08:53
(12) без разницы. Идея в том, что при записи табдока цвет стиля в его ячейке становится абсолютным.
   Nzzzz
 
14 - 14.08.20 - 08:57
(13) ну это понятно, что при записи становится абсолютным)
Но от ошибки то как избавиться?)
   youalex
 
15 - 14.08.20 - 09:01
(14) например:

ИмяФайла = ПолучитьИмяВременногоФайла("epf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL7)

ну или в Поток можно попробовать записать/прочитать
   Nzzzz
 
16 - 14.08.20 - 09:05
Получииилось!!!
Спасибо каждому!!)))
   lucbak
 
17 - 14.08.20 - 09:08
&НаСервере
Функция АбсолютныйЦвет(Цвет) Экспорт
    Если Цвет.Вид=ВидЦвета.Абсолютный Тогда Возврат Цвет; КонецЕсли;

    Поток=Новый ПотокВПамяти;

    ТабличныйДокумент=Новый ТабличныйДокумент;
    ТабличныйДокумент.Область("R1C1").ЦветФона=Цвет;
    ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.MXL7);    
    ТабличныйДокумент.Прочитать(Поток.ЗакрытьИПолучитьДвоичныеДанные().ОткрытьПотокДляЧтения(), СпособЧтенияЗначенийТабличногоДокумента.Значение);

    Возврат ТабличныйДокумент.Область("R1C1").ЦветФона;
КонецФункции
   Nzzzz
 
18 - 14.08.20 - 09:16
(17) Спасибо)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.