Попытка вывода картинок из библиотеки картинок в поле браузера Webkit 1С
Возникла задача вывода картинки из библиотеки картинок в поле HTML-документа.
Во встроенном редакторе HTML-макетов обнаружил, то можно вставлять картинки из библиотеки в макет:

HTML-код этого выглядит так, адрес картинок содержит mdpicture:
<div><img src="../../mdpicture/idf71c9565-2c09-40ce-9353-24cf13190fd0/00000000-0000-0000-0000-000000000000"> БС_expand_plus</div>
<div><br><img src="../../mdpicture/idb1988c19-64b2-45bc-b7c6-24c7e8a01525/00000000-0000-0000-0000-000000000000"> БС_expand_minus</div>
<div><br><img src="../../mdpicture/id47f01799-7968-4f44-9acc-fe1bdde8beb2/00000000-0000-0000-0000-000000000000"> Активные пользователи</div>
Но увы, это не работает в Web-kit. Там картинки не выводятся:

Я пробовал получить адрес картинки в виде навигационной ссылкичерез ее помещение во временное хранилище. Адрес e1cb получал, но картинка не отображалась:
Функция ПолучитьАдресДляВыводаВБраузерКартинкиИзБиблиотеки(ИмяКартинки) Экспорт Адрес = ПоместитьВоВременноеХранилище(БиблиотекаКартинок[ИмяКартинки], Новый УникальныйИдентификатор); Возврат Адрес; КонецФункции
Работает только через data:image:
Функция ПолучитьАдресДляВыводаВБраузерКартинкиИзБиблиотеки(ИмяКартинки) Экспорт Картинка = БиблиотекаКартинок[ИмяКартинки]; ДД = Картинка.ПолучитьДвоичныеДанные(); ДанныеСтрокой = Base64Строка(ДД); //Обязательно по отдельности убираем разделение переводами строки! ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(13), ""); ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(10), ""); Адрес = "data:image/jpg;base64," + ДанныеСтрокой; Возврат Адрес; КонецФункции
Выглядит так:


Способ вывода картинки с использованием хелпсервиса от 1С давно известен:
&НаСервереБезКонтекста
Функция ПолучитьПутьККартинкеДляHTML(Картинка) Экспорт
Если ТипЗнч(Картинка)Тип(«Картинка») тогда
Возврат «»;
КонецЕсли;
URL_Метаданных = «v8config://v8cfgHelp/»;
//получение идентификатора картинки
ИдентификаторКартинки = ЗначениеВСтрокуВнутр(Картинка);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Лев(ИдентификаторКартинки,НАйти(ИдентификаторКартинки, «}») — 1);
Если Лев(ИдентификаторКартинки,1) = «-» Тогда
ИдентификаторКартинки = «n» + ИдентификаторКартинки;
Иначе
ИдентификаторКартинки = Сред(ИдентификаторКартинки, 3);
КонецЕсли;
Возврат URL_Метаданных + «mdpicture/id» + ИдентификаторКартинки;
КонецФункции
не знаю, я пробовал, у меня не получилось. Вывожу универсально через base64
Не знаю, у меня уже много лет работает и никаких проблем нет (в Web и тонком клиенте).
Можно конечно заменить этот путь («v8config://v8cfgHelp/») на абсолютный:
&НаСервереБезКонтекста
Функция ЗаменитьОтносительныеСсылкиНаАбсолютныеДляИБ(URL)
СтандартныйПрефикс = ПолучитьНавигационнуюСсылкуИнформационнойБазы() + «/»;
ЭтоВебКлиент = ОбщегоНазначения.ЭтоВебКлиент();
Если ЭтоВебКлиент Тогда
КодЛокализации = ТекущийКодЛокализации();
СтандартныйПрефикс = СтандартныйПрефикс + КодЛокализации + «/»;
КонецЕсли;
НовыйURL = СтрЗаменить(URL, «v8config://», СтандартныйПрефикс + «e1cib/helpservice/topics/v8config/»);
Возврат НовыйURL;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьПутьККартинкеДляHTML(Картинка) Экспорт
Если ТипЗнч(Картинка)Тип(«Картинка») тогда
Возврат «»;
КонецЕсли;
URL_Метаданных = «v8config://v8cfgHelp/»;
//получение идентификатора картинки
ИдентификаторКартинки = ЗначениеВСтрокуВнутр(Картинка);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
ИдентификаторКартинки = Лев(ИдентификаторКартинки,НАйти(ИдентификаторКартинки, «}») — 1);
Если Лев(ИдентификаторКартинки,1) = «-» Тогда
ИдентификаторКартинки = «n» + ИдентификаторКартинки;
Иначе
ИдентификаторКартинки = Сред(ИдентификаторКартинки, 3);
КонецЕсли;
Возврат ЗаменитьОтносительныеСсылкиНаАбсолютныеДляИБ(URL_Метаданных) + «mdpicture/id» + ИдентификаторКартинки;
КонецФункции
Получим ссылку типа такой (для длительной операции):
https://hrm.demo.1c.ru/corp/ru_RU/e1cib/helpservice/topics/v8config/v8cfgHelp/mdpicture/idef4d648f-4cac-4df9-9880-2aa13c422d10
Если открыть эту ссылку в браузере — получим нашу картинку
тут такой момент — не помню, может типовые картинки из библиотеки и показываются, а вот картинки из расширений нет. Что-то с этим связанное.
Кстати, а вы знаете в чем различие функций ПолучитьBase64СтрокуИзДвоичныхДанных() и Base64Строка()?
ПолучитьBase64СтрокуИзДвоичныхДанных() получает строку без переводов строк.
Т.е. ваш код:
ДанныеСтрокой = Base64Строка(ДД);
//Обязательно по отдельности убираем разделение переводами строки!
ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(13), «»);
ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(10), «»);
Можно заменить на:
ДанныеСтрокой = ПолучитьBase64СтрокуИзДвоичныхДанных(ДД);
не знал. полезно. спасибо.