В поддержку бесплатного курса
Из-за известных всем причин сейчас очень важным стал вопрос импортозамещения западного ПО во всех сферах деятельности, включая деятельность бизнеса. Не в последнюю очередь это касается и программного обеспечения, которым пользуются в наше время практически все - от школьников до пенсионеров, включая, конечно, и сотрудников госструктур и бизнеса, от малого до крупного.
Сегодня речь пойдет об офисных программах. Мы настолько привыкли за много лет работать в известных всем офисных программах фирмы Microsoft, что теперь, когда с лицензионными закупками их ПО, особенно для государства и бизнеса, стало, мягко говоря, «всё плохо», с привычным комфортом офисной работы на привычных «инструментах», можно, казалось бы, попрощаться.
Не всё так печально, если речь идёт о «простом» использовании офисных пакетов, таком как заполнение вручную «стандартных» документов и табличек. Тут отечественное ПО, призванное заместить собой творение «Монстра из Рэдмонда», вполне себе справляется, и даже почти без проблем открывает документы, созданные ранее в MS Office.
А вот в вопросах, касаемых автоматизации ручных процессов, всё не так уж хорошо. Поскольку, чего тут скрывать, большинство нашего офисного ПО — это просто локализованные ответвления зарубежных проектов свободного ПО, и автоматизация в них обычно достаётся по наследству.
Степень доступной автоматизации сильно рознится, но данная статья не о сравнительном анализе возможностей нашего отечественно офисного ПО, а о нашем исследовании возможности повторения функционала из нашей разработки — расширения (addon) для «MS Excel» in2sql, в офисном пакете «Р7-Офис» от фирмы «АО «Р7».
Не откроем тайну, если скажем, что данный пакет является ответвлением от довольно популярного свободного решения “ONLYOFFICE” с хорошими возможностями офисного пакета, в который входят решения для персонального компьютера на разных операционных системах, а также мобильные, и облачные решения.
К тому же есть ещё и серверное решение, которое позволяет работать централизовано и коллективно над документами, хранящимися на локальной или облачной серверной платформе. К большим плюсам именно данной платформы «Р7» можно отнести хороший перевод документации, в том числе и по API - для удалённого доступа к приложениям и для автоматизации внутри самих приложений.
Решение для последнего, было создано на базе, к которой в итоге перешли даже в самой Microsoft, а именно – на JavaScript. В принципе, степень проработки API хороша, и позволяет делать с документом почти всё, что можно сделать в нём вручную. Есть, разумеется, и нюансы, которые хотелось бы иметь при решении вопросов автоматизации, таких как доступ в область меню основной программы для упрощения и комфорта работы пользователя со сторонними решениями (плагинами, так как addon-ов, просто не предусмотрено ни в Р7, ни в ONLYOFFICE).
Но, в остальном, возможностей открывается достаточно, чтобы попробовать реализовать некоторый функционал из упомянутого выше расширения in2sql. Для тех, кто ещё не в курсе - данный аддон призван решать интересную и весьма полезную возможность - он интегрирует в «Exсel» инструменты для удалённого доступа к БД и импорту данных из таблиц БД сразу в таблицу Excel путем SQL-запросов. Но этим возможности данного инструмента не ограничиваются, и те, кому он интересен, могут вкратце ознакомиться с ним в цикле статей, посвящённых ему.
Для проверки возможностей «Редактора таблиц Р7-Офис» был выбран пробный вариант из пакета «Для дома». Поскольку проще пробовать в одной среде, скачивался вариант для MS Windows и устанавливался на 10 версию. Для тестирования была взята базовая задача искомой надстройки – получение данных из облачной БД, в качестве которой использовалась развернутая в AWS пробная версия СУБД CLICKHOUSE.
Процесс создания плагинов достаточно прост и весьма подробно описан в руководстве на сайте для разработчиков. Опять же, стоит отметить , что если хочется получить более внятную инструкцию, то проще идти на материнскую площадку к ONLYOFFICE. Там всё более грамотно разложено, хотя и большинство информации придётся читать на английском языке. Сами плагины могут быть разного типа, и, что очень обрадовало, с возможностью интеграции окна в окно самого редактора. Это весьма удобно для работы в ряде случаев (таких как наш), в отличие от отдельных окон-форм (не важно, модальных или нет).
Сам плагин представляет собой HTML страничку, в которой интегрируется запрограммированное API для плагинов, есть возможность добавлять множество сторонних скриптов (и целых библиотек), коих на JS написано очень много. С одной стороны, это существенно упрощает разработку, так как можно использовать множество редакторов, например, тот же Microsoft VS Code. С другой стороны, отсутствие интегрированной среды разработки приводит к существенным неудобствам, так как нет ни визуальных средств проектирования форм, ни, что более важно, нет встроенного в среду разработки автодополнения при наборе кода, которое позволяет существенно снизить ошибки при написании. Как следствие, скорость разработки из-за постоянного копания в вэб-справочниках на сайте разработчиков, существенно снижается, особенно на ранних стадиях. И такой проблемой, надо заметить, страдает практически всё свободной офисное ПО, а как следствие – и основанное на нём отечественное.
Для написания простейшего варианта плагина, достаточно 3 файлов:
собственно HTML странички index.html, которая будет отображаться внутри редактора
скрипта на JavaScript, который включает в себя саму алгоритмическую логику плагина
файл настроек в формате JSON - config.json, по которому офисное приложение понимает: «что за плагин, как он должен быть использован при вызове? И т.д.». Настроек там возможно довольно много и все они определяют функциональные возможности создаваемого плагина.
Кстати, на GitHub ONLYOFFICE, есть большой раздел с готовыми примерами плагинов самых разных направленностей, эти примеры могут существенно помочь в начале своей разработки.
Весь процесс создания и отладки тестового плагина описывать
не будем, так как особого практического смысла он пока не имеет и создан
исключительно для проверки гипотезы о применимости отечественного ПО для
решения описанной выше задачи. Отметим лишь, что создание его было несложным, и
заняло у малоопытного в вопросах JavaScript программиста пару дней.
Функционал простой. Есть некая облачная база данных, и в ней нам известна таблица,
из которой мы хотим получить определенное число записей, и в случае успеха все
эти записи нужно отобразить в таблице открытой в Р7. Вот как это выглядит на практике:
![](https://habrastorage.org/getpro/habr/upload_files/931/709/e10/931709e10f6cd96aea726d8b06c96e6d.png)
Сам запрос пока не редактируется, а просто формируется в теле функции запроса. Но можно выбрать тип ответа от ClickHouse (RAW – сырой, без форматирования, CSV – с разделением полей через запятую, и самый полезный и продвинутый – JSON, который позволяет помимо самого ответа с данными, получать и форматы ответа, и даже статистику по запросу). Также можно указывать и число запрашиваемых записей. Ну а внизу собственно кнопка «Запрос», по нажатию на которую, в случае успешного запроса, мы получаем заполненную таблицу:
![](https://habrastorage.org/getpro/habr/upload_files/75a/e58/2ba/75ae582ba3dc853449f748b026b8666f.png)
А в случае ошибки выводится пояснительная запись о ней в поле самого плагина:
![](https://habrastorage.org/getpro/habr/upload_files/b6e/834/b3f/b6e834b3f79e64730a18d01e25473ab8.png)
Какие выводы можно сделать из данного эксперимента? Прежде всего, что в первом приближении пакет Р7 вполне себе способен использоваться для решения достаточно серьёзных бизнес-задач, так как при тестировании он без проблем заполнял данные на всё количество записей, имевшихся в запрашиваемой таблице (16384 записи):
![](https://habrastorage.org/getpro/habr/upload_files/864/bb9/f20/864bb9f201cfcce554c23407b0c4467d.png)
И занял этот запрос с последующим заполнением около 1 минуты,
В том числе радует, что есть возможность интеграции плагина внутри формы самого окна. Есть возможность за счёт чудес современного JS делать формы с большим числом достаточно удобных элементов оформления (различные tab-вкладки, иерархические меню, встроенные таблицы и т.д.). Опять же, за счёт использования JS, есть возможность широко использовать современные фреймворки для решения разного рода аналитических задач с получаемыми данными, которые не предусмотрены в рамках самого офисного API, с последующей выдачей уже готовой аналитики в виде таблиц (в том числе и сводных), различных диаграмм и т.п, что вполне себе неплохо представлено в рамках самого пакета Р7.
Естественно, есть и минусы. Или, скорее, недочёты, которые вполне могут при желании исправить разработчики. Часть из них мы уже описали выше. К ним можно добавить ещё много предложений, но пока речь не о том. Главное – система Р7 вполне себе живая, а значит на ней можно решать достаточно серьезные бизнес задачи И для нас это означает, что фронт задач нашей команды расширяется и на отечественное офисное ПО.