Цвет как реквизит объекта в 1с

Для начала вкратце опишу проблему. Понадобилось мне каждому элементу справочника задать свой цвет. Причем выбор цвета должен осуществляться пользователями.  В 1с есть встроенный диалог выбора цвета, его то я и использовал.  Однако, реквизита с типов цвет,  в прикладных типах нет, а потому пришлось пойти на небольшие хитрости. Итак разобьем весь процесс на несколько шагов.
  1.  Первый шаг это добавить в нужный нам объект конфигурации  Реквизит «Цвет» (вы можете назвать как вам угодно), тип — Строка, длина — 100.
  2. Выведем на форму, этот реквизит. Тип элемента формы выбрем поле ввода, и включим для элемента кнопку выбора.
  3. Для нашего реквизита Цвет, подключим обработчик события, НачалоВыбора. Код обработчика будет следующий:
    //Выбор цвета врача для расписания
    &НаКлиенте
    Процедура ЦветВКалендареНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    	ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета;
     	Оповещение = Новый ОписаниеОповещения("ВыборЦветаЗавершение", ЭтотОбъект);
    	ДиалогВыбораЦвета.Показать(Оповещение);
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВыборЦветаЗавершение(Результат, ДополнительныеПараметры) Экспорт
    	Если НЕ Результат = Неопределено Тогда
    		Элементы.ЦветВКалендаре.ЦветФона = Результат;
    		Элементы.ЦветВКалендаре.ЦветТекста = Результат;
    		ЗаписатьЦвет(Результат);
    	КонецЕсли;
    КонецПроцедуры
    
    &НаСервере
    Процедура ЗаписатьЦвет(Цвет)
    	мЦвет = ЗначениеВСтрокуВнутр(Цвет);
    	Объект.ЦветВКалендаре = мЦвет;	
    КонецПроцедуры
4.  Таким образом, мы вызываем в обработчике стандартный Диалог выбора системы, и полученное значение преобразуем в строку. Эту строку мы и храним в нашем объекте.  Не сложно догадаться, что делается это при помощи функции ЗначениеВСтрокуВнутр().  5. Дальше при открытии формы справочника, мы можем свободно извлечь наш цвет и установить его в качестве ЦветаФона нужного нам элемента. Код ниже
&НаСервере
Функция ПолучитьЦветВрача()
	Если ЗначениеЗаполнено(Объект.ЦветВКалендаре) Тогда
		Возврат ЗначениеИзСтрокиВнутр(Объект.ЦветВКалендаре);
	КонецЕсли;	
КонецФункции	
	
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если ЗначениеЗаполнено(Объект.ЦветВКалендаре) Тогда
		ЦветВрача = ПолучитьЦветВрача();
		Элементы.ЦветВКалендаре.ЦветФона = ЦветВрача;
		Элементы.ЦветВКалендаре.ЦветТекста = ЦветВрача;
	КонецЕсли;		
КонецПроцедуры
Вот, так легко и просто мы можем использовать Цвет в качестве «реквизита» справочника.  

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика