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