Имя: Пароль:
1C
1С v8
Как преобразовать цвет 1с в RGB?
0 Andy MilkyWay
 
03.12.12
16:48
В константе сохранил значение выбранного пользователем цвета в виде строки по функции ЗначениеВСтрокуВнутр(). Потом мне нужно использовать его:
1) для условной раскраски табличного поля (ПриВыводеСтроки) - это работает
2) для раскраски отдельных ячеек Excel при формировании печатной формы.
В Excel'е цвет представляется в виде большого числа, которое можно сформировать, зная значения RGB для нужного цвета. Но получить RGB-составляющие для Web-цвета из 1с не могу (выдается -1,-1,-1).
Вопрос: можно ли получить составляющие RGB для любого вида цвета 1с (Web,Windows и другие виды цветов)?
1 Wobland
 
03.12.12
16:50
хранить в 1с в ргб предлагать?
2 Wobland
 
03.12.12
16:51
кстати, можно, но только красный, синий и зелёный
3 Лефмихалыч
 
03.12.12
16:51
Цвет (Color)
Свойства:

Вид (Type)
Зеленый (G)
Красный (R)
Синий (B)

Конструкторы:

Конструктор по умолчанию
На основе цветовых составляющих

Описание:

Предназначен для определения и хранения значение цвета. Цвет может определяться абсолютным значением (сочетанием красного, синего и зеленого цветов), браться из элементов стиля, из палитры Windows, или использоваться один из web-цветов.
Может присваиваться в качестве значения атрибутов других объектов, параметров методов, процедур или функций, имеющих тип Цвет.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/ui}. Имя типа XDTO: Color.
Пример:

ЦветВажнойКнопки = Новый Цвет(255, 0, 0); // красный
ЦветОбычнойКнопки = ЦветаСтиля.ЦветФонаКнопки;

// Для обычной формы
Если ОстатокТовара <= Товар.Остаток Тогда
   ЭлементыФормы.КнопкаЗаказать.ЦветФонаКнопки = ЦветВажнойКнопки;
Иначе
   ЭлементыФормы.КнопкаЗаказать.ЦветФонаКнопки = ЦветОбычнойКнопки;
КонецЕсли;

// Для управляемой формы
Если ОстатокТовара <= Товар.Остаток Тогда
   Элементы.КнопкаЗаказать.ЦветФона = ЦветВажнойКнопки;
Иначе
   Элементы.КнопкаЗаказать.ЦветФона = ЦветОбычнойКнопки;
КонецЕсли;
4 Лефмихалыч
 
03.12.12
16:53
а, ну да, правильный ответ - не использовать веб-цвета или использовать их RGB-аналоги
5 Ager
 
03.12.12
17:06
6 Andy MilkyWay
 
04.12.12
11:36
Я программировал раньше на FoxPro. Там были две возможности, которых я не нашел в 1с. Есть ли в 1с:

1. возможность макроподстановок, например, у меня есть структура, где ключ - наименование переменной, а значение - выражение для расчета этой переменной. В цикле нужно вычислить значение и поместить в ту переменную, которая равна ключу. В FoxPro можно было сделать так:

Переменная1 = "МояПеременная";
ВыражениеДляРасчета = "1+2";
store eval(ВыражениеДляРасчета) to (Переменная1)

т.е. в переменной МояПеременная в результате хранится 3.

2. возможность выполнять динамические фрагменты кода. Т.е. я в строковую переменную стрПеременная динамически формирую текст программы, а потом выполняю его через

ExecScript(стрПеременная)
7 Wobland
 
04.12.12
11:37
1. Выполнить
2. Выполнить
8 Andy MilkyWay
 
04.12.12
11:40
(7). 1. Выполнить вычислит только результат выражения, а как сохранить в переменную, указанную в Переменная1?
9 Andy MilkyWay
 
04.12.12
11:41
т.е. у меня в Переменная1 хранится имя другой переменной, в которую нужно сохранить результат выражения
10 Wobland
 
04.12.12
11:41
(8) выполнить выполнит тебе кусок кода
11 Wobland
 
04.12.12
11:42
(9) вот ересь какую-то задумал. обычно такой потребности не возникает
12 Andy MilkyWay
 
04.12.12
11:42
(10) да, я понял. Вопрос: как сохранить результат вычисления в переменную, указанную как строка в другой переменной?
13 Andy MilkyWay
 
04.12.12
11:43
(11) Возможно, вы правы. Так как в 1с есть другие механизмы, которых нет в FoxPro, просто, по привычке, хочется сделать так, как привык раньше
14 Wobland
 
04.12.12
11:44
(12) выполнить кусок кода, содержащий внутри "="
15 Andy MilkyWay
 
04.12.12
11:48
(14) Так сработает? Я пробовал, но у меня выдало ошибку. Может ошибся в тексте. Ага, надо попробовать. Благодарю
16 Wobland
 
04.12.12
11:49
(15) а я вот никогда не пробовал. отпишись, как взлетит - знать буду ;)
17 Andy MilkyWay
 
04.12.12
11:51
(16) Сейчас попробую
18 Rovan
 
гуру
04.12.12
11:52
(12) Переменная1 = "МояПеременная";
ВыражениеДляРасчета = "1+2";
Выполнить(Переменная1 + " = " + ВыражениеДляРасчета);
19 Rovan
 
гуру
04.12.12
11:53
(+18) но на Мисте любят спрашивать "Зачем ?"
намекая на то, что скорее всего задачу можно выполнить проще
20 Andy MilkyWay
 
04.12.12
11:57
(16) с небольшой поправкой к (18) получилось:

МояПеременная = неопределено;
Переменная1 = "МояПеременная";
ВыражениеДляРасчета = "1+2";
Выполнить(Переменная1 + " = " + ВыражениеДляРасчета);
Сообщить(МояПеременная);
21 Andy MilkyWay
 
04.12.12
11:58
(19) не спорю. Как я уже писал выше, просто действует многолетняя привычка делать так, опыт FoxPro
22 Wobland
 
04.12.12
11:59
(21) рассказывай. какашкой кинут, но научат хоть. я сам не доброшу
23 Andy MilkyWay
 
04.12.12
12:01
(22) да я уже,собственно, рассказал в (20). Все получилось. Но сделал уже проще во 1-с-ному ;)
24 Andy MilkyWay
 
04.12.12
12:02
(+23) по 1-с-ному (опечатка)