Конвертация относительных цветов в абсолютные (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 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    17666    24    6    

38

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

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

27.05.2024    5449    smielka    37    

95

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

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

27.12.2023    12505    789    elcoan    47    

110

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10684    158    acces969    31    

120

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

05.07.2022    4621    kalyaka    6    

32

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    9385    1    2    

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