Как передать ТабличныйДокумент из 1С через веб-сервис для отображения или скачивания на внешнем сайте?

Программист 1С v8.3 (Управляемые формы) Управленческий учет
← К списку

Когда возникает задача передачи сложного отчета или табличных данных из системы 1С:Предприятие во внешнюю веб-систему, например, для отображения на сайте или предоставления пользователю для скачивания, мы сталкиваемся с несколькими вызовами. ТабличныйДокумент в 1С — это мощный инструмент для представления отчетов, но его прямая передача через веб-сервис требует правильного подхода. Давайте вместе разберем различные стратегии и выберем наиболее подходящее решение для вашей ситуации.

Общие принципы взаимодействия веб-сервиса 1С и внешнего сайта

Прежде чем углубляться в детали форматов, давайте вспомним, что для успешной работы веб-сервиса 1С его необходимо опубликовать на веб-сервере (например, IIS или Apache). Этот процесс включает регистрацию модуля расширения веб-сервера и настройку виртуального приложения. Обеспечение безопасности соединения с использованием SSL-сертификатов (HTTPS) и дополнительной аутентификации является критически важным шагом.

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

Решение 1: Передача ТабличногоДокумента в формате PDF

Формат PDF является общепринятой практикой для передачи отчетности, поскольку он гарантирует неизменность внешнего вида документа независимо от устройства и программного обеспечения пользователя. Рассмотрим подробнее, как мы можем реализовать этот подход.

  1. Формирование и сохранение ТабличногоДокумента в PDF.

    На стороне 1С мы сначала формируем наш ТабличныйДокумент, а затем сохраняем его в формате PDF. Для этого используем метод Записать() объекта ТабличныйДокумент, указывая тип файла ТипФайлаТабличногоДокумента.PDF.

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

    Оптимизация без сохранения на диск: Для повышения производительности и безопасности мы можем избежать создания временных файлов на диске. Вместо этого, используем объект ПотокВПамяти (MemoryStream). Сначала записываем ТабличныйДокумент в поток, а затем преобразуем его в ДвоичныеДанные.

    
    ТабДок = Новый ТабличныйДокумент;
    // ... код по заполнению ТабДок ...
    
    Поток = Новый ПотокВПамяти;
    ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
    ДвоичныеДанныеPDF = Поток.Прочитать();
    
  2. Преобразование PDF в строку Base64.

    Для передачи через веб-сервис двоичные данные PDF-файла необходимо преобразовать в текстовый формат, используя кодировку Base64. Это универсальный способ передачи бинарных данных через текстовые протоколы.

    
    // Если мы использовали временный файл:
    ДвоичныеДанныеPDF = Новый ДвоичныеДанные(ИмяВременногоФайлаPDF);
    
    // Или если использовали ПотокВПамяти, у нас уже есть ДвоичныеДанныеPDF
    СтрокаBase64PDF = База64Кодировать(ДвоичныеДанныеPDF);
    Возврат СтрокаBase64PDF; // Веб-сервис возвращает строку Base64
    
  3. Декодирование и отображение на стороне клиента.

    На стороне клиентского сайта (например, на JavaScript) мы получаем строку Base64, декодируем ее обратно в двоичные данные и отображаем PDF. Мы можем использовать префикс data:application/pdf;base64, для встраивания PDF напрямую в HTML-страницу или для создания ссылки на скачивание.

    Важный момент: Иногда могут возникать проблемы с чтением PDF после декодирования. В этом случае мы рекомендуем проверять корректность полученной Base64-строки онлайн-валидаторами.

Решение 2: Передача ТабличногоДокумента в формате HTML

Если цель — непосредственное отображение отчета на веб-странице, то передача в формате HTML может быть очень удобной. Мы можем сформировать HTML-код отчета прямо в 1С.

  1. Формирование и сохранение ТабличногоДокумента в HTML.

    Аналогично PDF, ТабличныйДокумент можно сохранить в HTML. Метод Записать() позволяет это сделать.

    
    ТабДок = Новый ТабличныйДокумент;
    // ... код по заполнению ТабДок ...
    
    ИмяВременногоФайлаHTML = КаталогВременныхФайлов() + "Отчет_" + УникальныйИдентификатор() + ".html";
    ТабДок.Записать(ИмяВременногоФайлаHTML, ТипФайлаТабличногоДокумента.HTML);
    

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

  2. Чтение HTML-содержимого и возврат его как строки.

    После сохранения (или формирования в потоке) мы читаем содержимое HTML-файла (или потока) в строку и возвращаем ее из веб-сервиса.

    
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ИмяВременногоФайлаHTML, КодировкаТекста.UTF8); // Убедитесь в правильной кодировке
    СтрокаHTML = ТекстовыйДокумент.ПолучитьТекст();
    Возврат СтрокаHTML; // Веб-сервис возвращает HTML-строку
    
  3. Встраивание HTML на клиентской стороне.

    На клиентском сайте полученную HTML-строку можно напрямую вставить в элемент

    или