Имя: Пароль:
1C
1С v8
Где хранить цвет?
,
0 bebibo
 
14.08.20
16:25
Есть диалог, в котором пользователь выбирает цвет. Данный цвет сохраняется в справочнике.
Далее я его буду вытаскивать и окрашивать.
Вопрос, в каком типе реквизита мне его хранить? тремя реквизитами RGB не подходит.
А просто если создаю реквизит "Выбранный цвет" с типом число, то в дальнейшем при передаче этого реквизита в оформление нужной мне формы, пишет: "несоответствие типов". (Оно и понятно, число передаю)
Вот как мне выкрутиться тут?
1 polosov
 
14.08.20
16:27
Определяемый тип не хочешь?
2 Kigo_Kigo
 
14.08.20
16:28
а набор цветов какой и откуда вы его будете брать?
3 bebibo
 
14.08.20
16:29
(1) что это? не работала с таким
4 bebibo
 
14.08.20
16:30
(2) буду брать из справочника
Хранится в абсолютном виде, а не в стиле
5 polosov
 
14.08.20
16:31
(3) Найди в дереве метаданных "ОпределяемыеТипы", создай свой тип с типом "цвет" и устанавливай своим реквизитам этот тип
6 bebibo
 
14.08.20
16:36
(5) Попробую
7 polosov
 
14.08.20
16:38
(6) Хотя не, цвет не хотит.
8 bebibo
 
14.08.20
16:38
(6) При сохранении пишет что мой реквизит - недопустимый тип))
9 bebibo
 
14.08.20
16:41
может есть функция или метод, которая число преобразовывает в цвет)) Ну число в тип "Цвет"
10 arsik
 
гуру
14.08.20
16:42
А чем число не подходит?
типа 123 123 123
11 bebibo
 
14.08.20
16:44
(10) то место куда я передаю, нужно передавать числовое значение с типом ЦВЕТ
А я получается передаю числовое значение цвета с типом число
И мне пишет - несоответствие типа
12 программистище
 
14.08.20
16:45
Хранил в строковом виде R;G;B
&НаКлиенте
Процедура ЦветПриИзмененииПосле(Элемент)
    Объект.Цвет = "" + Цвет.Вид + ";" + Формат(Цвет.Красный, "ЧЦ=3; ЧН=; ЧВН=") + ";"  + Формат(Цвет.Зеленый, "ЧЦ=3; ЧН=; ЧВН=") + ";" + Формат(Цвет.Синий, "ЧЦ=3; ЧН=; ЧВН=");//RGB
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    МассивЦветов = СтроковыеФункции.МассивИзСтроки(Объект.Цвет, ";");//RGB
    Если Не МассивЦветов.Количество() = 0 И Не МассивЦветов.Количество() = 1 И МассивЦветов[0] = "Абсолютный" Тогда
        Цвет = Новый Цвет(Число(МассивЦветов[1]), Число(МассивЦветов[2]), Число(МассивЦветов[3]));
    КонецЕсли;
КонецПроцедуры

Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0)

    ПраваяЧасть         = "";
    ПозРазделителя      = СтрНайти(Стр, Разделитель);
    ДлинаРазделителя    = СтрДлина(Разделитель);
    Если ПозРазделителя > 0 Тогда
        ПраваяЧасть     = Сред(Стр, ПозРазделителя + ?(Режим=2, 0, ДлинаРазделителя));
        Стр          = СокрЛП(Лев(Стр, ПозРазделителя - ?(Режим=1, -ДлинаРазделителя + 1, 1)));
    КонецЕсли;

    Возврат(ПраваяЧасть);

КонецФункции
13 программистище
 
14.08.20
16:46
Функция МассивИзСтроки(Знач Стр, Разделитель=",") Экспорт

    Массив      = Новый Массив;
    ПраваяЧасть = ОтделитьРазделителем(Стр, Разделитель);
    
    Пока Не ПустаяСтрока(Стр) Цикл
        Массив.Добавить(СокрЛП(Стр));
        Стр         = ПраваяЧасть;
        ПраваяЧасть = ОтделитьРазделителем(Стр, Разделитель);
    КонецЦикла;

    Возврат(Массив);
    
КонецФункции
14 arsik
 
гуру
14.08.20
16:47
(11) Я не могу понять, что значит "числовое значение с типом ЦВЕТ"
15 arsik
 
гуру
14.08.20
16:48
Может тебе нужно в 16-ричном формате передавать? Например #15E5D8
16 bebibo
 
14.08.20
16:48
(14) Есть типы: строка, дата, число, цвет
у типа число - в значении цифры
у типа цвет -  в значении тоже цифры
17 VladZ
 
14.08.20
16:48
(0) Храни в одном реквизите в виде строки: как пример "255,0,0".
18 VladZ
 
14.08.20
16:49
+17 Через "выполнить" приводи к типу Цвет.
19 bebibo
 
14.08.20
16:50
(18) это как?
20 VladZ
 
14.08.20
16:52
ЦветВажный = "";
ПараметрыЦвета = "255,0,0";  // вот тут твой цвет.
Выполнить("ЦветВажный = Новый Цвет(" + ПараметрыЦвета + ");");
сообщить(ЦветВажный);
21 vde69
 
14.08.20
16:53
чем не устраивает

Новый ХранилищеЗначений(ТвойЦвет)
22 bebibo
 
14.08.20
16:57
(20) Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
Конструктор не найден
ЦветВажный = Новый <<?>>Цвет(0)
23 Жан Пердежон
 
14.08.20
17:02
(0)
Чем "тремя реквизитами RGB не подходит"? или срокой?
24 VladZ
 
14.08.20
17:05
(22) Цвет задается тремя значениями, см. (20).  А у тебя просто "0". Косяк!
25 ГдеСобака Зарыта
 
14.08.20
17:09
Помниться я хранил цвета в строке через ЗначениеВСтрокуВнутр()
26 Kesim
 
14.08.20
17:11
(0) вроде как цвет как тип работает:
&НаСервере
Процедура Команда1НаСервере()
    Элементы.Полепокраски.ЦветФона = реквизит1;
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    //реквизит1 - реквизит формы с типом цвет
    Команда1НаСервере();
КонецПроцедуры
27 Kesim
 
14.08.20
17:16
(0) варианты создания цвета:
ЦветВажнойКнопки = Новый Цвет(255, 0, 0);
ЦветОбычнойКнопки = ЦветаСтиля.ЦветФонаКнопки;
ЦветВеб = WebЦвета.Аквамарин;

дальше сам, хочешь цифрами , хочешь строкой, хочешь цветом

сп:
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/ui}. Имя типа XDTO: Color.
28 Tatitutu
 
14.08.20
17:45
Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя
http://catalog.mista.ru/1c/articles/370554/
29 acht
 
14.08.20
19:25
(27) > Сериализуется. Данный объект может быть сериализован в/из XML

Практически готовый ответ. ХранилищеЗначений или строка. В обоих случаях надо чуть-чуть пританцовывать при присвоении и извлечении, но ХранилищеЗначений проще.
30 Ёпрст
 
14.08.20
20:14
Можно и условноеОфоррмление сериализовать, там и цвет и шрифт и усё на свете
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший