При разработке интеграций с внешними API часто возникает задача получения и отображения изображений, например, QR-кодов для оплаты. В этой статье мы разберем, как правильно работать с такими ссылками, чтобы изображение корректно отображалось на форме с нужными размерами.
Если вам не требуется сохранять файл на диск, а нужно лишь корректно вывести его на экран, самым быстрым способом будет настройка ПолеHTMLДокумента. Вместо того чтобы просто переходить по ссылке, мы можем сформировать HTML-код, который принудительно задаст размеры изображения.
Разберем по шагам, как это реализовать:
ПолеHTMLДокумента на форме.URL в тег img.CSS для управления размером.
// Пример формирования HTML-кода для корректного отображения
Размер = "300px";
HTMLКод = "<html><body><img src='" + qrUrl + "' width='" + Размер + "' height='" + Размер + "'></body></html>";
ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(HTMLКод);
Этот метод позволяет вам не беспокоиться о загрузке файлов, а просто передать браузерному движку 1С параметры отображения картинки.
В случае, если картинку необходимо сохранить в базу или использовать в печатной форме, мы будем работать с HTTPСоединение. Важно помнить, что если ссылка содержит HTTPS, необходимо использовать защищенное соединение.
Рассмотрим подробно процесс получения данных:
HTTPЗапрос для получения двоичных данных.Картинка.
// Настройка безопасного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение("test.ecom.raiffeisen.ru", 443, , , , , ЗащищенноеСоединение, Ложь);
// Выполнение запроса
HTTPЗапрос = Новый HTTPЗапрос("/api/sbp/v1/qr/ADCBAF0740A44D3DBB09CD409177EFA2/image");
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
// Получение данных и создание объекта Картинка
Если HTTPОтвет.КодСостояния = 200 Тогда
ДвоичныеДанныеКартинки = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
КартинкаНаФорме = Новый Картинка(ДвоичныеДанныеКартинки);
ЭлементыФормы.ПолеКартинкиНаФорме.Картинка = КартинкаНаФорме;
КонецЕсли;
Важно обратить внимание на то, что объект HTTPСоединение требует указания порта (для HTTPS это 443) и объекта ЗащищенноеСоединениеOpenSSL. Без этих параметров платформа 1С может блокировать соединение из соображений безопасности.
Чтобы ваша программа работала стабильно, проанализируем несколько моментов:
HTTPСоединение всегда полезно задавать таймаут (в секундах), чтобы интерфейс программы не «зависал», если сервер банка долго отвечает.HTTPОтвет.КодСостояния и при необходимости реализуйте логику перехода по новому адресу, который содержится в заголовках ответа.ХранилищеЗначения в регистре сведений, чтобы не выполнять лишние запросы к API при каждом открытии формы.Используя объект Картинка, созданный из ДвоичныеДанные, вы получаете полноценный объект 1С, который можно выводить на обычные формы, использовать в табличных документах или сохранять в файлы стандартным методом Записать().