Как выгрузить HTML-отчет с диаграммами из 1С на сайт под управлением Drupal?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современной практике часто возникает задача интеграции учетной системы 1С с корпоративным сайтом. Одной из наиболее востребованных функций является отображение оперативных отчетов (например, графиков продаж или ведомостей) непосредственно в личном кабинете или на статической странице сайта. В данной статье мы разберем, как правильно сформировать отчет в 1С, передать его на сайт под управлением Drupal и обеспечить корректное отображение графической информации.

Выбор технологии интеграции: Web-сервисы или HTTP-сервисы

Рассмотрим два основных пути передачи данных из 1С на сайт. Первый вариант — использование стандартных Web-сервисов (SOAP). Этот метод традиционен для 1С, он строго типизирован и позволяет возвращать данные в формате string. Однако для веб-разработки более современным и «легким» подходом считается использование HTTP-сервисов (REST).

Проанализируем преимущества HTTP-сервисов в контексте Drupal. Drupal базируется на PHP и использует мощную библиотеку Guzzle для сетевых запросов. Работа с JSON через HTTP-сервис в 1С упрощает парсинг данных на стороне сайта и позволяет передавать не только сам HTML-код отчета, но и метаданные: заголовки, даты формирования или коды ошибок. Тем не менее, если в вашей инфраструктуре уже настроены Web-сервисы, передача строки через SOAP также является рабочим решением.

Подготовка отчета в 1С в формате HTML5

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

Чтобы избежать этой проблемы, необходимо использовать формат HTML5. Начиная с версии платформы 8.3, 1С умеет преобразовывать диаграммы табличного документа в формат SVG (Scalable Vector Graphics), который встраивается непосредственно в код страницы как текстовый блок. Картинки при этом могут внедряться через Base64.

Разберем по шагам, как программно сформировать такой отчет:


// Сформируем отчет в табличный документ
ТабДок = Новый ТабличныйДокумент;
Отчеты.МойОтчет.СкомпоноватьРезультат(ТабДок);

// Определим временный путь для сохранения
ИмяФайла = ПолучитьИмяВременногоФайла("html");

// Записываем табличный документ в формате HTML5
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.HTML5);

// Читаем содержимое файла в строку
ТекстовыйЧтение = Новый ТекстовыйДокумент;
ТекстовыйЧтение.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
СтрокаОтчета = ТекстовыйЧтение.ПолучитьТекст();

Реализация передачи через Web-сервис

Посмотрим на пример создания метода Web-сервиса, который будет принимать параметры (например, ДатаНачала и ДатаОкончания) и возвращать сформированную строку HTML. В свойствах метода укажите тип возвращаемого значения как string (http://www.w3.org/2001/XMLSchema).


Функция СформироватьОтчетДляСайта(ДатаН, ДатаО)
    // Код формирования табличного документа (см. выше)
    // ...
    // Возвращаем итоговую строку
    Возврат СтрокаОтчета;
КонецФункции

Важно помнить, что стандартный экспорт из 1С включает в себя полные теги html, head и body, а также встроенные стили css. Если вы планируете вставлять этот код внутрь существующей страницы Drupal, вам может потребоваться «очистка» строки. Проанализируем ситуацию: стили 1С могут конфликтовать со стилями сайта. В некоторых случаях целесообразно вырезать только содержимое тега body или передавать отчет целиком в iframe.

Настройка на стороне Drupal

Теперь разберем, как принять эти данные в Drupal. Наиболее эффективным методом является создание кастомного модуля, который будет выполнять запрос к 1С. Мы рекомендуем использовать асинхронную загрузку (AJAX), чтобы пользователь не ждал формирования тяжелого отчета при первой загрузке страницы.

  1. Создание контроллера: В Drupal создается маршрут, который обращается к 1С через сервис http_client.
  2. Обработка безопасности: Drupal строго фильтрует HTML-теги. Поскольку отчет из 1С содержит SVG и специфические стили, необходимо убедиться, что используемый Text Format на сайте разрешает такие теги, или выводить данные как TrustedCallbackInterface.
  3. Кэширование: Чтобы снизить нагрузку на 1С, используйте Cache API в Drupal. Сохраняйте результат запроса на 10-15 минут.

Оптимизация и передача больших отчетов

Если отчет очень объемный, передача его прямой строкой может замедлить работу. Рассмотрим альтернативный вариант — передачу через ZIP-архив. 1С может упаковать HTML и все связанные ресурсы в один архив, передать его в виде Base64, а PHP на стороне Drupal распакует его во временную директорию public://reports/.

Также стоит обратить внимание на метод PUSH. Вместо того чтобы сайт запрашивал данные у 1С (PULL), 1С сама может отправлять готовый отчет на сайт по расписанию через регламентное задание. Это особенно полезно для статичных ежедневных отчетов, которые не требуют ввода параметров пользователем в реальном времени.

Таким образом, мы выяснили, что наиболее надежным способом выгрузки отчета на Drupal является использование HTTP-сервисов 1С с возвратом строки в формате HTML5. Это гарантирует сохранение всех диаграмм и упрощает интеграцию на стороне веб-сервера.

← На главную