Преобразование цветов без таблиц сопоставления. Готовый код

23.05.22

Разработка - Универсальные функции

Преобразование цветов разных видов только средствами 1С, без использования статичных правил сопоставления.

На тему преобразования цветов есть несколько публикаций, в т.ч. на ИС, но все они либо отрывочны, либо базируются на поиске по таблице (неважно, заданной в коде, макетом, обращением к вебу или ещё как). В ходе работы мне понадобилось решить ряд задач, потребовавших самых разных преобразований, и мне не хотелось прибегать к статичным таблицам.

Оставим в стороне теорию, что такое объект "Цвет" в 1С и каковы нюансы его хранения, чтения и поведения в коллекциях. Просто замечу, что при решении задачи я использовал только штатные средства платформы, сериализацию и десериализацию, неявные преобразования объектов 1С, и ориентировался как на 8.2, так и на 8.3, причём 8.3 релизов до появления бинарных операций.

Рассматривались web-цвета, windows-цвета, абсолютные цвета - словом, то, что доступно в диалогах выбора цвета в Конфигураторе и Предприятии. Цвета в диалогах формы - всякие, все в кучу; и в зависимости от выбранного, возвращают цвет разного вида (кроме, конечно, авто-цвета).

Коллекция веб-цветов 1С, доступная из системного набора значений WebЦвета, является, по сути, аналогом Extended color keywords (п.4.3 спецификации www.w3.org/TR/2022), которая представляет собой последовательный набор строковых имён цветов в русской и английской нотациях, упорядоченный от 1 до 146 алфавитно по возрастанию английской нотации. Нулевой индекс не используется. Индекс, больший, чем 146, считается преобразователем 1С соответствующим тёмно-бордовому (Maroon, код 84). Эти значения заявлены в фасете перечисления в определении простого типа XS системной xml-схемы пакета  http://v8.1c.ru/8.1/data/ui/colors/web, но они ничего не дают в плане преобразования во что-либо. Это статично заданные цвета.
Принцип, по которому они упорядочены в диалоге выбора цвета, мне понять не удалось.

Аналогично, коллекция цветов из системного набора значений WindowsЦвета, аналогична CSS system colors (п.4.5 той же спецификации). Нулевой индекс не используется. Индекс, больший, чем 28, считается преобразователем 1С соответствующим "Заголовок неактивного окна (градиент средний)". В диалоге выбора упорядочены по возрастанию индексов. Интересно, что в палитре есть два цвета с именем "ГраницаАктивногоОкна" и разными индексами и реальным цветом. Это цвета, зависящие от настройки ОС.

По преобразованию веб-цветов, конечно, можно ещё применить js и функцию getComputedStyle, но это работает не на всех браузерах и может зависеть от версии WebKit. По преобразованию win-цветов можно задействовать WinAPI-функцию GetSysColor.

Цвета как элементы стиля это лишь надстройка, потому самостоятельно не рассматривались. Все объекты метаданных с видом Метаданные.СвойстваОбъектов.ВидЭлементаСтиля.Цвет позволяют получить сам цвет из свойства "Значение", и задача сводится к предыдущей. Единственно, замечу, в нотации ЗначениеВСтрокуВнутр цвета стиля кодируются цифрой 3.

Учитывалось, что цвета разных видов не равны как переменные, несмотря на визуальную аналогичность, ни при каких преобразованиях. Будем говорить о цветах без прозрачности (т.е. без альфа-компоненты RGBA), без HSL/HSLA. Все 16-ричные значения в коде обрабатываются как строки, без хеш-метки "#". В комментариях к коду даны указания об альтернативных способах решения в рамках платформы.

 
 Функции преобразования цветов

 

Ссылки:

Стандарты W3C
//infostart.ru/public/860960/
//infostart.ru/public/1278131/

Ещё интересно было бы попробовать JS-функция преобразования без getComputedStyle

 

Всё это, или почти всё, уже ранее было, и данная публикация является всего лишь компиляцией. Претензии по внешнему виду кода не принимаются априорно, прочая критика приветствуется.

Проверено на 8.3.6.2237. Для отдельных непонятливых, почему такой релиз, объясню: у многих ещё 8.2, а это стабильный релиз, близкий к 8.2 по своим возможностям. Публикация сделана и маркирована в расчёте и на прежние версии платформы.

Цвет Преобразование цветов Конвертация Сериализация цвета Hex RGB

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7505    bayselonarrend    20    

154

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20231    dimanich70    81    

145

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23783    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14774    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3592    57    progmaster    8    

4

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    25592    SeiOkami    31    

113
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6915 23.05.22 17:27 Сейчас в теме
В статье про краски мало яркости )))
artbear; t278; adhocprog; +3 Ответить
2. Diversus 2329 24.05.22 09:12 Сейчас в теме
Сделал и сопровождаю целую библиотеку для работы с цветом :)
Универсальные функции для работы с цветом в 1С
Там есть в том числе и то, что вы предлагаете. Правда в несколько иной форме.
3. Dimbayyyy 196 24.05.22 09:43 Сейчас в теме
Кто-нибудь извлек хоть какую-то пользу из статьи?
Никакой информативности.
Проверено на 8.3.6.2237.
- найс, это же самая актуальная платформа!
5. Артано 795 23.06.22 14:33 Сейчас в теме
(3)
Кто-нибудь извлек хоть какую-то пользу из статьи?
Никакой информативности.
Проверено на 8.3.6.2237.
- найс, это же самая актуальная платформа!


Когда потребуется поддерживать универсальный инструмент работающий на ряде платформ разной степени замшелости, то поймёте.
В данном случае чем ниже старейшая поддерживаемая версия платформы тем лучше.

P.S. Судя по коду 8.1 должно поддерживаться, вроде тогда появилась явная сериализация через XDTO
unknown181538; Yashazz; +2 Ответить
4. ge_ni 306 30.05.22 12:29 Сейчас в теме
Раньше искал подобное... Яков Коган!!! И Бесплатно!!! Однозначно "+" :)
Оставьте свое сообщение