Skip to content

Segate-ekb/code_editor

Repository files navigation

Подключаемая консоль кода 1С

Что это

Набор модулей 1С для встраивания редактора кода в управляемые формы. Построен на основе проекта bsl_console — редактора BSL-кода на базе Monaco Editor (движок VS Code).

Проект bsl_console предоставляет JavaScript-слой: подсветку синтаксиса BSL, автодополнение глобальных функций платформы, сниппеты, работу с запросами. Данный проект добавляет поверх него серверную обвязку на 1С — подключение к форме, загрузку метаданных конфигурации, пользовательские настройки, выполнение кода и инспекцию переменных.

Зачем нужна

Штатное поле ввода текста в 1С не предназначено для работы с кодом — нет подсветки, нет автодополнения, нет навигации. BSL Console решает эту задачу:

  • Консоли кода — выполнение произвольного BSL-кода прямо из формы (отладка, администрирование, быстрые скрипты)
  • Редакторы запросов — написание запросов 1С и выражений СКД с подсветкой и автодополнением
  • Просмотр/редактирование текстов — JSON, XML, YAML с подсветкой синтаксиса
  • Встроенные IDE-инструменты — любой сценарий, где пользователю нужно писать или читать код внутри 1С

Как работает

┌─────────────────────────────────────────┐ │ Управляемая форма │ │ ┌───────────────────────────────────┐ │ │ │ ПолеHTML (Monaco Editor) │ │ │ │ подсветка, автодополнение, │ │ │ │ сниппеты, закладки, diff... │ │ │ └──────────────┬────────────────────┘ │ │ │ события (JS → 1C) │ │ ┌──────────────▼────────────────────┐ │ │ │ Общие модули 1С (5 штук) │ │ │ │ • Клиент — мост к JS-редактору │ │ │ │ • Сервер — настройки, метаданные │ │ │ │ • ВызовСервера — прокси │ │ │ │ • КлиентСервер — утилиты │ │ │ │ • ПовтИсп — кэширование │ │ │ └───────────────────────────────────┘ │ └─────────────────────────────────────────┘ 

Исходники Monaco Editor хранятся в общем макете конс_КонсольКода (ZIP). При открытии формы они распаковываются во временный каталог и загружаются в ПолеHTML. Вся коммуникация между 1С и редактором идёт через JavaScript-вызовы и события.

Настройки пользователя (тема, шрифт, миникарта) хранятся в ХранилищеОбщихНастроек и применяются автоматически. При необходимости их можно переопределить для конкретной формы.

Быстрый пример

На форме создайте элемент ПолеHTML с именем HTML. Назначьте ему события ДокументСформирован и ПриНажатии. Вставьте код модуля формы:

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	конс_ПодключаемаяКонсольСервер.ИнициализироватьРедактор(ЭтотОбъект, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ)	конс_ПодключаемаяКонсольКлиент.ПодключитьРедактор(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура HTMLДокументСформирован(Элемент)	конс_ПодключаемаяКонсольКлиент.ОбработчикДокументСформирован(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура HTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)	конс_ПодключаемаяКонсольКлиент.ОбработчикПриНажатии(ЭтаФорма, ДанныеСобытия); КонецПроцедуры

4 вызова — и на форме полноценный редактор кода с автодополнением по метаданным конфигурации.

Возможности

  • Подключение в 4 строки — добавьте редактор на любую управляемую форму минимальным кодом
  • Автодополнение метаданных — подсказки по справочникам, документам, регистрам, перечислениям и общим модулям
  • Пользовательский контекст — свои переменные, функции и сниппеты в автодополнении
  • Выполнение кода — встроенное выполнение BSL-кода на сервере с отображением переменных
  • Инлайнинг процедур и функций — выполнение кода с определениями Процедура/Функция через автоматическое преобразование в плоский код
  • Мультиязычность — режимы BSL, Запрос 1С, СКД, JSON, XML, YAML

Документация

Раздел Описание
Быстрый старт Подключение редактора к форме за 4 шага
Архитектура Модули, JS-слой, поток данных
Настройки Все настройки, переопределение, темы, режимы языка
Примеры Готовые примеры кода для типовых сценариев
API: BSL-модули Серверный и клиентский API (1С)
API: JavaScript 130+ JS-функций Monaco-редактора

Благодарности

  • bsl_console — JavaScript-редактор BSL-кода на базе Monaco Editor. Автор — @salexdv. Весь JS-слой (подсветка синтаксиса, автодополнение, сниппеты, работа с запросами и СКД) взят из этого проекта.
  • OneDebugger — расширение для 1С:Предприятие, реализующее компилятор BSL-кода (лексер + парсер + генератор байткода), стековую виртуальную машину и отладчик с точками останова. Архитектурные идеи и подходы OneDebugger послужили отправной точкой при разработке встроенного интерпретатора BSL-кода в данном проекте.
  • lezer-bsl — грамматика и парсер BSL на основе Lezer. Автор — @alkoleft. Используется для построения синтаксического дерева BSL-кода с поддержкой инкрементального парсинга.
  • Monaco Editor — редактор кода от Microsoft, лежащий в основе VS Code.

About

Набор модулей 1С для встраивания редактора кода (Monaco Editor) в управляемые формы

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors