В каком формате и как правильно хранить фотографии номенклатуры в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Торговля и дистрибуция
← На главную

При разработке функционала для работы с изображениями в справочнике Номенклатура, особенно для последующей печати в «Коммерческих предложениях», разработчик сталкивается с рядом архитектурных вызовов. Необходимо сбалансировать качество картинки, скорость работы интерфейса и объем дискового пространства, занимаемого информационной базой. Проанализируем основные аспекты реализации этой задачи.

Выбор оптимального формата файла

Рассмотрим наиболее популярные форматы и определим их применимость в среде 1С:

  1. JPG (JPEG): Это «золотой стандарт». Большинство фотографий товаров, скачанных из интернета или сделанных на смартфон, имеют это расширение. Он обеспечивает отличное сжатие при сохранении приемлемого качества. Рекомендуем использовать его как основной формат для хранения фото.
  2. PNG: Этот формат незаменим, если предполагается использование изображений с прозрачным фоном. В коммерческих предложениях это позволяет накладывать фото товара на сложные фоновые макеты без белых прямоугольников вокруг объекта. Однако стоит учитывать, что файлы PNG обычно тяжелее JPG.
  3. WebP: Современный формат, который поддерживается в последних версиях платформы 1С. Он обеспечивает на 30–50% лучшее сжатие, чем JPG, при аналогичном качестве. Если база используется на современных версиях платформы 8.3, стоит рассмотреть конвертацию входящих изображений именно в WebP.
  4. BMP и TIFF: Категорически не рекомендуем использовать эти форматы для хранения в базе. Они не имеют эффективного сжатия, и несколько таких фотографий в разрешении 4К могут мгновенно «раздуть» размер таблицы до критических значений.

Место хранения: База данных против Томов на диске

Выясним причину, по которой прямое хранение бинарных данных в информационной базе (ИБ) может стать проблемой. При хранении картинок непосредственно в базе (тип ХранилищеЗначения), размер файла 1CD или объем SQL-таблицы растет экспоненциально. Это приводит к замедлению создания резервных копий и выполнения регламентных операций (ТИИ).

Разберем по шагам правильный подход с использованием Библиотеки стандартных подсистем (БСП):

В типовых конфигурациях, таких как «Бухгалтерия предприятия 3.0» (БП 3.0), уже встроена подсистема «Присоединенные файлы». Проанализируем её преимущества:

  1. Хранение в томах: В настройках программы можно указать путь к папке на сервере (том), где физически будут лежать файлы. В базе 1С останется только ссылка и метаданные.
  2. Автоматизация: БСП сама берет на себя логику записи, чтения и проверки прав доступа к этим файлам.
  3. Масштабируемость: Когда на одном диске закончится место, можно просто добавить новый «Том» в настройках 1С.

Программная обработка и изменение размера (Ресайз)

Посмотрим на ситуацию глазами пользователя: он может попытаться загрузить снимок с профессиональной камеры весом 20 Мб. Для печатной формы КП нам достаточно изображения размером 800х600 пикселей. Проанализируем способы программного сжатия.

Раньше для этих целей часто использовали COM-объекты (например, ImageMagick или стандартные средства Windows). Однако современная платформа 1С предоставляет нативный объект Картинка, который работает быстрее и стабильнее, в том числе на Linux-серверах.

Разберем пример кода, который преобразует тяжелое изображение в оптимизированный JPG перед сохранением:


// Предположим, ДанныеФайла - это ДвоичныеДанные полученные от пользователя
КартинкаОригинал = Новый Картинка(ДанныеФайла);

// Проверяем, нужно ли сжимать (например, если ширина больше 1000 пикселей)
Если КартинкаОригинал.Ширина() > 1000 Тогда
    // Используем метод Преобразовать для изменения формата и сжатия
    // Параметры: ФорматКартинки.JPEG, Качество (от 1 до 100)
    НоваяКартинка = КартинкаОригинал.Преобразовать(ФорматКартинки.JPEG);
    
    // Если нужно программно изменить именно разрешение (размер в пикселях), 
    // в платформе 8.3.10+ есть возможность обработки через метод Преобразовать
    // с указанием параметров трансформации.
КонецЕсли;

Важно помнить: при формировании коммерческого предложения в формате PDF, если в него вставлено 20 фотографий по 5 Мб каждая, итоговый файл будет весить более 100 Мб. Такой документ клиент не сможет получить по электронной почте. Поэтому принудительный ресайз при загрузке — это не просто рекомендация, а необходимость.

Оптимизация интерфейса: Миниатюры (Превью)

Проанализируем ситуацию, когда бухгалтер открывает список номенклатуры, где в каждой строке должна отображаться картинка. Если система будет каждый раз подгружать полноразмерный файл (даже оптимизированный до 200-300 Кб), прокрутка списка будет «тормозить».

Рекомендуем использовать стратегию двух копий:

  1. Основное изображение: Хранится в томе, используется для вывода в печатные формы.
  2. Миниатюра (Эскиз): Маленькая копия (например, 100х100 пикселей), которая хранится в виде ХранилищеЗначения прямо в базе для быстрого отображения в списках и формах подбора.

Ограничение прав и валидация

Как отмечалось в обсуждении, пользователь — существо непредсказуемое. Рассмотрим шаги по ограничению их «творчества»:

Итоги

Подводя итог, прикручивая фото к номенклатуре в БП 3.0, придерживайтесь следующего алгоритма: используйте подсистему «Присоединенные файлы» из БСП для хранения файлов вне базы, принудительно конвертируйте изображения в JPG с умеренным качеством и ограничивайте максимальное разрешение. Это обеспечит высокую скорость формирования коммерческих предложений и стабильную работу системы в долгосрочной перспективе.

← На главную