В современной практике часто возникает задача интеграции учетной системы 1С с корпоративным сайтом. Одной из наиболее востребованных функций является отображение оперативных отчетов (например, графиков продаж или ведомостей) непосредственно в личном кабинете или на статической странице сайта. В данной статье мы разберем, как правильно сформировать отчет в 1С, передать его на сайт под управлением Drupal и обеспечить корректное отображение графической информации.
Рассмотрим два основных пути передачи данных из 1С на сайт. Первый вариант — использование стандартных Web-сервисов (SOAP). Этот метод традиционен для 1С, он строго типизирован и позволяет возвращать данные в формате string. Однако для веб-разработки более современным и «легким» подходом считается использование HTTP-сервисов (REST).
Проанализируем преимущества HTTP-сервисов в контексте Drupal. Drupal базируется на PHP и использует мощную библиотеку Guzzle для сетевых запросов. Работа с JSON через HTTP-сервис в 1С упрощает парсинг данных на стороне сайта и позволяет передавать не только сам HTML-код отчета, но и метаданные: заголовки, даты формирования или коды ошибок. Тем не менее, если в вашей инфраструктуре уже настроены Web-сервисы, передача строки через SOAP также является рабочим решением.
Выясним причину, по которой обычный экспорт в HTML может не подходить для отчетов с графиками. Старые форматы HTML сохраняют изображения и диаграммы в отдельные файлы в локальную папку. При передаче строки кода на сайт ссылки на эти файлы ломаются, и пользователь видит пустые квадраты вместо диаграмм.
Чтобы избежать этой проблемы, необходимо использовать формат HTML5. Начиная с версии платформы 8.3, 1С умеет преобразовывать диаграммы табличного документа в формат SVG (Scalable Vector Graphics), который встраивается непосредственно в код страницы как текстовый блок. Картинки при этом могут внедряться через Base64.
Разберем по шагам, как программно сформировать такой отчет:
// Сформируем отчет в табличный документ
ТабДок = Новый ТабличныйДокумент;
Отчеты.МойОтчет.СкомпоноватьРезультат(ТабДок);
// Определим временный путь для сохранения
ИмяФайла = ПолучитьИмяВременногоФайла("html");
// Записываем табличный документ в формате HTML5
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.HTML5);
// Читаем содержимое файла в строку
ТекстовыйЧтение = Новый ТекстовыйДокумент;
ТекстовыйЧтение.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
СтрокаОтчета = ТекстовыйЧтение.ПолучитьТекст();
Посмотрим на пример создания метода Web-сервиса, который будет принимать параметры (например, ДатаНачала и ДатаОкончания) и возвращать сформированную строку HTML. В свойствах метода укажите тип возвращаемого значения как string (http://www.w3.org/2001/XMLSchema).
Функция СформироватьОтчетДляСайта(ДатаН, ДатаО)
// Код формирования табличного документа (см. выше)
// ...
// Возвращаем итоговую строку
Возврат СтрокаОтчета;
КонецФункции
Важно помнить, что стандартный экспорт из 1С включает в себя полные теги html, head и body, а также встроенные стили css. Если вы планируете вставлять этот код внутрь существующей страницы Drupal, вам может потребоваться «очистка» строки. Проанализируем ситуацию: стили 1С могут конфликтовать со стилями сайта. В некоторых случаях целесообразно вырезать только содержимое тега body или передавать отчет целиком в iframe.
Теперь разберем, как принять эти данные в Drupal. Наиболее эффективным методом является создание кастомного модуля, который будет выполнять запрос к 1С. Мы рекомендуем использовать асинхронную загрузку (AJAX), чтобы пользователь не ждал формирования тяжелого отчета при первой загрузке страницы.
http_client.Text Format на сайте разрешает такие теги, или выводить данные как TrustedCallbackInterface.Cache API в Drupal. Сохраняйте результат запроса на 10-15 минут.Если отчет очень объемный, передача его прямой строкой может замедлить работу. Рассмотрим альтернативный вариант — передачу через ZIP-архив. 1С может упаковать HTML и все связанные ресурсы в один архив, передать его в виде Base64, а PHP на стороне Drupal распакует его во временную директорию public://reports/.
Также стоит обратить внимание на метод PUSH. Вместо того чтобы сайт запрашивал данные у 1С (PULL), 1С сама может отправлять готовый отчет на сайт по расписанию через регламентное задание. Это особенно полезно для статичных ежедневных отчетов, которые не требуют ввода параметров пользователем в реальном времени.
Таким образом, мы выяснили, что наиболее надежным способом выгрузки отчета на Drupal является использование HTTP-сервисов 1С с возвратом строки в формате HTML5. Это гарантирует сохранение всех диаграмм и упрощает интеграцию на стороне веб-сервера.