При работе в тонком клиенте 1С отображение изображений обычно проходит без сбоев. Однако при переходе в веб-клиент разработчики часто сталкиваются с двумя проблемами: изображение визуально искажается (сжимается или растягивается с нарушением пропорций), а переключение между картинками по кнопкам навигации начинает существенно задерживаться. Проанализируем причины такого поведения и разберем практические способы оптимизации работы с графикой в веб-клиенте.
Выясним, почему стандартное поведение формы 1С в веб-клиенте отличается от тонкого клиента:
ВременноеХранилище вынуждает веб-клиент при каждой смене картинки выполнять дополнительный HTTP-запрос к веб-серверу 1С. При быстром переключении эти запросы встают в очередь.image/jpeg для JPG-файлов и image/png для PNG-файлов).Рассмотрим альтернативный способ вывода — использование реквизита формы с типом Строка и видом Поле HTML документа. Это дает полный контроль над стилями CSS и масштабированием с помощью свойства object-fit.
Посмотрим на пример формирования HTML-кода с использованием кодирования в Base64 через функцию Base64Строка. Важно корректно указывать MIME-тип изображения в зависимости от его реального формата:
&НаСервере
Функция СформироватьHTMLКартинки(ДвоичныеДанныеФайла, РасширениеФайла)
СтрокаBase64 = Base64Строка(ДвоичныеДанныеФайла);
// Определяем верный MIME-тип для Chromium и других браузеров
MIMEТип = "image/jpeg";
Если НРегистр(РасширениеФайла) = "png" Тогда
MIMEТип = "image/png";
КонецЕсли;
ТекстHTML = "<html>
|<head>
|<style>
| body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #ffffff; }
| img { max-width: 100%; max-height: 100%; object-fit: contain; }
|</style>
|</head>
|<body>
| <img src=""data:" + MIMEТип + ";base64," + СтрокаBase64 + """ alt=""Картинка""/>
|</body>
|</html>";
Возврат ТекстHTML;
КонецФункции
Использование CSS-стиля object-fit: contain; гарантирует, что картинка аккуратно впишется в отведённую область без искажения исходных пропорций.
Разберем по шагам, почему оригинальные файлы высокого разрешения нельзя передавать на веб-клиент без предварительной обработки. Передача каждого файла размером в несколько мегабайт расходует сетевой трафик и ресурс процессора на клиенте.
Картинка.Если картинки хранятся во внешнем каталоге, наиболее эффективным решением будет публикация папки на веб-сервере (Apache / IIS) или создание собственного HTTP-сервиса внутри конфигурации 1С.
Проанализируем преимущества этого подхода:
src="http://server/images/photo123.jpg".Таким образом, сочетание предварительного уменьшения разрешения на сервере, использования поля HTML с точными CSS-стилями и браузерного кэширования позволяет полностью избавиться от визуальных искажений и обеспечить мгновенную работу веб-клиента 1С.