Попытка вывода картинок из библиотеки картинок в поле браузера Webkit 1С

Возникла задача вывода картинки из библиотеки картинок в поле HTML-документа.

Во встроенном редакторе HTML-макетов обнаружил, то можно вставлять картинки из библиотеки в макет:

HTML-код этого выглядит так, адрес картинок содержит mdpicture:

<div><img src="../../mdpicture/idf71c9565-2c09-40ce-9353-24cf13190fd0/00000000-0000-0000-0000-000000000000">&nbsp;БС_expand_plus</div>
<div><br><img src="../../mdpicture/idb1988c19-64b2-45bc-b7c6-24c7e8a01525/00000000-0000-0000-0000-000000000000">&nbsp;БС_expand_minus</div>
<div><br><img src="../../mdpicture/id47f01799-7968-4f44-9acc-fe1bdde8beb2/00000000-0000-0000-0000-000000000000">&nbsp;Активные пользователи</div>

Но увы, это не работает в Web-kit. Там картинки не выводятся:

Я пробовал получить адрес картинки в виде навигационной ссылкичерез ее помещение во временное хранилище. Адрес e1cb получал, но картинка не отображалась:

Функция ПолучитьАдресДляВыводаВБраузерКартинкиИзБиблиотеки(ИмяКартинки) Экспорт
	Адрес = ПоместитьВоВременноеХранилище(БиблиотекаКартинок[ИмяКартинки], Новый УникальныйИдентификатор);	
	Возврат Адрес;
КонецФункции

Работает только через data:image:

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

Выглядит так:

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 6

  1. DiMel:

    Способ вывода картинки с использованием хелпсервиса от 1С давно известен:

    &НаСервереБезКонтекста
    Функция ПолучитьПутьККартинкеДляHTML(Картинка) Экспорт

    Если ТипЗнч(Картинка)Тип(«Картинка») тогда
    Возврат «»;
    КонецЕсли;

    URL_Метаданных = «v8config://v8cfgHelp/»;

    //получение идентификатора картинки
    ИдентификаторКартинки = ЗначениеВСтрокуВнутр(Картинка);
    ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
    ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
    ИдентификаторКартинки = Сред(ИдентификаторКартинки,Найти(ИдентификаторКартинки, «{«) + 1);
    ИдентификаторКартинки = Лев(ИдентификаторКартинки,НАйти(ИдентификаторКартинки, «}») — 1);

    Если Лев(ИдентификаторКартинки,1) = «-» Тогда
    ИдентификаторКартинки = «n» + ИдентификаторКартинки;
    Иначе
    ИдентификаторКартинки = Сред(ИдентификаторКартинки, 3);
    КонецЕсли;

    Возврат URL_Метаданных + «mdpicture/id» + ИдентификаторКартинки;

    КонецФункции

    • не знаю, я пробовал, у меня не получилось. Вывожу универсально через base64

      • DiMel:

        Не знаю, у меня уже много лет работает и никаких проблем нет (в 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

        Если открыть эту ссылку в браузере — получим нашу картинку

        • тут такой момент — не помню, может типовые картинки из библиотеки и показываются, а вот картинки из расширений нет. Что-то с этим связанное.

          • DiMel:

            Кстати, а вы знаете в чем различие функций ПолучитьBase64СтрокуИзДвоичныхДанных() и Base64Строка()?
            ПолучитьBase64СтрокуИзДвоичныхДанных() получает строку без переводов строк.

            Т.е. ваш код:
            ДанныеСтрокой = Base64Строка(ДД);
            //Обязательно по отдельности убираем разделение переводами строки!
            ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(13), «»);
            ДанныеСтрокой = СтрЗаменить(ДанныеСтрокой, Символ(10), «»);

            Можно заменить на:

            ДанныеСтрокой = ПолучитьBase64СтрокуИзДвоичныхДанных(ДД);

          • не знал. полезно. спасибо.

Добавить комментарий

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