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