Конвертация относительных цветов в абсолютные (RGB)

04.10.20

Разработка - Работа с интерфейсом

Способ конвертации палитры относительных цветов 1С в абсолютные с помощью механизмов HTML, XSLT и XDTO.

Выражаю огромную благодарность автору AlexxSys за его публикацию Получение RGB (HEX) цвета.

 

Как известно в 1С цвета делятся по следующим видам:

  • WebЦвет (WebColor) - задается палитрой Web-цветов. Самая богатая палитра в которой можно найти цвета практически на любой вкус.
  • WindowsЦвет (WindowsColor) - задается палитрой операционной системы. Интересно на linux она пустая?)
  • АвтоЦвет (AutoColor) - контекстоно-зависимый цвет, который определятся платформой в зависимости от свойства объекта для которого он задается.
  • ЭлементСтиля (StyleItem) - Задается палитрой цветов стиля, которую определяет разработчик конфигурации.
  • Абсолютный (Absolute) -Произвольный цвет, который задается абсолютным значением сочетания красного, зеленого и синего компонента.

Проблема заключается в том, что только объект цвета с абсолютным видом содержит значения RGB компонент. По работе с столкнулся с проблемой, что нужно получить из любого вида цвета абсолютные значения RGB компонент. Очень помогла статья AlexxSys с выбором объекта, который умеет вытаскивать HEX значение переданного цвета. В начале экспериментировал с форматированной строкой, но выяснилось, что она не умеет доставать HEX из палитры Windows-цветов.

 

Представляю на суд общественности метод, который позволяется с помощью HTML, XSLT и XDTO получить массив цветов с абсолютными значениями RGB компонент. 

 

Немного о костылях

Почему-то цвет фона элемента форматированного документа не устанавливается первого раза. Так же обратил внимание, что автор оригинальной публикации тоже извращался с установкой цвета "ФорматированныйДокумент.Элементы[0].Элементы[0].ЦветФона = Цвет", возможно по той же причине. Если знаете, как победить эту напасть просьба написать в комментарии.

 

Процедура КонвертироватьСистемыеЦветаВАбсолютные(ПалитраЦветов)Экспорт 
	
	КонвертируемыеСтроки = Новый Массив;
	ФорматированныйДокумент = Новый ФорматированныйДокумент;
	
	// Подготовим список цветов
	Для Каждого СтрокаСписка Из ПалитраЦветов Цикл  
		
		Цвет = СтрокаСписка.Значение;
		Если Цвет.Вид = ВидЦвета.Абсолютный Тогда 
			Продолжить;
		КонецЕсли;
		
		Если ПустаяСтрока(СтрокаСписка.Представление) Тогда 
			СтрокаСписка.Представление = Строка(Цвет);
		КонецЕсли;
				
		Если Цвет.Вид = ВидЦвета.АвтоЦвет Тогда 
			
			// Авто цвет, можно узнать только из контекста использования
			СтрокаСписка.Значение = Новый Цвет(0, 0, 0);
			Продолжить;
			
		КонецЕсли;
		
		КонвертируемыеСтроки.Добавить(СтрокаСписка);
		
		Элемент = ФорматированныйДокумент.Добавить("Текст", Тип("ТекстФорматированногоДокумента"));
		Элемент.ЦветФона = Цвет;
		
		// Ошибка а платформе 8.3.15.1830, так же ошибка воспроизводится и на платформе 8.3.17.1549
		// Цвет устанавливается только со второго раза.
		Элемент.ЦветФона = Цвет;
		
	КонецЦикла;
				
	// Получим массив цветов
	ТаблицаСтилей = 
	"<xsl:stylesheet version=""1.0""  xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">   
	|	<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes""/>
	|	<xsl:template match=""/"">
	|		<Array xsi:type=""Array"">
	|		<xsl:for-each select=""/html/body//span"">
	|			<xsl:if test=""substring-after(@style, '#') != ''"">
	|				<Value  xmlns:d2p1=""http://v8.1c.ru/8.1/data/ui"" xsi:type=""d2p1:Color"">
	|				<xsl:text>#</xsl:text>
	|				<xsl:value-of select=""substring(substring-after(@style, '#'), 1, 6)""/>
	|				</Value>
	|			</xsl:if>
	|		</xsl:for-each>
	|		</Array>
	|	</xsl:template>
	|</xsl:stylesheet>";
	
	Процессор = Новый ПреобразованиеXSL;
	Процессор.ЗагрузитьТаблицуСтилейXSLИзСтроки(ТаблицаСтилей);
	
	СтрокаHTML = "";
	ФорматированныйДокумент.ПолучитьHTML(СтрокаHTML, Новый Структура);
	
	КонвертируемыеЦвета = Процессор.ПреобразоватьИзСтроки(СтрокаHTML);
	КонвертируемыеЦвета = ОбщегоНазначения.ЗначениеИзСтрокиXML(КонвертируемыеЦвета);
	
	// Заместим исходные цвета
	Индекс = 0;
	Для Каждого СтрокаСписка Из КонвертируемыеСтроки Цикл 
		
		СтрокаСписка.Значение = КонвертируемыеЦвета[Индекс];
		Индекс = Индекс + 1;
		
	КонецЦикла;
	
КонецПроцедуры

 

WebЦвет WindowsЦвет АвтоЦвет ЭлементСтиля RGB HTML XSLT XDTO

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55974    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64309    45    60    

83

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    20297    29    6    

45

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    26191    mrXoxot    44    

130

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    13627    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    18900    1241    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    13250    171    acces969    31    

127

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    8864    kalyaka    6    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ShiningPhoenix 28 04.10.20 10:02 Сейчас в теме
Полезный финт.
Делал что-то подобное лет 7 назад через раскрашенный таб. док. сохраненный в HTML и то подсмотрел у кого-то.
2. Diversus 2333 04.10.20 12:16 Сейчас в теме
(0) Недавно выложил свою разработку на эту тему
Универсальные функции для работы с цветом в 1С
Там есть функция, которая конвертирует любой цвет (HEX, WebЦвет, WindowsЦвет) в абсолютный цвет.
Да и вообще там много чего есть.
3. An-Aleksey 64 30.07.21 17:03 Сейчас в теме
Спасибо, пригодилось!
Оставьте свое сообщение