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

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

При работе с крупными каталогами товаров в 1С:Управление торговлей 10.3 часто возникает ситуация, когда объем базы данных начинает стремительно расти из-за загруженных менеджерами фотографий. Если изображения имеют размер от 1 до 2 Мб, это создает критические проблемы при выгрузке данных в мобильные системы, такие как Агент+, а также замедляет выполнение резервного копирования. Рассмотрим детально способы решения этой задачи, методы пакетного сжатия и стратегию правильного хранения файлов.

Проблема выбора формата: почему PNG может увеличить размер файла

Проанализируем техническую сторону вопроса. Часто пользователи совершают ошибку, пытаясь конвертировать все фотографии в формат PNG. Важно понимать, что PNG — это формат сжатия без потерь. Он идеально подходит для скриншотов программ, чертежей или иконок с прозрачностью, где много однотонных заливок. Однако для реальных фотографий товаров (розетки, инструменты, одежда) этот формат неэффективен.

При конвертации фотографии из JPEG в PNG размер файла может вырасти в несколько раз (например, с 90 Кб до 500 Кб), так как алгоритм пытается сохранить каждую деталь без потерь. Для целей складского учета и отображения на планшетах торговых представителей оптимальным выбором будет JPEG с уровнем качества 70–80%.

Способ 1. Пакетная обработка внешними утилитами

Самый быстрый и надежный метод для обработки десятков тысяч позиций — использование специализированного ПО. Разберем шаги выполнения этой операции:

  1. Выгружаем все картинки из 1С в локальную папку на сервере или компьютере.
  2. Используем бесплатную утилиту FastStone Image Viewer или IrfanView.
  3. В программе выбираем "Пакетное преобразование".
  4. Устанавливаем параметры изменения размера (ресайз). Оптимально для мобильных устройств — 800x600 пикселей.
  5. В настройках JPEG устанавливаем качество на уровне 75%.
  6. Обязательно ставим галочку "Не изменять размер, если исходный меньше нового", чтобы не растягивать маленькие иконки.
  7. Запускаем процесс. Обработка 10-20 тысяч картинок обычно занимает не более 15-20 минут.

После этого сжатые файлы можно загрузить обратно в 1С с помощью несложной обработки, которая сопоставляет имя файла с артикулом или кодом номенклатуры.

Способ 2. Автоматизация сжатия средствами 1С (WIA)

Если мы хотим, чтобы 1С сама умела сжимать картинки внутри базы без использования внешнего софта, можно воспользоваться библиотекой WIA (Windows Image Acquisition). Это стандартный компонент Windows, доступный через COMОбъект.

Рассмотрим пример логики кода, который можно встроить в обработку:


// Создаем объекты для работы с изображением
Изображение = Новый COMОбъект("WIA.ImageFile");
Процессор = Новый COMОбъект("WIA.ImageProcess");

// Загружаем файл во временную папку
Изображение.LoadFile(ПутьКФайлу);

// Настраиваем фильтр изменения размера
Процессор.Filters.Add(Процессор.FilterInfos("Scale").FilterID);
Процессор.Filters(1).Properties("MaximumWidth").Value = 800;
Процессор.Filters(1).Properties("MaximumHeight").Value = 600;

// Настраиваем конвертацию в JPEG
Процессор.Filters.Add(Процессор.FilterInfos("Convert").FilterID);
Процессор.Filters(2).Properties("FormatID").Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; // GUID для JPEG

// Применяем изменения и сохраняем
Изображение = Процессор.Apply(Изображение);
Изображение.SaveFile(ПутьКНовомуФайлу);

Такой подход позволяет автоматизировать процесс прямо в справочнике Номенклатура.

Способ 3. Использование ImageMagick через командную строку

Для продвинутых системных администраторов идеальным инструментом станет ImageMagick. Это мощная консольная утилита, которую 1С может вызывать через команду ЗапуститьПриложение. Выясним, в чем преимущество: вы можете одной командой обработать всю папку с экстремальной скоростью.

Пример команды для командной строки, которую можно вызвать из 1С:

mogrify -path C:\ReadyImages\ -resize 800x600 -quality 75 *.jpg

Эта команда возьмет все файлы .jpg, изменит их размер до 800x600 (сохраняя пропорции), установит качество 75% и положит результат в указанную папку.

Архитектурный вопрос: SQL или хранение в томах?

Проанализируем ситуацию с хранением данных. В УТ 10.3 по умолчанию картинки часто хранятся в самой базе данных (в таблице ХранилищеДополнительнойИнформации). Если база работает на MS SQL Server, это приводит к следующим проблемам:

При планируемом переходе на УТ 11.4 крайне рекомендуем использовать режим "Хранение в томах на диске". В этом случае в SQL-базе хранятся только ссылки, а сами файлы лежат в сетевой папке. Это позволяет бэкапить картинки отдельно и значительно ускоряет работу всей системы.

Как ограничить загрузку тяжелых фото на будущее

Чтобы проблема не повторилась, необходимо внедрить контроль "на входе". Рассмотрим, какие меры можно предпринять:

  1. Проверка размера файла: в модуле объекта при загрузке картинки добавьте условие. Если размер файла более 200 Кб — блокируйте запись с выводом сообщения менеджеру.
  2. Принудительный ресайз: внедрите код из примера с WIA непосредственно в процедуру загрузки файла. Независимо от того, какое фото выбрал менеджер (хоть 10 Мб), 1С сама сожмет его до целевых параметров перед сохранением в базу.
  3. Валидация формата: разрешите загрузку только файлов .jpg, запретив тяжелые форматы вроде .bmp или .tiff.

Разбор ошибки выгрузки: ограничение в 496 объектов

Выясним причину странного поведения системы, когда выгружается ровно 496 картинок из 2000. В 1С и модулях расширения (как Агент+) часто встречаются лимиты, связанные с:

Решением будет уменьшение веса каждой картинки (что мы разобрали выше) и разбиение выгрузки на более мелкие пакеты в настройках модуля обмена.

Итоги и рекомендации

Для эффективного решения задачи уменьшения картинок мы рекомендуем совмещенный подход: сначала выполнить разовую пакетную очистку текущей базы с помощью FastStone или ImageMagick, а затем внедрить в 1С программный фильтр на базе WIA, который будет автоматически оптимизировать все новые изображения. При переходе на новые версии платформы (8.3) и конфигурации (УТ 11) обязательно уходите от хранения картинок внутри SQL в пользу файловых томов — это обеспечит стабильную работу системы на долгие годы.

← На главную