Имя: Пароль:
1C
1С v8
Цвет в реквизит типа ХранилищеЗначения?
,
0 prazdnik4334
 
06.02.13
00:22
Помогите пожалуйста. Как поместить Цвет в реквизит и этот цвет отобразить на форме? (Нужно квалификационный уровень в отчёте отображать своим цветом)

Начал делать так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   
   Диалог=Новый ДиалогВыбораЦвета;
   Диалог.Выбрать();
   ПомЦвет(Диалог.Цвет);
   //Сообщить(Пров());
   
КонецПроцедуры

Процедура ПомЦвет(Цвет)
   
   Об=РеквизитФормыВЗначение("Объект");
   Об.Цвет=Новый ХранилищеЗначения (Новый Цвет(Цвет));
   ЗначениеВРеквизитФормы(Об, "Объект");

КонецПроцедуры

Выдаёт ошибку: "Новый ?? Цвет" конструктор не найден.
1 DrShad
 
06.02.13
00:26
Об=РеквизитФормыВЗначение("Объект");
   Об.Цвет=Новый ХранилищеЗначения (Новый Цвет(Цвет));
   ЗначениеВРеквизитФормы(Об, "Объект");

зачем это все?
2 H A D G E H O G s
 
06.02.13
00:28
Сделай отдельную, годную настройку Оформления строк в СКД, будь мужиком!
3 prazdnik4334
 
06.02.13
00:34
(2). По условию задачи, в справочнике должен быть реквизит Цвет с типом ХранилищеЗначения.
4 prazdnik4334
 
06.02.13
00:36
По поводу отображения на форме, можно какой-то текст покрасить в соответствующий цвет (сам себе ответил). Но хотелось бы что-то типа небольшого цветного квадрата или как-то по-другому. Если знаете, подскажите.
5 DrShad
 
06.02.13
00:38
ДиалогВыбораЦвета (ColorChooseDialog)
Цвет (Color)
Использование:

Только чтение.
Описание:

Тип: Цвет.
Содержит цвет, устанавливаемый при открытии диалога.
После выбора содержит выбранный цвет.

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

Тонкий клиент, толстый клиент, внешнее соединение.
6 DrShad
 
06.02.13
00:38
т.е. у тебя уже есть Цвет, зачем его еще раз создавать?
7 prazdnik4334
 
06.02.13
00:40
(6). Это я только пробовал его в реквизит поместить и не получилось.
8 Вуглускр1991
 
06.02.13
00:42
Помещай массив из трех чисел rgb.
9 prazdnik4334
 
06.02.13
00:43
Облазил весь Инет, как работать с файлами и Хранилищем много инфо, а с цветом - ничего.
10 DrShad
 
06.02.13
00:44
Цвет (Color)
Конструктор по умолчанию
Синтаксис:

Новый Цвет()
Описание:

Создает значение цвета, которое будет использоваться как значение по умолчанию (цвет "Авто").
Пример:

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
   Если Элемент.ТекущаяСтрока=Неопределено Тогда
       Возврат;
   КонецЕсли;
   
   Для Каждого Офр Из ОформленияСтрок Цикл
       Если Офр.ДанныеСтроки.Важно Тогда
           Офр.ЦветФона = Новый Цвет(197, 255, 185);
       Иначе
           Офр.ЦветФона = Новый Цвет();
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
11 prazdnik4334
 
06.02.13
00:44
(8). Можно так, но в 1С есть же тип Цвет. Чё не получается его поместить в Хранилище?
12 DrShad
 
06.02.13
00:45
+(10) и нигде нет такой конструкции как у тебя
13 prazdnik4334
 
06.02.13
00:47
(10). У меня ж выдаёт ошибку на "Новый Цвет()". Выходит, что диалог выбора цвета возвращает цвет не в формате (Число, Число, Число).
14 DrShad
 
06.02.13
00:47
еще раз спрашиваю - у тебя есть уже Цвет в первой процедуре - зачем ты его пихаешь в конструктор создания цвета?
15 DrShad
 
06.02.13
00:48
это как из масла создавать масло
16 prazdnik4334
 
06.02.13
00:52
(14). Да, тот код, что я написал, это я попробовал, как всё работает. Выбрать цвет->записать в реквизит->пользоваться цветом из реквизита. А по поводу (13) проверил, действительно диалог выдаёт цвет не в формате (число, число, число), а - название стиля.
17 prazdnik4334
 
06.02.13
00:56
Диалог выбора цвета возвращает и R, G, B, вот только при выборе любого цвета выдаёт (-1, -1, -1)???
18 DrShad
 
06.02.13
01:01
продолжайте наблюдения
19 prazdnik4334
 
06.02.13
11:01
В Инете нашёл с другим диалогом выбора цвета:

Процедура Реквизит1ПриИзменении(Элемент)

   ШелСкрипт=Новый COMОбъект("WScript.Shell");
   ШелСкрипт.RegWrite("HKLM\SOFTWARE\Classes\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905\","gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj");
   Диалог=Новый COMОбъект("MSComDlg.CommonDialog");
   Диалог.ShowColor();
   Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.AddObject("Диалог",Диалог);
   Цвет = РазложитьRGB(Скрипт.Eval("Диалог.Color"));    

КонецПроцедуры

Функция  РазложитьRGB(ЗначениеЧислом)

   ЦветRGB = ЗначениеЧислом;
   R = ЦветRGB%256;
   G = (Цел(ЦветRGB/256))%256;
   B = (Цел(ЦветRGB/(256 * 256)))%256;

   Возврат Новый Цвет(R,G,B);

КонецФункции
20 vde69
 
06.02.13
11:04
давно делал сабж на ПВХ, правда не помню уже что именно сохранял цвет или его представления...
21 Reset
 
06.02.13
11:05
(0)
Об.Цвет=Новый ХранилищеЗначения (Новый Цвет(Цвет));
==>
Об.Цвет=Новый ХранилищеЗначения(Цвет);


Об этом тебе всю тему твердят
22 Ns33
 
06.02.13
11:06
1. Реквизит Цвет, строка , 100

2. Реквизит формы Цвет, тип - Цвет

3. Поле формы цвет, путь  данным Форма.Цвет, тип поле ввода.

4.
&НаСервере
Процедура ВосстановитьЦвет()
   
   Если Объект.Цвет="0" Тогда
       Возврат;
   КонецЕсли;
   
   Если НЕ ЗначениеЗаполнено(Объект.Цвет) Тогда
       Возврат;
   КонецЕсли;
   
   Цвет= ЗначениеИзСтрокиВнутр(Объект.Цвет);
 

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ВосстановитьЦвет();
   // Вставить содержимое обработчика.
КонецПроцедуры

5.

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   Объект.Цвет=значениевстрокувнутр(цвет);
   ТекущийОбъект.Цвет=значениевстрокувнутр(цвет);
   
КонецПроцедуры
23 prazdnik4334
 
06.02.13
14:33
(22). Спасибо, во многом помогло.
24 Михаил Козлов
 
06.02.13
14:36
(23) Цвет можно хранить в 16-ом виде, т.е. без хранилища.