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