Набор модулей 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.