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

24.11.25

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

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

Файлы

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

Наименование Скачано Купить файл
Программная конвертация отчетов 1С в графический формат без установки дополнительных компонентов
.epf 33,29Mb ver:1.0
1 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С v8.3 8.3.14 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    54770    29    25    

43

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

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

5160 руб.

29.06.2020    22798    32    6    

51

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

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

5040 руб.

06.10.2020    12779    8    8    

14

Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

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

20.08.2024    42991    mrXoxot    44    

138

Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

27.05.2024    24743    smielka    38    

111

Работа с интерфейсом 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    22996    1350    elcoan    53    

131

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

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

3 стартмани

10.04.2023    16229    178    acces969    31    

132
Для отправки сообщения требуется регистрация/авторизация