Постановка задачи
Появилась идея для самописки - сделать набор отчётов с диаграммами, что бы за каждым показателем был закреплён определенный цвет и был одинаковый во всех отчётах. Также должна быть возможность изменения цвета показателей для отдельных пользователей, т.к. цветовосприятие у некоторых людей может сильно отличаться.
Поиск решения
Первое, что пришло в голову, что этим управлять вообще невозможно. Второе - что возможно поможет программная компоновка отчёта. Третье - надо погуглить.
Поиск вывел на статью 1С:Зазеркалье | Развитие диаграмм от 13.06.2019. Автоматическое сохранение цвета серии - то что нужно!. Анонсированные в статье возможности доступны в 8.3.16.1030.
Документации не нашёл. Поиск тоже не помог. Ну, значит, будем экспериментировать и писать статью.
Описание механизма
Статья не претендует на полное руководство, описаны только моменты, с которыми я столкнулся при выполнении задачи. Если есть чем дополнить - пишите в комментарии.
Соответствие серий и их цветов хранится в системном хранилище настроек. Для автоматического сохранения и восстановления цветов серий добавлены две новые настройки диаграмм. Настройку можно сделать для всех диаграмм отчёта по умолчанию и для каждой отдельной диаграммы.
- Сохранение цветов
- Авто - Настройка берётся от родительского элемента (установлено по умолчанию)
- Для пользователя - Сохранение для текущего пользователя*
- Для текущего результата - Не знаю. Не проверял.
- По ключу для пользователя - Для текущего пользователя + произвольный ключ*
- Не использовать - Цвета как и раньше выбираются случайно
- Ключ сохранения цветов - Текстовый ключ для настроек
* Если в базе пользователи не используются - настройки всё равно будут сохраняться с пустым именем пользователя.
После установки этих настроек цвета серий действительно начали сохраняться и загружаться, но я так и не нашёл как с помощью интерфейса их можно задать принудительно или предопределить. Какого-либо программного интерфейса для этого тоже не нашёл, по этому решил разобраться в каком виде эти настройки хранятся и задать их через хранилище настроек. (Если знаете как это сделать по другому - пишите в комментариях)
Получив все ключи объектов системных настроек я нашёл нужный. Есть два варианта, зависит от настройки сохранения цветов "По ключу для пользователя" и ключа сохранения цветов:
- Ключ не используется - Общее/ЦветаДиаграммы
- Ключ используется - Общее/ЦветаДиаграммы/ВАШ_КЛЮЧ
Пробуем прочитать:
КлючОбъекта = "Общее/ЦветаДиаграммы/ЦветаПоказателей";
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
НастройкиЦветовСерий = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта,,, ИмяПользователя);
Получили объект типа ОформлениеЗначений. В справке он описан, походит на соответствие (пары ключ-значение произвольных типов). В нашем случае тип ключа текстовый - это название серии (текст серии). В качестве значения можно использовать цвет любого типа:
НастройкиЦветовСерий.Установить("Доход", ЦветаСтиля.ЦветАкцента);
НастройкиЦветовСерий.Установить("Расход", Новый Цвет(255,0,0));
НастройкиЦветовСерий.Установить("Прибыль", ЦветаСтиля.ЦветФонаВыделенияПоля);// WindowsЦвета.Подсвеченный);
НастройкиЦветовСерий.Установить("Фонд", WebЦвета.Золотой);
Не рекомендую использовать WindowsЦвета, т.к. на других системах платформа отображает их чёрным цветом. И даже на Windows при попытке приведения к абсолютному цвету получаем вообще другой цвет (возможно я получил такой эффект потому, что использую цветовую схему определённую вручную).
Выводы
Использование механизма для поставленной задачи возможно, но в нём нет настроек по умолчанию и это нужно реализовать. Для этого можно создать объект типа ОформлениеЗначений, задать нужные настройки цветов и сохранить в системное хранилище без имени пользователя. Ниже предполагаемый алгоритм.
Нужно создать удобный интерфейс для отображения и выбора цветов серий, чтобы пользователь смог в режиме предприятия изменять настройки по умолчанию и личные настройки. Начал делать этот интерфейс и заодно научился раскрашивать ячейку таблицы значений в зависимости от выбранного цвета (см. второй скриншот). Как это сделать написал в статье Раскраска ячейки таблицы значений для УФ , кому просто нужен код - качайте обработку.
В справке для объекта типа ОформлениеЗначений указано, что "для ключа одного типа может содержаться не более 100 записей" и это нужно учитывать при работе с механизмом. Так же в справке по объекту Диаграмма появилось описание нового метода ЗаполнитьЦветаСерий(ОформлениеЗначений), по этому хоть в обычной диаграмме и нет настройки автоматического сохранения и загрузки цветов, теперь мы можем это реализовать без обращения к коллекции серий диаграммы на форме.
Весть эксперимент оформлен в виде внешнего отчёта, так же в нем есть форма выбора цветов. Хотя описанные возможности доступны в 8.3.16, для работы отчёта необходима платформа не ниже 8.3.20, т.к. я использовал новые арифметические возможности языка запросов для генерации таблицы тестовых данных прямо в запросе схемы компоновки данных. Почему? Просто захотелось, эксперимент в эксперименте, попутно выяснилось, что работа с функциями Log и Log10 отличается на файловой и серверной базе, и от их использования отказался.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.20.106