Занятие 1
Отличия разработки MS Excel от Р7-Офис
На занятии вы узнаете:
    Введение к курсу
    Основной целью курса является обучение базовым принципам прикладного программирования двух разных типов автоматизации процессов в офисном пакете Р7: макросов и плагинов. В рамках курса будут рассмотрены основные принципы написания макросов и плагинов, а также принципы переноса уже существующих программ VBA в Microsoft Office в Р7-Офис, с учетом различий в архитектуре и объектных моделей приложений и API офисных пакетов.
    Особенности разработки в MS Office (Excel)
    Базовым средством автоматизации в офисном пакете Microsoft Office, в течение длительного времени (С 1996 года по настоящее время) является скриптовый язык VBA (VisualBasic for Application). C 2007 года VBA не лицензируется для других разработчиков. Согласно статьи в Википедии , посвященной VBA, этот язык является неким упрощенным подмножеством языка VisualBasic.

    Рассмотрим некоторые особенности VBA, которые потом будут являться основой для средств автоматизации в Р7:
    • Хотя язык VBA и не является полноценным объектно-ориентированным, в его структуру разработчики внедрили «объектную модель» как самого приложения, так и структуры документа этого приложения. Пользователь прямо «из коробки» получает возможность с помощью скриптов влиять на состояние программы и активного документа.
    • Ещё одним огромным плюсом MS Office является возможность записи ручных действий пользователя (причем как действий с интерфейсом самой программы, так и действий с документом) в программный код VBA, который далее можно запустить, чтобы повторить последовательность действий. Это и есть изначальная идея макросов.
    • Возможность визуального построения средств графического интерфейса между пользователем и программным продуктом, за что VBA и получил в названии слово Visual (визуальный). Это позволяет построить сложные среды для работы пользователя, с развитой логикой работы, которая может включать в себя процессы, связанные с другими программными продуктами внутри офисного пакета.
    • Изначально VBA использует глубокую интеграцию с технологиями системной программной автоматизации Microsoft, такими как ActiveX, COM и OLE. Поскольку эти технологии лежат в основе самой объектной модели VBA, Microsoft Office и тех программных продуктов, где происходит интеграция VBA как языка автоматизации, внедрение этих технологий скрыто от конечного пользователя. Это упрощает работу с ними и расширяет возможности пользовательских форм макросов, позволяя внедрять готовые сторонние решения легким по сравнению со многими другими языками программирования способами.
    • VBA имеет встроенную возможность использовать системные или прикладные библиотеки (dll), тем самым давая возможность пользователю интегрировать заложенные в этих библиотеках функции в свои макросы, расширяя их возможности за счёт уже готовых API, как операционной системы Windows, так и любых других API, зарегистрированных в операционной системе.
    • Для построения сложных макросов или редактирования записанных, используется интегрированная в приложение среда разработки (IDE - Integrated Development Environment ). IDE устарела, но до сих пор предоставляет все необходимые базовые возможности по разработке и отладке.
    Помимо VBA, в более поздних версиях были добавлены средства автоматизации (в том числе и интегрированные) на других языках программирования(C++,C#), такие как VSTA (Visual Studio Tools for Applications). Добавлена поддержка построения макросов на языках Python. Помимо этого, появилась форма дополнительной функциональности офисных пакетов, называемая расширением (add-in) на языке JavaScript. Функциональность и принципы построения расширений выходят за рамки данного курса.

    Особенностью использования VBA в Microsoft Office является то, что макросы не могут использоваться отдельно, вне документов. Для своего использования макрос должен быть сохранён в составе документа, и для повторного использования он должен быть открыт в редакторе.

    Если требуется независимая от документов дополнительная функциональность, следует создавать расширение (add-in) и инсталлировать его с помощью средств офиса.
    Важно
    В рамках данного курса примеры создания макросов под Microsoft Office рассматриваться не будут!
    Особенности разработки в Р7-Офис
    В офисном пакете Р7 есть два типа встраиваемой автоматизации действий пользователя: макросы и плагины.

    Макросы - это скрипты автоматизации, интегрированные в документ и действующие только в рамках этого документа. Макросы в Р7, в отличие от MS Office, не могут записывать действия пользователя в скрипт с последующим воспроизведением таких действий. Для макросов используется встроенный в редактор плагин «макрос», который, хотя и ограничен по функциональности по сравнению с полноценными IDE, не требует отдельного внешнего редактора. В него интегрирован простейший отладчик, позволяющий ставить точки останова и просматривать значения некоторых из переменных при остановке, что полезно при разработке макросов.

    Плагины - это независимые от документов наборы файлов, упакованные как zip архив (с расширением .plugin) и инсталлированные в приложения. Плагины могут иметь отдельный интерфейс пользователя, построенный по технологии HTML, CSS и JavaScript. Для их создания можно использовать любой редактор программного кода, поддерживающий JavaScript, например, Microsoft Visual Studio Code. Отладка плагинов может производиться только при использовании ключа запуска приложения «--ascdesktop-support-debug-info». Это позволяет после запуска плагина через контекстное меню редактора вызывать DevTools, представляющую собой среду отладки Chromium, на базе которого построен интерфейс редакторов Р7.

    Процесс создания и отладки макросов и плагинов будет рассмотрен позже на соответствующих занятиях. Для создания своих средств автоматизации в редакторе Р7-Офис требуется базовое знание скриптового языка JavaScript, языка веб-разметки HTML и языка форматирования CSS. В рамках вводного курса будет рассмотрен JavaScript в минимальном объеме. Языки HTML и CSS придется изучить самостоятельно.

    API для работы с приложением и документами предоставлено в ограниченном объёме, не все возможности доступные пользователю при работе с редактором и документами доступны для автоматизации в плагинах и макросах. В связи с особенностью архитектуры самого редактора очень ограничены возможности по взаимодействию между плагином и операционной системой. Например, нельзя штатными способами сохранить данные в произвольный файл на жесткий диск или организовать взаимодействие между плагином и внешними программами без использования квази-прокси серверов. Все подобные ограничения будут рассмотрены на соответствующих занятиях.
    Основные различия разработки MS Office от Р7-Офис
    Основные различия в разработке средств автоматизации в MS Office от Р7-Офис состоят в следующем:
    Как видно из этой таблицы, в силу ограничений как самой архитектуры приложений Р7, так и реализации его API на текущий момент, перенос макросов для ряда задач, созданных в MS Office, в Р7 не представляется возможным без привлечения внешних серверных расширений. Это может привести к частичному использованию всего накопленного опыта автоматизации в VBA.

    Различия между языками программирования (VBA и JavaScript) потребуют наличия специалистов, хорошо разбирающихся в особенностях программирования макросов на VBA в MS Office и JavaScript в Р7-Офис при переходе между офисными пакетами. Тем не менее, для большинства задач такой процесс возможен, хотя и с указанными выше оговорками и ограничениями. Примеры таких переходов будут рассмотрены на последующих занятиях.