Как программно взаимодействовать с «Р7 Офис» из 1С: поиск аналога COM-объекта и методы автоматизации?

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

При работе с различными офисными пакетами из среды 1С программисты часто сталкиваются с необходимостью автоматизации процессов. Если с Microsoft Office или OpenOffice существуют устоявшиеся механизмы взаимодействия через COM-объекты, то с новыми или менее распространенными решениями, такими как «Р7 Офис», ситуация может быть неочевидной. В этой статье мы подробно рассмотрим, как подходить к задаче программного управления «Р7 Офис» из 1С, выясним, почему традиционный подход через COM-объекты, скорее всего, не сработает, и изучим альтернативные, современные методы взаимодействия.

Предположим, перед нами стоит задача программно создавать или изменять документы в «Р7 Офис» непосредственно из нашей конфигурации 1С. Пользователь в сообщении 0 выразил это так: «Привет всем, возникла необходимость работать с программно Р7 Офис. Но я не знаю как создавать объект программно. Вот в опенофисе вот так: ServiceManager = Новый COMОбъект(\"com.sun.star.ServiceManager\");, а как создать ком объект в Р7 Офис, или где документация. так и не нашел».

Почему COM-объект, вероятно, отсутствует в «Р7 Офис»?

Давайте проанализируем ситуацию с COM-объектами. Исторически, технология COM (Component Object Model) была широко распространена в экосистеме Windows для обеспечения взаимодействия между различными приложениями. Именно благодаря COM мы можем легко управлять, например, Excel или Word из 1С, создавая объекты типа COMОбъект(\"Excel.Application\") или COMОбъект(\"Word.Application\"). Аналогичный подход используется и в OpenOffice/LibreOffice с его com.sun.star.ServiceManager, что видно из примера автора.

Однако, как справедливо заметили участники форума в сообщениях 3 и 8: «а у него в принципе COMа может не быть» и «ком нынче того... немодный». Это отражает общую тенденцию в разработке современного программного обеспечения. Многие новые кроссплатформенные приложения, особенно те, которые имеют веб-ориентированную или клиент-серверную архитектуру, отказываются от глубокой интеграции через COM в пользу более универсальных и платформенно-независимых механизмов, таких как API (Application Programming Interface) на основе REST или WebSockets.

«Р7 Офис», являясь современным решением, разработанным с учетом кроссплатформенности и облачных технологий, скорее всего, следует этой тенденции. Поиск документации не выявил упоминаний о прямом COM-интерфейсе для десктопной версии, что подтверждает наше предположение.

Архитектура «Р7 Офис»: Сервер документов и десктопные редакторы

Для понимания методов программного взаимодействия, нам необходимо глубже рассмотреть архитектуру «Р7 Офис». Из сообщений 5 и 6 мы видим, что автор упоминает «сервер документов», а также «десктопную версию программы». Участники форума предполагают: «очень может быть, что там десктопная версия запускает локальный сервер документов в однопользовательском режиме, а весь интерфейс в чем-нибудь типа электрона рисуется» и «так десктопная версия может быть специализированным браузером, по типу как тонкий клиент в 1С. А вся автоматизация либо делается через Web-API, либо, может, ее вообще там и нет».

Эти предположения очень близки к действительности. «Р7 Офис» использует клиент-серверную архитектуру даже в своих десктопных версиях. Это означает, что:

  1. Сервер документов: Ядром системы является «Сервер документов» (Document Server), который представляет собой набор онлайн-редакторов. Он предназначен для установки в локальной сети компаний и обеспечивает централизованное хранение, совместную работу и обработку документов. Весь функционал редактирования документов реализуется на стороне сервера.
  2. Десктопные редакторы: Десктопные редакторы «Р7 Офис» (Text, Spreadsheet, Presentation) по своей сути являются специализированными клиентами, которые взаимодействуют с движком редактирования. Они могут работать как с удаленным Сервером документов, так и запускать его локальную копию в однопользовательском режиме. Интерфейс таких десктопных приложений часто реализуется с использованием веб-технологий (например, Electron), что делает их по поведению схожими с "тонким клиентом" или "специализированным браузером".

Взаимодействие интерфейса с API редактора происходит через Message Manager, что явно указывает на отсутствие прямого COM-взаимодействия как основного способа для внешней автоматизации.

Основные методы программного взаимодействия: API, плагины и макросы

Итак, если COM не наш путь, то что же использовать? Главный ответ – API (Application Programming Interface). Как гласит сообщение 4: «зато апи есть». Дополнительная информация подтверждает, что программный доступ к функционалу «Р7 Офис» осуществляется через обширный API. Этот API охватывает общие методы и функции, а также специфические API для работы с текстовыми документами, электронными таблицами, презентациями, формами, вводом текста и обработкой событий.

Рассмотрим подробнее доступные механизмы:

1. API Сервера документов (Web-API)

Если в вашей инфраструктуре развернут «Сервер документов» «Р7 Офис», то наиболее мощный и гибкий способ автоматизации — это взаимодействие с его Web-API. Это типичный RESTful API, с которым можно работать при помощи стандартных HTTP-запросов из 1С. Через Web-API можно выполнять такие операции, как:

Для взаимодействия с таким API из 1С мы бы использовали объекты HTTPЗапрос и HTTPСоединение. Рассмотрим пример общего шаблона для выполнения HTTP-запросов:


// Пример URL к API (нужно будет уточнить конкретные эндпоинты Р7 Офис)
Перем БазовыйURL;
БазовыйURL = "https://your-onlyoffice-document-server/api/v1/"; 

// Создаем HTTP-соединение
Попытка
    HTTPСоединение = Новый HTTPСоединение(АдресСервера, , Пользователь, Пароль, , , , Истина); // АдресСервера - хост без протокола и пути
Исключение
    Сообщить("Ошибка соединения с Сервером документов: " + ОписаниеОшибки());
    Возврат Неопределено;
КонецПопытки;

// Формируем HTTP-запрос
Запрос = Новый HTTPЗапрос("/document/create", Заголовки); // Путь к конкретному методу API
Запрос.УстановитьТелоИзСтроки("{""title"":""Новый документ из 1С"", ""type"":""docx""}", КодировкаТекста.UTF8, "application/json");

// Выполняем запрос
Попытка
    Ответ = HTTPСоединение.Отправить(Запрос);
Исключение
    Сообщить("Ошибка отправки запроса к Серверу документов: " + ОписаниеОшибки());
    Возврат Неопределено;
КонецПопытки;

// Обрабатываем ответ
Если Ответ.Код = 200 Тогда
    ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    // Десериализация JSON-ответа и дальнейшая работа
    JSONЧтение = Новый ЧтениеJSON();
    JSONЧтение.УстановитьСтроку(ТелоОтвета);
    ДанныеОтвета = JSONЧтение.Прочитать();
    Сообщить("Документ успешно создан. ID: " + ДанныеОтвета.ID);
Иначе
    Сообщить("Ошибка при создании документа. Код: " + Ответ.Код + ", Ответ: " + Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
КонецЕсли;

Для полноценной работы с Web-API Сервера документов вам потребуется обратиться к официальной документации «Р7 Офис» по API для разработчиков, где подробно описаны все доступные методы, параметры и примеры запросов/ответов.

2. Макросы на JavaScript

Десктопные редакторы «Р7 Офис» поддерживают расширенный API для работы с макросами. Это мощный инструмент для автоматизации рутинных операций непосредственно внутри документов. Важное отличие: макросы в «Р7 Офис» создаются на языке JavaScript, а не на VBA, как в Microsoft Office.

Хотя 1С напрямую не может выполнять JavaScript-макросы внутри «Р7 Офис», мы можем использовать этот механизм опосредованно:

  1. Запуск внешних скриптов: 1С может запускать внешние исполняемые файлы или скрипты (например, на PowerShell, Python), которые, в свою очередь, открывают «Р7 Офис», загружают нужный документ и инициируют выполнение JavaScript-макроса. Макрос выполняет необходимые действия с документом, сохраняет его и закрывает «Р7 Офис».
  2. Взаимодействие через файлы: 1С подготавливает данные и сохраняет их в файл (например, JSON или XML). JavaScript-макрос в «Р7 Офис» читает этот файл, обрабатывает данные в документе и записывает результат обратно в другой файл, который затем считывается 1С.

Пример JavaScript-макроса (для общего понимания, не код 1С):


// Пример JavaScript макроса для Р7 Офис
// Макрос добавляет текст в активный текстовый документ

(function() {
    var oDocument = Api.GetDocument();
    var oParagraph = Api.CreateParagraph();
    oParagraph.AddText("Это текст, добавленный макросом из 1С.");
    oDocument.Push(oParagraph);
    
    // Возможно, сохранение или другая логика
    // Api.Save(); 
    // Api.Close();
})();

Для реализации такого подхода потребуется хорошая координация между логикой 1С и JavaScript-макросом, а также понимание API макросов «Р7 Офис».

3. Плагины и расширяемость

«Р7 Офис» позволяет пользователям добавлять дополнительные функции, создавая собственные плагины. Плагины также пишутся на JavaScript и могут расширять функциональность редакторов, интегрироваться с внешними сервисами (например, для распознавания текста, перевода, редактирования изображений). Если требуемая функциональность достаточно сложна и специфична, возможно, имеет смысл разработать собственный плагин для «Р7 Офис», который будет выполнять нужные действия, а 1С будет взаимодействовать с этим плагином через какой-либо промежуточный механизм (например, через тот же файловый обмен или Web-API, если плагин может его предоставить).

Практические подходы к интеграции из 1С

Обобщая вышесказанное, рассмотрим конкретные шаги, которые мы можем предпринять для интеграции 1С и «Р7 Офис»:

Шаг 1: Определение архитектуры «Р7 Офис» в вашей среде

  1. Используется ли «Сервер документов»? Если у вас развернут «Сервер документов» «Р7 Офис» (OnlyOffice Document Server), то это наиболее предпочтительный вариант для программной интеграции. Используйте его Web-API.
  2. Только десктопные редакторы? Если используются только десктопные редакторы и нет возможности развернуть Сервер документов, то придется искать другие пути, такие как запуск макросов или внешних скриптов.

Шаг 2: Изучение документации API

Критически важно тщательно изучить официальную документацию для разработчиков «Р7 Офис» (Центр поддержки Р7). Там вы найдете разделы, посвященные:

Без детального понимания доступных методов API любая попытка интеграции будет затруднительной.

Шаг 3: Выбор метода взаимодействия из 1С

Метод 1: Взаимодействие с Web-API Сервера документов (рекомендуется)

Если доступен «Сервер документов», то это наиболее чистый и надежный способ. Мы будем отправлять HTTP-запросы из 1С. Этот подход не требует установки «Р7 Офис» на клиентских машинах, где работает 1С, и обеспечивает централизованное управление документами.

Алгоритм действий:

  1. Из 1С формируем JSON-тело запроса с указанием необходимых параметров (например, тип документа, данные для заполнения).
  2. Используем объекты HTTPСоединение и HTTPЗапрос для отправки запроса к соответствующему эндпоинту Web-API Сервера документов.
  3. Получаем и обрабатываем JSON-ответ от сервера.
  4. При необходимости, загружаем полученный документ или ссылку на него.

Этот метод подходит для массовой обработки, генерации отчетов, создания документов по шаблону и других серверных операций.

Метод 2: Запуск внешних скриптов с макросами

Если Сервер документов недоступен, и нам нужно взаимодействовать с десктопным редактором, мы можем использовать внешние скрипты.

Алгоритм действий:

  1. Из 1С подготавливаем необходимые данные для макроса и сохраняем их во временный файл (например, CSV, JSON, TXT).
  2. Из 1С запускаем внешний исполняемый файл или скрипт (например, PowerShell, Python, Node.js). Для этого можно использовать метод ЗапуститьПриложение().
  3. Внешний скрипт:
    1. Запускает десктопный редактор «Р7 Офис».
    2. Открывает нужный документ или создает новый.
    3. Выполняет предопределенный JavaScript-макрос, который:
      1. Читает данные из временного файла, подготовленного 1С.
      2. Выполняет действия с документом (заполнение полей, вставка текста, форматирование) с помощью API макросов «Р7 Офис».
      3. Сохраняет документ и/или записывает результаты своей работы в другой временный файл.
    4. Закрывает «Р7 Офис».
  4. 1С дожидается завершения работы внешнего скрипта и считывает результаты из временного файла.

Этот метод более сложен в реализации и требует настройки среды на клиентских машинах, но позволяет автоматизировать операции, которые напрямую затрагивают пользовательский интерфейс или требуют доступа к локальным файлам.

Метод 3: Использование библиотеки «РегламентныеЗадания» или COM-компонента (для общих случаев)

Хотя прямого COM-объекта для «Р7 Офис» нет, мы можем рассмотреть другие варианты, если нашей задачей является не прямое редактирование документа, а, например, его конвертация или печать. Многие офисные пакеты предоставляют утилиты командной строки для таких задач. 1С может вызывать эти утилиты через ЗапуститьПриложение(). Если для конвертации используется специализированный сервис или библиотека (например, на .NET), то можно рассмотреть создание собственной внешней COM-компоненты на .NET, которая бы уже взаимодействовала с API «Р7 Офис» или его утилитами, а затем вызывала эту компоненту из 1С. Однако это очень сложный и ресурсоемкий путь, оправданный лишь в исключительных случаях.

Заключение

Итак, на вопрос о создании COM-объекта для «Р7 Офис» из 1С, ответ, к сожалению, отрицательный в традиционном понимании. «Р7 Офис» не предоставляет COM-интерфейс, аналогичный OpenOffice или Microsoft Office. Современная архитектура «Р7 Офис» ориентирована на API, в частности, на Web-API для Сервера документов и API макросов на JavaScript для десктопных редакторов.

Для программиста 1С это означает необходимость освоения новых подходов к интеграции:

  1. Взаимодействие через HTTP-запросы к Web-API Сервера документов является наиболее предпочтительным и универсальным методом.
  2. Использование внешних скриптов (PowerShell, Python и т.д.) для запуска десктопных редакторов и выполнения JavaScript-макросов внутри них — более сложный, но возможный путь для специфических задач.

Всегда начинайте с изучения официальной документации «Р7 Офис» для разработчиков, чтобы понять возможности и ограничения доступных API. Это позволит вам выбрать наиболее эффективный и надежный способ интеграции «Р7 Офис» в ваши решения на платформе 1С.

← На главную