Как организовать просмотр офисных документов и файлов PDF в веб-клиенте 1С?

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

При работе пользователей через веб-клиент часто возникает задача быстрого просмотра прикрепленных файлов (договоров в DOC/DOCX, прайс-листов в XLS/XLSX, сканов в PDF) без необходимости их скачивания на локальный компьютер и открытия во внешних приложениях. В отличие от тонкого клиента под Windows, веб-клиент функционирует в среде интернет-браузера и имеет строгие ограничения безопасности: у него нет прямого доступа к файловой системе клиента, и он не может запускать локальные COM-приложения.

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

Вариант 1. Встроенное чтение таблиц Excel средствами платформы 1С

Если задача ограничивается просмотром табличных документов формата XLSX, нам не требуются сторонние утилиты, серверные конвертеры или установленные офисные пакеты. Платформа 1С:Предприятие содержит штатный механизм прямого чтения файлов XLSX непосредственно в объект ТабличныйДокумент.

Разберем по шагам, как реализовать отображение таблицы на форме:

  1. Добавим на управляемую форму реквизит ПросмотрТаблицы с типом данных ТабличныйДокумент.
  2. Вынесем этот реквизит в элементы формы как ПолеТабличногоДокумента.
  3. На сервере получим двоичные данные файла, сохраним их во временный файл и прочитаем встроенным методом Прочитать.

Посмотрим на пример серверной процедуры:


&НаСервере
Процедура ЗагрузитьФайлExcelНаСервере(АдресФайлаВоВременномХранилище)
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    
    ПросмотрТаблицы.Очистить();
    ПросмотрТаблицы.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
    
    УдалитьФайлы(ИмяВременногоФайла);
    
КонецПроцедуры

Этот метод работает одинаково надежно на серверах под управлением Windows и Linux, не создает утечек памяти и максимально быстро выводит данные в веб-клиент.

Вариант 2. Конвертация документов в PDF и отображение через HTTP-сервис

Попытка сохранения текстовых файлов Word в формат HTML (например, через COM-объекты) часто приводит к искажению разметки, «съезжанию» таблиц и потере связанных графических изображений. Общепринятым стандартом предварительного просмотра разнородных файлов является их промежуточная конвертация в единый формат PDF.

Современные браузеры содержат встроенный модуль чтения PDF. Поэтому для просмотра достаточно отдать двоичные данные браузеру с корректным HTTP-заголовком, а на форме 1С отобразить результат в элементе ПолеHTMLДокумента.

Проанализируем процесс реализации по шагам:

  1. На стороне сервера офисный документ конвертируется в PDF. Для серверов под Windows и Linux оптимально использовать запуск LibreOffice в консольном фоновом режиме: soffice --headless --convert-to pdf <ПутьКФайлу>. В отличие от интерактивных COM-объектов MS Word, фоновый процесс не блокирует сеансы ОС и корректно завершается по таймауту.
  2. В конфигурации создается собственный HTTP-сервис, который по уникальному идентификатору файла возвращает двоичные данные сформированного PDF-документа.
  3. В формируемом HTTP-ответе обязательно устанавливаются специальные заголовки: Content-Type: application/pdf и Content-Disposition: inline. Заголовок inline указывает веб-браузеру открыть документ внутри текущего фрейма, а не отправлять его на загрузку в папку скачиваний.
  4. В реквизит формы с типом Строка, связанный с элементом ПолеHTMLДокумента, передается URL-адрес созданного HTTP-сервиса либо простой HTML-код с тегом <iframe>.

Посмотрим на пример обработки запроса внутри метода HTTP-сервиса 1С:


Функция ПолучитьФайлPDF(Запрос)
    
    ИдентификаторФайла = Запрос.ПараметрыЗапроса.Получить("ID");
    ДвоичныеДанныеPDF = ПолучитьДвоичныеДанныеФайла(ИдентификаторФайла);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/pdf");
    Ответ.Заголовки.Вставить("Content-Disposition", "inline; filename=""document.pdf""");
    Ответ.УстановитьТело(ДвоичныеДанныеPDF);
    
    Возврат Ответ;
    
КонецФункции

Вариант 3. Использование серверов документов по протоколу WOPI

Если заказчику требуется полноценный предпросмотр и редактирование сложных офисных форматов (с сохранением рецензирования, сложных колонтитулов и макросов), конвертации в PDF может быть недостаточно. В этом случае применяется интеграция с внешними серверами документов (например, OnlyOffice Document Server или Collabora Online).

Рассмотрим подробнее архитектуру такого решения:

  1. В информационной базе 1С разрабатываются методы HTTP-сервиса, реализующие спецификацию WOPI (Web Application Open Platform Interface). Сервис отдает содержимое файла внешнему серверу документов и принимает обновленную версию после редактирования.
  2. На форму 1С помещается ПолеHTMLДокумента, в которое загружается веб-редактор с сервера документов.
  3. Веб-клиент отображает интерфейс редактора прямо внутри рабочего окна 1С, обеспечивая максимальную совместимость с форматами MS Office.

Подводные камни и технические ограничения

Выясним причину возможных проблем при реализации просмотра файлов в веб-клиенте:

  1. Нестабильность COM-объектов на сервере: Использование COMОбъект("Word.Application") или COMОбъект("Excel.Application") на стороне сервера крайне не рекомендуется. Во-первых, это решение работает только на серверах под Windows. Во-вторых, серверные процессы MS Office не предназначены для многопоточной работы: под нагрузкой они зависают в памяти, вызывают утечки ресурсов и блокируют рабочие процессы кластера 1С.
  2. Политика безопасности браузера (CORS и фреймы): При отображении документов через ПолеHTMLДокумента в веб-клиенте браузер может заблокировать отображение из-за политики одинакового источника (Same-Origin Policy). Сервер 1С и веб-сервис просмотра должны работать по одинаковому протоколу (предпочтительно HTTPS), а в ответах веб-сервера должны быть настроены разрешающие заголовки X-Frame-Options и Content-Security-Policy.
  3. Ограничения веб-клиента по работе с диском: В веб-клиенте невозможно передать на сервер локальный путь к файлу вроде C:\Docs\file.docx. Любая обработка начинается с интерактивного помещения файла во временное хранилище через метод НачатьПомещениеФайлаНаСервер, и только после этого сервер 1С может читать или конвертировать полученные двоичные данные.

Таким образом, для простых таблиц XLSX лучшим выбором является штатное ПолеТабличногоДокумента, а для универсального просмотра DOCX и PDF — серверное преобразование в PDF с отдачей через собственный HTTP-сервис в ПолеHTMLДокумента.

← На главную