При формировании торговых каталогов или прайс-листов в системе 1С:Предприятие пользователи часто сталкиваются с неприятным эффектом: в самом табличном документе (MXL) изображения выглядят четкими и качественными, но после выполнения команды «Сохранить как» в формате Excel картинки становятся размытыми или «замыленными». Эта проблема особенно актуальна для старых конфигураций, таких как «Розница 1.0», работающих на обычных формах.
В данной статье мы подробно разберем технические причины этого явления, проанализируем механизмы работы платформы 1С с графикой и выясним, какие шаги необходимо предпринять для сохранения высокого качества изображений при экспорте.
Разберем по шагам, что происходит с графическим объектом в момент конвертации из внутреннего формата 1С в формат электронных таблиц XLS или XLSX. Основная сложность заключается в том, что платформа 1С выполняет ресемплинг (пересчет пикселей) изображения.
Excel через системное меню, платформа 1С зачастую принудительно устанавливает разрешение изображений в 96 DPI. Если ваша исходная картинка имела высокое разрешение (например, 300 DPI для печати), происходит жесткое сжатие, при котором мелкие детали и четкие контуры превращаются в размытые пятна..xls (Excel 97-2003), платформа преобразует все рисунки в формат JPEG с фиксированным коэффициентом качества (обычно около 70-80%). Это неизбежно вносит артефакты сжатия, особенно заметные на текстах и логотипах внутри картинок.Автомасштаб или Пропорционально), то при сохранении в Excel происходит двойное масштабирование: сначала платформой 1С под размер ячейки, а затем самим Excel при отрисовке на экране.Проанализируем ситуацию с точки зрения исходных данных. Чтобы минимизировать потери, рекомендуется использовать формат PNG вместо JPEG для хранения картинок товаров в базе данных. Рассмотрим преимущества этого подхода:
Excel через современные версии платформы 8.3, формат PNG реже подвергается агрессивному пересжатию цветов.Важный совет: Подготавливайте изображения заранее. Если вы планируете, что картинка в прайс-листе будет иметь размер 150x150 пикселей, загружайте в 1С изображение именно такого размера. Это исключит необходимость масштабирования платформой при экспорте.
Если ваша конфигурация работает на платформе 8.3.6 и выше, мы можем уйти от старого формата .xls в пользу современного .xlsx (Office Open XML). В этом формате изображения упаковываются во внутренний архив документа практически в исходном виде.
Рассмотрим пример кода, который позволяет сохранить табличный документ программно, обеспечивая лучшее качество, чем стандартная кнопка «Сохранить как»:
// Пример сохранения прайс-листа с высоким качеством графики
ПутьКФайлу = "C:\Prices\PriceList.xlsx";
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; // Для обычных форм
// Или ПолучитьМакет("ПрайсЛист") и заполнить его
// Используем метод Записать с явным указанием формата XLSX
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
При использовании ТипФайлаТабличногоДокумента.XLSX платформа применяет более современные алгоритмы упаковки ресурсов, что позволяет избежать сильного размытия.
В особо критичных случаях, когда стандартные средства 1С не справляются, мы можем прибегнуть к прямому управлению приложением Excel через COM-объект. Это позволяет нам вставлять картинки напрямую из файлов, минуя буфер и внутренние механизмы конвертации 1С.
Разберем логику этого процесса:
Excel.Application.Pictures.Insert().Посмотрим на пример упрощенного кода:
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Вставка изображения напрямую из файла
ПутьККартинке = "C:\Temp\ProductImg.png";
КартинкаЭксель = Лист.Pictures.Insert(ПутьККартинке);
// Настройка позиции
КартинкаЭксель.Top = Лист.Cells(2, 2).Top;
КартинкаЭксель.Left = Лист.Cells(2, 2).Left;
Эксель.Visible = Истина;
Исключение
Сообщить("Ошибка работы с Excel: " + ОписаниеОшибки());
КонецПопытки;
Этот метод гарантирует, что Excel получит картинку в ее первозданном виде. Однако помните, что такой способ работает медленнее, чем стандартный экспорт, и требует установленного Microsoft Office на сервере или клиенте.
Иногда проблема бывает обратной: качество хорошее, но файл получается огромным (например, 800 МБ для большого прайса). В этом случае, как было отмечено в обсуждении на форуме, можно использовать стандартные средства Excel 2016 и выше для сжатия рисунков после сохранения из 1С.
Рассмотрим, как это сделать вручную:
Excel.Этот метод позволяет радикально уменьшить объем файла (в десятки раз), сохранив при этом приемлемый уровень качества для просмотра на мониторе.
Для достижения наилучшего результата в 1С:Розница 1.0 при работе через RDP или локально, мы рекомендуем комбинированный подход:
XLSX вместо ручного «Сохранить как».COM-объект.Применяя эти методы, вы сможете формировать профессиональные прайс-листы, которые будут радовать ваших клиентов четкими изображениями товаров.