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

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

См. также

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6909    dsdred    36    

113

1С-ная магия

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

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

06.10.2023    18987    SeiOkami    46    

118

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9324    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2197    24    progmaster    7    

3

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

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

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    7118    SeiOkami    10    

140

Версионирование объектов VS История данных

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

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    19783    dsdred    54    

195

Практическая шпаргалка по новым возможностям языка запросов 1С

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

В предлагаемой статье решил привести примеры применения новых возможностей языка запросов 1С, начиная с версии платформы 8.3.20.

21.11.2022    23838    quazare    36    

122

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16326    141    sapervodichka    112    

129
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6793 23.05.22 17:27 Сейчас в теме
В статье про краски мало яркости )))
artbear; t278; adhocprog; +3 Ответить
2. Diversus 2310 24.05.22 09:12 Сейчас в теме
Сделал и сопровождаю целую библиотеку для работы с цветом :)
Универсальные функции для работы с цветом в 1С
Там есть в том числе и то, что вы предлагаете. Правда в несколько иной форме.
3. Dimbayyyy 181 24.05.22 09:43 Сейчас в теме
Кто-нибудь извлек хоть какую-то пользу из статьи?
Никакой информативности.
Проверено на 8.3.6.2237.
- найс, это же самая актуальная платформа!
5. Артано 762 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 Сейчас в теме
Раньше искал подобное... Яков Коган!!! И Бесплатно!!! Однозначно "+" :)
Оставьте свое сообщение