Skip to content
Pr-MexPublic

About

Visual Studio Code in 1C:Enterprise

Topics

Resources

Stars

64 stars

Watchers

13 watching

Forks

Repository files navigation

Vanessa Automation Editor

Редактор сценариев, созданный с помощью Monaco и поддерживающий взаимодействие с платформой 1C:Предприятие 8.3.14+ (рекомендуется 8.3.18+).

Собрано для Vanessa Automation.

Лицензия — BSD 3-Clause, см. LICENSE.

Состав репозитория

  • src/ — исходники редактора: интеграция с Monaco, провайдер и воркер Gherkin, оформление, публичный API;
  • test/ — тесты (mocha) и демо-примеры сценариев;
  • example/ — внешние обработки-примеры, которые встраивают редактор;
  • tools/ — сборка и проверки: скрипты oscript, плагины и загрузчики webpack, локальный прогон;
  • config/ — тестовая конфигурация 1С для автотестов.

Для npm run compile и npm run decompile дополнительно нужен OneScript (команда oscript в PATH).

Сборка

Требуется Node.js 20+ (см. engines в package.json). Зависимости ставятся по lock-файлу:

npm ci

Для запуска отладки в браузере (на встроенном сервере для разработки) выполните команду

npm run demo

Для сборки финального файла ./dist/index.html, встраиваемого в проект выполните команду

npm run build

Кроме редактора есть страница автотестов dist/test.html (mocha + демо-примеры). Она нужна только для прогона тестов, поэтому в обычную сборку не входит — собирается отдельно:

npm run build:test

Быстрый прогон без 1С — сборка и headless-браузер, результат в консоль:

npm run test:headless

Полный локальный прогон (сборка, упаковка макетов, чистая база, сборка epf, автотест) — тот же сценарий, что выполняет CI:

check.cmd

Скрипт сам находит установленную платформу; другой каталог с 1cv8.exe передаётся вторым аргументом: check.cmd autotest "<каталог платформы>". Напрямую то же делает tools/local-check.ps1 (первым параметром — каталог платформы). Успех — файл success.txt в корне проекта. Скрипт сам закрывает зависшие процессы 1С, создаёт базу с уникальным именем и показывает логи Конфигуратора.

Автотест запускается клиентом 1С с внешней обработкой (/Execute <путь к epf> и /C autotest). Платформа перед этим показывает диалог «Разрешить открывать данный файл?», и неинтерактивный прогон (в том числе в CI) висит на нём до таймаута. В CI предупреждение снимается настройкой платформы; при локальном прогоне tools/local-check.ps1 подтверждает диалог сам через UI Automation — но только при активной сессии Windows: ввод в заблокированный рабочий стол недоступен.

dist/index.html получается самодостаточным: скрипты, стили и бандлы воркеров (Gherkin и четыре монко́вских) встроены внутрь страницы, внешних файлов нет. Это требование движков, встраиваемых в 1С: страница открывается по file://, а ресурсы по этому протоколу не загружаются. Асинхронные чанки (ленивые import() из monaco) тоже встраиваются в страницу и исполняются до основного бандла, поэтому файлов чанков в dist не остаётся.

Продакшн-сборка проверяется на совместимость с движком, встроенным в 1С: бандл разбирается парсером как ES2020, отдельно запрещены ?? и ?., плюс проверяется отсутствие не-ASCII символов в коде. Если что-то не так, сборка падает с указанием места. Проверка живёт в tools/plugins/checkRuntimeCompat.js.

Ошибки времени выполнения дублируются красным баннером внизу страницы (src/error-reporting.ts): консоль встроенного движка пользователю недоступна, а пустое место вместо редактора ничего не объясняет.

Оформление подстраивается под интерфейс платформы: в новом интерфейсе 1С передаёт в страницу палитру цветов и класс темы, редактор определяет по ним вариант интерфейса и тему (src/ui-interface.ts) и ставит data-interface и data-theme на body. Скин «Версия 8.5» в src/media/tabs.css берёт цвета из палитры платформы, поэтому светлая и тёмная темы переключаются сами, без участия редактора. Для отладки в браузере и для обработок, которые решают это сами, параметры URL interface=taxi|85 и theme=light|dark имеют приоритет. Без палитры и без параметров остаётся историческое оформление «Такси»: его цвета заданы литералами, потому что старый движок не понимает CSS-переменные. Тёмная тема «Такси» платформой не поддерживается — она включается только вручную через EditorTheme.

Версия сборки доступна из страницы (window.VAEditorVersion) и лежит рядом с ней в dist/version.json, который пакуется в макет редактора вместе с index.html. Обработка, встраивающая редактор, читает её из архива шаблона и использует как ключ кеша распакованных файлов — держать версию константой в своём коде ей больше не нужно. В CI значение берётся из version.json (там ещё и номер сборки), локально — из package.json.

Для сборки примера внешней обработки из исходников в epf файл (необходим oscrip) выполните команду

npm run compile

Для разборки примера внешней обработки из epf в исходники (необходим oscript) выполните команду

npm run decompile

Для запуска статанализа проверки стиля кода

npm run codestyle

Как использовать в своем проекте

Доступны три режима работы:

  • Простой редактор кода в одном окне
  • Редактор для сравнение двух файлов
  • Многооконный интерфейс с вкладками

По умолчанию открывается пустая страница без редакторов. Для начала работы при помощи глобального метода необходимо создать экземпляр объекта, соответствующий выбранному режиму.

Смотрите пример использования во внешней обработке Example.

API

Полный машиночитаемый контракт публичного API с JSDoc для каждого метода — в src/types/public-api.d.ts. TS/JS-интеграторы получают autocomplete и проверку типов в IDE автоматически.

Глобальные свойства

VanessaGherkinProvider - экземпляр класса, реализующего поддержку языка Gherkin и обеспечивающий его конфигурирование.

VanessaEditor - экземпляр редактора, если используется модель одного окна.

VanessaDiffEditor - экземпляр редактора для сравнения двух файлов, если используется модель одного окна.

VanessaTabs - объект для управления множеством редакторов, с вкладками для переключения между ними.

Глобальные методы

createVanessaTabs() - создать многооконный интерфейс для управления множеством редакторов.

createVanessaEditor(content, language) - создать простой редактор с одним окном для редактирования кода.

createVanessaDiffEditor(original, modified, language) - создать простой редактор для сравнения двух файлов.

Действия (Actions)

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

  • setTheme(theme) — установить тему (vs, vs-dark, hc-black)
  • setContent(text) — загрузить контент в модель редактора
  • getContent() — получить текст из модели
  • revealLine(lineNumber) — прокрутить редактор до строки

Полный список (53 метода с JSDoc-описанием) — в public-api.d.ts → интерфейс IPublicVanessaEditor.

Пример:

view = Items.VanessaEditor.Document.defaultView;
VanessaEditor = view.createVanessaEditor("", "turbo-gherkin");

VanessaEditor.setContent("Text to edit");

Посмотреть все доступные действия можно в списке действий в Example.

События (Events)

Редактор отправляет события, которые могут быть обработаны на стороне 1С:Предприятия. Примеры:

  • UPDATE_BREAKPOINTS — обновлено состояние брейкпоинтов
  • ON_HREF_CLICK — клик по ссылке

Полный enum (9 встроенных событий) — в public-api.d.ts → VanessaEditorEventName. Дополнительно можно регистрировать кастомные события через VanessaEditor.addCommands.

Пример:

Function VanessaEditorOnReceiveEventHandler(Event, Arg)

  If Event = "UPDATE_BREAKPOINTS" Then
    UpdateBreakpoints(Arg);
  EndIf;

EndFunction

Отслеживать события можно в логе событий в Example.

Примеры

Json

В большинстве случаев обмен редактора и 1С:Предприятия осуществляется с помощью сообщений в json формате. Для быстрой сериализации и десериализации объектов 1С:Предприятия в json формат Вы можете воспользоваться функциями:

&AtClient
Function JsonDump(Value)

	JSONWriter = New JSONWriter;
	JSONWriter.SetString();
	WriteJSON(JSONWriter, Value);
	Return JSONWriter.Close();

EndFunction

&AtClient
Function JsonLoad(Json)

	JSONReader = New JSONReader;
	JSONReader.SetString(Json);
	Value = ReadJSON(JSONReader);
	JSONReader.Close();
	Return Value;

EndFunction

Правила сворачивания строк

  1. Ключевые слова верхнего уровня делят файл на секции и сворачиваются сами по себе, независимо от наличия отступов.
  2. Комментарии которые идут подряд сворачиваются к первой строке комментариев тоже независимо от отступов. Пустая строка прерывает группу комментариев.
  3. Параметры шага, строки начинающиеся с символа "|" сворачиваются к своей строке шага. Если внутри комментарии, то они сворачиваются независимо, сами в себя.
  4. Инструкции, которые начинаются с собаки "@", группируются внутри себя.
  5. Всё остальное сворачивается внутри секций по числу пробелов и табуляторов.

About

Visual Studio Code in 1C:Enterprise

Topics

Resources

Stars

64 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages