Как отобразить картинку JPG с сайта в 1С 7.7 без сохранения на диск

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Работа с графическим контентом в среде 1С:Предприятие 7.7 всегда накладывала на разработчика определенные ограничения. Одной из часто возникающих задач является необходимость отобразить изображение (например, фото товара), которое хранится на веб-сервере, непосредственно на форме программного модуля. Основная сложность заключается в том, что штатный объект Картинка в версии 7.7 спроектирован для работы с локальной файловой системой и не умеет напрямую «подхватывать» данные по протоколу HTTP.

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

Метод 1. Использование объекта Shell.Application

Самый быстрый и наименее трудозатратный способ — это передать управление операционной системе. Если нам не критично отображение картинки именно внутри нашей формы, мы можем использовать объект Shell.Application. Рассмотрим пример кода:


имя = "http://сайт.ru/images/product123.jpg";
Шелл = СоздатьОбъект("Shell.Application");
Шелл.Open(имя);
Шелл = "";

Разберем, что происходит в данном фрагменте. Мы создаем COM-объект, который обращается к системной оболочке Windows. Метод Open() анализирует переданную строку и, обнаружив протокол http, открывает изображение в приложении, которое назначено в системе по умолчанию для просмотра веб-страниц или графики. Важный нюанс: файл не сохраняется программно силами 1С, однако он все равно попадает во временный кэш браузера.

Метод 2. Использование объекта InternetExplorer.Application

Если нам требуется программно управлять процессом отображения или получить параметры картинки (например, ее высоту или ширину), мы можем задействовать объект InternetExplorer.Application. Проанализируем ситуацию, когда нам нужно загрузить изображение в «невидимый» браузер для анализа:


ИЕ = СоздатьОбъект("InternetExplorer.Application");
ИЕ.Navigate("about:blank"); 
Док = ИЕ.document;
Док.write("<img id=img src='" + ИмяКартинки + "'>");
// Ожидаем загрузки, если это необходимо
РезультатВысота = Док.getElementById("img").height;

В данном случае мы создаем экземпляр браузера, инициализируем пустую страницу и динамически записываем в нее HTML-тег img с прямой ссылкой на сайт. Этот метод позволяет работать с объектом в памяти. Однако стоит помнить, что штатная Картинка в 1С 7.7 все равно не сможет отобразить результат этого метода через функцию УстановитьКартинку(), так как она ожидает либо объект типа «Картинка», либо путь к файлу.

Метод 3. Использование Поля HTML-документа (ActiveX)

Для того чтобы картинка красовалась непосредственно на форме 1С, наиболее эффективным решением будет использование элемента Microsoft Web Browser. Рассмотрим, как это реализовать:

  1. На форму обработки или документа добавьте элемент "Активный элемент" (ActiveX).
  2. В списке доступных объектов выберите Microsoft Web Browser.
  3. В коде модуля используйте метод Navigate для загрузки URL.

Посмотрим на пример реализации:


// Предположим, ActiveX элемент на форме назван "Браузер"
Процедура ПриОткрытии()
    Браузер.Navigate("about:blank");
КонецПроцедуры

Процедура ПоказатьФото(УРЛКартинки)
    Док = Браузер.Document;
    Док.Body.innerHTML = "<img src='" + УРЛКартинки + "' style='width:100%'>";
КонецПроцедуры

Этот способ позволяет отобразить изображение без создания временных файлов на жестком диске вручную. Преимущество этого метода в том, что браузерный движок сам берет на себя всю работу по сетевому обмену, кэшированию и рендерингу формата JPG или даже современного WebP/PNG.

Почему штатный объект "Картинка" не подходит для загрузки из памяти?

Выясним причину, по которой стандартные средства 1С 7.7 пасуют перед этой задачей. Объект Картинка в 7.7 — это надстройка над старыми интерфейсами Windows GDI. Функция Загрузить() этого объекта жестко требует путь к физическому файлу. Даже если мы скачаем двоичные данные (Binary Data) через WinHttp.WinHttpRequest.5.1 или Microsoft.XMLHTTP, у нас не будет штатного метода «затолкнуть» этот массив байтов в объект Картинка без записи на диск.

Проанализируем возможный обходной путь для тех, кто принципиально хочет использовать стандартный объект Картинка, но боится износа диска или мусора в системе:

  1. Использование RAM-диска. Вы можете создать виртуальный логический диск в оперативной памяти. Программа будет «думать», что пишет на диск, но фактически запись будет происходить в ОЗУ.
  2. Автоматическая очистка Temp. Сохраняйте файл во временную директорию через КаталогВременныхФайлов(), загружайте его в 1С и сразу удаляйте командой ФС.УдалитьФайл().

Метод 4. Отображение через Base64 (для продвинутых задач)

Если вы используете Поле HTML-документа, вы можете отобразить картинку, даже если она передается как поток данных. Это полезно, если сайт требует сложной авторизации и простая ссылка не работает. Мы получаем данные через WinHTTP, конвертируем их в строку Base64 и подставляем в HTML:


// Пример схематичного формирования HTML
СтрBase64 = "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."; // Здесь полученные данные
Док.write("<img src='" + СтрBase64 + "'>");

Подведем итог. Нативно отобразить картинку с URL в объекте Картинка без сохранения файла в 1С 7.7 невозможно. Однако, используя ActiveX Microsoft Web Browser, вы получаете мощный инструмент для визуализации любого веб-контента прямо на форме, что полностью решает задачу автора темы без лишних манипуляций с файловой системой.

← На главную