// Функция конвертирует hex в dec
//
Функция итКонвертироватьHexВDec(Знач ЧислоСтрокой)
Результат = 0;
Шаблон = "0123456789ABCDEF";
ЧислоСтрокой = ВРег(Строка(ЧислоСтрокой));
Для ТекущийСимвол = 1 По СтрДлина(ЧислоСтрокой) Цикл
ПозицияВШаблоне = Найти(Шаблон, Сред(ЧислоСтрокой, ТекущийСимвол, 1))-1;
Результат = Результат * СтрДлина(Шаблон) + ПозицияВШаблоне;
КонецЦикла;
Возврат Результат;
КонецФункции
// Функция загружает данные из макета в таблицу значений
//
Функция итЗагрузитьТаблицуИзМакета(ИмяМакета, ИмяОбласти) Экспорт
Макет = ПолучитьМакет(ИмяМакета);
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область(ИмяОбласти));
// Возвращаем таблицу значений с отобранными из макета данными
ПостроительЗапроса.Выполнить();
Возврат ПостроительЗапроса.Результат.Выгрузить();
КонецФункции
// Функция получает абсолютный RGBЦвет
//
Функция итПолучитьАбсолютныйRGBЦвет(Знач Цвет) Экспорт
// Приводим цвет стиля к простому RGB, Абсолютному, Windows-цвету
Если Цвет.Вид = ВидЦвета.ЭлементСтиля Тогда
ОбъектМетаданныхСтиля = Метаданные.ЭлементыСтиля.Найти(Сред(Строка(Цвет), 8));
Если ОбъектМетаданныхСтиля <> Неопределено Тогда
Цвет = ОбъектМетаданныхСтиля.Значение;
КонецЕсли;
КонецЕсли;
//Получаем RGB цвет из макета
Если Цвет.Вид = ВидЦвета.Абсолютный Тогда
Возврат Цвет;
ИначеЕсли Цвет.Вид = ВидЦвета.WebЦвет Тогда
ТаблицаСоответствияЦветов = итЗагрузитьТаблицуИзМакета("СоответствиеЦветовWebИRGB", "ДанныеСоответствияЦветов");
ЦветИмяПриведеное = Строка(Цвет);
ЦветИмяПриведеное = Сред(ЦветИмяПриведеное, Найти(ЦветИмяПриведеное, "(") + 1);
ЦветИмяПриведеное = Сред(ЦветИмяПриведеное, 1, Найти(ЦветИмяПриведеное, ")") - 1);
НайденнаяСтрока = ТаблицаСоответствияЦветов.Найти(ЦветИмяПриведеное, "ИмяЦвета");
Если НайденнаяСтрока <> Неопределено Тогда
Возврат Новый Цвет(Число(НайденнаяСтрока.R), Число(НайденнаяСтрока.G), Число(НайденнаяСтрока.B));
Иначе
Возврат Новый Цвет(0, 0, 0);
КонецЕсли;
ИначеЕсли Цвет.Вид = ВидЦвета.WindowsЦвет ИЛИ Цвет.Вид = ВидЦвета.ЭлементСтиля Тогда
// Невозможно определить цвет, но попытаемся через ФорматированныйДокумент
ТекстХТМЛДокумента = "";
Шаблон = "0123456789ABCDEF";
ФорматированныйДокумент = Новый ФорматированныйДокумент;
ФорматированныйДокумент.Добавить("ОпределениеЦвета", Тип("ТекстФорматированногоДокумента"));
ФорматированныйДокумент.Элементы[0].Элементы[0].ЦветФона = Цвет;
ФорматированныйДокумент.ПолучитьHTML(ТекстХТМЛДокумента, Новый Структура);
НомерСимволаЦвета = Найти(ТекстХТМЛДокумента, "background-color: #");
ЦветРезультатHex = Сред(ТекстХТМЛДокумента, НомерСимволаЦвета + 19, 6);
Возврат Новый Цвет(итКонвертироватьHexВDec(Сред(ЦветРезультатHex, 1, 2)), итКонвертироватьHexВDec(Сред(ЦветРезультатHex, 3, 2)), итКонвертироватьHexВDec(Сред(ЦветРезультатHex, 5, 2)));
ИначеЕсли Цвет.Вид = ВидЦвета.АвтоЦвет Тогда
// Пустой цвет (определяется элементом владельцем, не содержит сам цвет)
Возврат Новый Цвет(0, 0, 0);
КонецЕсли;
КонецФункции |