Программная конвертация отчетов 1С в графический формат без установки дополнительных компонентов

24.11.25

Разработка - Работа с интерфейсом

Реализация механизма преобразования табличных документов и PDF-файлов 1С в формат PNG. Решение использует внешние утилиты, выгружаемые из макетов конфигурации, что исключает необходимость установки дополнительных программ на рабочих местах пользователей или на сервере.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Программная конвертация отчетов 1С в графический формат без установки дополнительных компонентов
.epf 33,29Mb ver:1.0
4 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Актуальность и проблема конвертации в среде 1С:Предприятие

В платформе 1С:Предприятие сформированные табличные документы (отчеты) могут быть сохранены в различные стандартные форматы: XLS, HTML, MXL, PDF и другие. Эти форматы неудобны для использования в качестве иллюстраций в автоматизированных процессах, таких как:

  • Вставка изображений отчетов в генерируемые программно документы (Word, HTML);
  • Отправка скриншотов отчетов через HTTP-сервисы;
  • Автоматическая публикация отчетов на внешних ресурсах (сайтах, порталах).

Традиционный подход к получению графического представления отчета (например, PNG) включает следующие шаги: формирование отчета в режиме "Предприятие", выполнение скриншота экрана или его части, вставка изображения в документ.

Проблема при реализации программной конвертации графики в 1С — это необходимость установки внешних компонентов на клиентские или серверные машины, что часто недопустимо или трудоемко в корпоративной среде.

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

 

Описание реализации

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

Программно формируем отчет. Табличный документ сохраняем в PDF-формат.

Конвертируем из PDF в PNG, используя утилиту ImageMagick, все необходимые исполняемые файлы загружены в макеты обработки как двоичные данные.

Макеты выгружаются во временный каталог, выполняем командой ЗапуститьПриложение(), полученный PNG-файл возвращаем как двоичные данные. 


Для реализации механизма были использованы портативные дистрибутивы:

ImageMagick (v7.1.2-8 portable): Основной инструмент для обработки изображений. Ссылка на дистрибутив: https://imagemagick.org/archive/binaries/ImageMagick-7.1.2-8-portable-Q16-x64.7z

Ghostscript (например, v10.0.6.0): Необходимая зависимость для ImageMagick при работе с PDF-файлами. Дистрибутив: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10060/gs10060w32.exe

 

Процедуры и функции

Модуль формы обработки

Для демонстрации исполняемых отчетов используем схемы компоновки, которые также прикреплены как макеты в обработку. Доступны два отчета. Формируем список выбора для поля на форме:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // формирование списка отчетов конфигурации
    Элементы.Отчет.СписокВыбора.Очистить();
    НовоеЗначение = Элементы.Отчет.СписокВыбора.Добавить();
    НовоеЗначение.Значение = "ОтчетВыручкаТаблица";
    НовоеЗначение = Элементы.Отчет.СписокВыбора.Добавить();
    НовоеЗначение.Значение = "ОтчетВыручкаДиаграмма";
    
КонецПроцедуры

 

Тело процедуры на клиенте, вызывается по кнопке "Сформировать" 

&НаКлиенте
Процедура Сформировать(Команда)
    
    Если Не ПроверитьЗаполнение() Тогда
	    Возврат;
    КонецЕсли;
	
    // получаем имя каталога временных файлов, продолжаем выполнение
    ОбратныйВызов = Новый ОписаниеОповещения("ПолучитьКаталогВременныхФайловЗавершение", ЭтотОбъект, , "ВыполнитьПриОшибке", ЭтотОбъект);
    НачатьПолучениеКаталогаВременныхФайлов(ОбратныйВызов);
    
КонецПроцедуры 

 

Продолжаем выполнение:

&НаКлиенте
Процедура ПолучитьКаталогВременныхФайловЗавершение(ИмяКаталогаВременныхФайлов, ДополнительныеПараметры) Экспорт
	КаталогВременныхФайлов = ИмяКаталогаВременныхФайлов;

	// получаемем изображение, pdf
	Результат = СформироватьНаСервере();
	
	// записываем файлы во временную папку
	ИмяФайлаPNG = КаталогВременныхФайлов + Отчет + ".png";
	Результат.ДвоичныеДанныеИзображение.Записать(ИмяФайлаPNG);
	
	ИмяФайлаPDF = КаталогВременныхФайлов + Отчет + ".pdf";
	Результат.ДвоичныеДанныеPDF.Записать(ИмяФайлаPDF);

	// информирование о результатах
	Сообщить("Выполнена конвертация. Источник/Приемник:");
	Сообщить(ИмяФайлаPDF);
	Сообщить(ИмяФайлаPNG);
	
КонецПроцедуры 

&НаКлиенте
Процедура ВыполнитьПриОшибке(ИнформациОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
КонецПроцедуры

 

Формируем отчет на сервере, получаем изображение, выводим имена полученных файлов:


&НаСервере
Функция СформироватьНаСервере()
    
    // программное формирование отчета
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    СхемаСКД = ОбработкаОбъект.ПолучитьМакет(Отчет);
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаСКД, СхемаСКД.НастройкиПоУмолчанию);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    // сохранение табличного документа в pdf
    ИмяФайлаPDF = КаталогВременныхФайлов()+ Отчет + ".pdf";
    ТабличныйДокумент.Записать(ИмяФайлаPDF, ТипФайлаТабличногоДокумента.PDF);
    
    // конвертация pdf в png
    ДвоичныеДанные = ОбработкаОбъект.КонвертироватьВДвоичныеДанные(ИмяФайлаPDF);
    ИмяФайлаPNG = КаталогВременныхФайлов()+ Отчет + ".png";
    ДвоичныеДанные.Записать(ИмяФайлаPNG);

    // информирование о результатах
    Сообщить("Выполнена конвертация. Источник/Приемник:");
    Сообщить(ИмяФайлаPDF);
    Сообщить(ИмяФайлаPNG);
    
КонецФункции

 

Модуль объекта 

// Конвертация pdf файла в формат png.
//
// Параметры:
//   ИмяФайла - Строка - Полное имя файла источника
//
// Возвращаемое значение: 
//   Двоичные данные конвертированного pdf файал в формат png.
//
Функция КонвертироватьВДвоичныеДанные(ИмяФайла) Экспорт
    
    // --- 1. Определение и подготовка путей ---
    КорневойКаталог = КаталогВременныхФайлов();
    ПутьВременнойПапки = КорневойКаталог + "IM_Temp_" + Новый УникальныйИдентификатор() + "\";
    СоздатьКаталог(ПутьВременнойПапки);
    ПутьВременныхФайлов = ПутьВременнойПапки;
    ИмяФайлаИсточника = ИмяФайла;
    ИмяФайлаПриемника = ПутьВременныхФайлов + "output_" + Новый УникальныйИдентификатор() + ".png";
    ИсполняемыеФайлы = Новый Массив();
    ИсполняемыеФайлы.Добавить("delegates_xml");
    ИсполняемыеФайлы.Добавить("gsdll64_dll");
    ИсполняемыеФайлы.Добавить("gswin64c_exe");
    ИсполняемыеФайлы.Добавить("magick_exe");
    
    // --- 2. Выгрузка исполняемых файлов из макетов ---
    Для Каждого ИмяМакета Из ИсполняемыеФайлы Цикл
        ИмяФайлаУтилиты = СтрЗаменить(ИмяМакета, "_", ".");
        ПолныйПутьУтилиты = ПутьВременныхФайлов + ИмяФайлаУтилиты;
        Макет = ПолучитьМакет(ИмяМакета);
        Макет.Записать(ПолныйПутьУтилиты);
    КонецЦикла;
	
    // --- 3. Формирование и запуск команды ImageMagick ---
    // Полный путь к magick.exe во временной папке
    КомандаMagick = ПутьВременныхФайлов + "magick.exe";
    
    // Формирование параметров команды
    ПараметрыКоманды = 
        "-density 200 " + 
        " " + ИмяФайлаИсточника + " " + 
        "-trim " + 
        "-border 10x10 " + 
        " " + ИмяФайлаПриемника + " ";
        
    // Полная строка команды
    ПолнаяКоманда = КомандаMagick + " " + ПараметрыКоманды;

    // Запуск приложения с ожиданием завершения
    КодВозврата = Неопределено;                                                   
    ЗапуститьПриложение(ПолнаяКоманда, ПутьВременныхФайлов, Истина, КодВозврата); 
    
    Если КодВозврата <> 0 Тогда
        ВызватьИсключение "Ошибка конвертации. Команда завершилась с кодом: " + КодВозврата;
    КонецЕсли;
    
    // --- 4. Получение результата и очистка ---
    ФайлПриемник = Новый Файл(ИмяФайлаПриемника);
    Если ФайлПриемник.Существует() Тогда
        // Читаем полученный PNG-файл как двоичные данные
        ДвоичныеДанныеИзображения = Новый ДвоичныеДанные(ИмяФайлаПриемника);
        
        // Удаление всех временных файлов утилит и результата
        Для Каждого ИмяМакета Из ИсполняемыеФайлы Цикл
            УдалитьФайлы(ПутьВременныхФайлов, СтрЗаменить(ИмяМакета, "_", "."));
        КонецЦикла;
        УдалитьФайлы(ПутьВременныхФайлов, ИмяФайлаПриемника);
        УдалитьФайлы(ПутьВременнойПапки);
        Возврат ДвоичныеДанныеИзображения;
    Иначе
        ВызватьИсключение "Ошибка: Файл-результат конвертации не найден (" + ИмяФайлаПриемника + ")";
    КонецЕсли;
	
    Возврат Неопределено;
    
КонецФункции

 

Демонстрация работы

Выбираем отчет на форме, нажимаем "Сформировать". В окне сообщений путь к сформированным файлам.

 

 

Пример отчета, сформированного в режиме пользователя:

 

 

Изображения в Word после Вставка->Иллюстрации->Рисунки:

 

 

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.186.21

Вступайте в нашу телеграмм-группу Инфостарт

Отчет PDF PNG ImageMagick Ghostscript Без установки

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    60607    34    29    

47

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    4283    1    2    

4

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    58700    20    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    23256    33    6    

52

Консолидация данных Работа с интерфейсом Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

5988 руб.

17.10.2025    1165    1    0    

1

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    44733    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    25297    smielka    38    

112

Инструментарий разработчика Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    16702    179    acces969    31    

132
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. simich 76 06.12.25 14:46 Сейчас в теме
Очень круто, как раз понадобилось, спасибо большое!
2. simich 76 06.12.25 14:48 Сейчас в теме
(1) единственное с чем столкнулся - если ПДФ на нескольких страницах - то сохраняется в несколько картинок. Выставил табличному документу Автомасштаб и все отлично. Спасибо!
3. simich 76 10.12.25 15:39 Сейчас в теме
Подскажите, пожалуйста, можно ли сохранить картинку с заданным расширением?
4. AASergan 14 10.12.25 17:22 Сейчас в теме
magick - это целый комбайн. Он по умолчанию форматы определяет по расширению, которое даете файлу здесь:

ИмяФайлаПриемника = ПутьВременныхФайлов + "output_" + Новый УникальныйИдентификатор() + ".png";

задавайте другое, смотрите что получится. Если не взлетит, то нужно смотреть ключи командной строки, там наверняка можно задать формат выходного файла.
5. simich 76 10.12.25 20:24 Сейчас в теме
(4) неверно я написал, не расширение , а разрешение имел в виду) Чтобы сделать крупнее картинку - добавил параметр "-resize 300%" в ПараметрыКоманды при конвертации - все получилось
6. Cocky_Idiot 14 11.12.25 00:56 Сейчас в теме
Как "наколенка" - годнота, плюс. Но...

В интеллигентных семьях корпоративном окружении windows обычно стоит групповая политика, запрещающая запуск исполняемых файлов из временных папок.

Установить imagemagick на сервер безопасность не позволяет, а запускать любой выгруженный из обработки бинарник типа нормально?? Выбирая между первым(плохим) и вторым(очень плохим) вариантами, лично я выберу первый и поставлю im на сервер.

А ещё есть отдельная история с чисткой временных файлов...

"Можно, конечно, и зайца научить курить" - (с) к/ф "Служебный роман", но зачем заставлять 1С заниматься тем, для чего она плохо предназначена?

Почему бы не поднять для данной задачи http сервис на python/node/etc? Чатгопота реализует его в полсотни(!) строк кода, оно будет запускаться в изолированном окружении и гарантированно не будет иметь лишних прав на сервере. Для 1С это будет обычный внешний сервис. Параметры конвертации(density и проч.) слать в queryString.
Туда дуешь base64 (или octet/stream, или чистый application/pdf), оттуда получаешь image/png.

Это счастье можно запустить в докере на сервере, на отдельной машине в сети, на raspbery pi, в арендованной vps/vds. Есть подозрение, что оно даже в режиме cloud function сможет подняться. И если оно ляжет - то это никак не затронет основной функционал 1С. Оно может вообще ничего не писать на диск, а сразу пайпить данные через оперативку из запроса в im - не придется заморачиваться на чистку темпов.

Минусы очевидны: появляются гетерогенная среда и затраты на сопровождение. Но в чуть более чем мелких внедрениях оно оправдано.
7. Cocky_Idiot 14 12.12.25 01:27 Сейчас в теме
И этта...
Что произойдет, если в вашу прекрасную экспортную функцию прилетит ИмяФайла "zhopa.pdf zhopa.png; format c: ; " ? Как можно не проверять входящий параметр экспортной функции и пихать его аргументом в ЗапуститьПриложение??
// minumum minimoreum
Счастье = Новый Файл(ИмяФайла)
Если Счастье.Существует() Тогда
  // не уверен, ибо проверка совсем наивная. но лучше, чем ничего?
  ... основная ветка
Иначе
  ВызватьИсключение("Нет в диске счастья!")
КонецЕсли
Показать


И где-то читал, что с одним сервером 1С иногда работают несколько клиентов одновременно... Как оно будет себя вести, если придут два запроса на конвертацию одного и того же отчета?

Ну и повторюсь: в любых мало-мальски серьезных внедрениях ЗапуститьПриложение должно быть(и будет) обрезано на уровне кластера 1С, групповых политик (win), polkit(linux) и проч. Цезарю - цезарево, одинэсу - одинэсово. Нефиг серверу 1с чего-то запускать в ОС.

Сделайте внешний микросервис и дуйте туда http post ;)
Для отправки сообщения требуется регистрация/авторизация