Консоль кода для 1С 8.3 (Управляемые и обычные формы)
Для работы внутри 1С требуется версия платформы не ниже 8.3.24 (обновлённый WebKit)
Для работы с платформами от 8.3.14.1565 до 8.3.23.2157 следует использовать архивные ветки:
- webpack_0_20 - ES-модули, с возможностью сборки в один файл (работает в linux)
- develop_0_20 - AMD-модули, набор файлов
Как работает?
На основе Monaco editor, версии 0.55.1
Основные возможности
- Подсветка синтаксиса языка 1С
- Подсветка языка запросов
- Автокомплит для глобальных перечислений и функций
- Автокомплит для метаданных (Справочники, Документы и т.п.)
- Автокомплит для объектов метаданных (СправочникСсылка, ДокументОбъект и т.п.)
- Подсказка параметров конструкторов и методов
- Подсказка для типов
- Вставка готовых блоков кода (сниппеты)
- Вызов конструктора запроса и конструктора форматной строки
- Загрузка пользовательских функций и сниппетов
- Выделение строки, при выполнении которой произошла ошибка
- Сворачивание циклов, условий и текстов запросов
- Всплывающие подсказки для глобальных функций, перечислений и классов
- Подсказки через точку для реквизитов типа справочники/документы
- Подсказки через точку для объектов типа ТаблицаЗначений/Массив/РезультатЗапроса/ДвоичныеДанные и др., в том числе для объектов, полученных через методы других объектов.
- Определение типа переменной по коду: конструктор
Новый, присваивание, результат метода или функции - Подсказка имён ключей структуры и колонок таблицы значений, заданных в коде
- Объявление типа комментарием в синтаксисе строгой типизации ЕДТ
- Подсказки для источников и полей в режиме запроса
Публикации
Сборка
##### Для разработки и сборки необходим установленный node.js.
##### Установка
npm install
##### Разработка и отладка с помощью встроенного сервера
npm run debug
Помимо самого редактора (http://localhost:9000/), dev-сервер сразу отдаёт страницы тестов:
http://localhost:9000/test.html (встроенный язык) и http://localhost:9000/test_query.html
(язык запросов).
##### Сборка финального файла ./dist/index.html
npm run build
##### Сборка single-file (один самодостаточный HTML для поля 1С 8.3.27+)
Собирает ./dist/index.html как единый самодостаточный файл без внешних ресурсов: JS, CSS,
шрифты, картинки, иконки дерева и воркер Monaco инлайнятся в сам HTML (data:/blob:). Это нужно,
чтобы загружать редактор в «Поле HTML документа» 1С как текст и обойти предупреждение безопасности
платформы 8.3.27+ «ПолеHTMLДокумента пытается открыть локальный файл» (оно возникает на любой
ресурс, читаемый с диска).
npm run build:single
После сборки в ./dist/ остаётся ровно один файл index.html. Проверить отсутствие внешних
ссылок можно отдельно:
npm run check:single
Обычная сборка (npm run build) при этом не меняется.
##### Сборка сжатого single-file (один самодостаточный HTML для поля 1С 8.3.27+ меньшего размера)
npm run build:pack
##### Опции сборки
По умолчанию штатный интерфейс Monaco (поиск, контекстные меню, панель inline-подсказок и другие виджеты) собирается на русском языке. Английские варианты основных команд:
npm run debug:en
npm run build:en
npm run build:single:en
npm run build:pack:en
То же значение можно передать webpack напрямую: --env monacoLocale=en. Поддерживаются только
ru и en; локаль фиксируется на время жизни HTML-документа. Функция switchLang переключает
язык программных подсказок BSL и не меняет штатный интерфейс Monaco.
Для передачи дополнительных опций, используемых при создании редактора, можно воспользоваться следующей командой:
npm run build -- --env customOptions="automaticLayout: true, someOption: false"
Опции подставляются в вызов editor.create() (маркер customOptions в src/editor.js). Значение —
через --env (webpack-cli 5+ не принимает произвольные флаги вроде --customOptions).
Как запускать?
- Собрать проект и открыть в браузере файл
./dist/index.html, либо воспользоваться ссылкой - Для запуска в 1С можно использовать обработку console.epf, выкладываемую в релизах или сделать свою.
- Редактор используется на сайте Paste1C.
- На платформе 8.3.27+ (с включённой «Защитой от опасных действий») собрать single-file
npm run build:single) и загрузить содержимое ./dist/index.html в «Поле HTML документа»
как текст — так платформа не выдаёт предупреждение об открытии локального файла.
Функции для взаимодействия с 1С:Предприятием
Работа с текстом (кодом)
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| setText | Устанавливает переданный текст в текущую или определенную позицию |
| updateText | Полностью заменяет весь текст редактора, игнорируя при этом режим Только просмотр |
| setContent | Устанавливает текст редактора. Игнорирует режим Только просмотр и не генерирует событие EVENT_CONTENT_CHANGED|
| getText | Возвращает весь текст из окна редактора |
| eraseText | Удаляет весь текст редактора |
| selectedText | Получает или заменяет выделенный текст |
| getSelection | Возвращает selection, аналог GetTextSelectionBounds|
| setSelectionByLength | Устанавливает выделение, аналог первой сигнатуры SetTextSelectionBounds |
| setSelection | Устанавливает выделение, аналог второй сигнатуры SetTextSelectionBounds |
| getLineCount | Возвращает количество строк |
| getLineContent | Возвращает содержимое строки по её номеру, аналог GetLine |
| setLineContent | Устанавливает содержимое строки по её номеру, аналог ReplaceLine |
| getCurrentLineContent | Возвращает содержимое текущей строки |
| getCurrentLine | Возвращает номер текущей строки |
| getCurrentColumn | Возвращает номер текущей колонки |
| getCurrentWord | Возвращает текущее слово и его позици |
| getModuleMethods | Возвращает JSON-описание процедур и функций модуля; список перехода открывается по CTRL+ALT+P |
| getQuery | Определяет текст запроса в текущей позиции и возвращает его вместе с областью текста |
| getFormatString | Определяет текст форматной строки в текущей позиции |
| findText | Возвращает номер строки, в которой находится заданный текст |
| addComment | Добавляет комментарий к текущему блоку кода |
| removeComment | Удаляет комментарий у текущего блока |
| addWordWrap | Добавляет перенос строки к текущему блоку |
| removeWordWrap | Удаляет перенос строки у текущего блока |
| insertLine | Вставляет текст в строку с указанным номером |
| addLine | Добавляет новую строку с указанным текстом |
| deleteLine | Удаляет строки с указанным номером |
| getPositionOffset | Возвращает координаты текущей позиции курсора |
| jumpToBracket | Переход к парной скобке CTRL+[] |
| selectToBracket | Выделяет скобки и текст между ними SHIFT+ALT+B |
| formatDocument | Форматирование выделенного фрагмента кода или всего кода ALT+SHIFT+F |
| insertSnippet | Вставляет переданный сниппет в текущую позицию редактора |
| revealDefinition | Переход к определению переменной, функции или поля запроса F12 |
| peekDefinition | Быстрый просмотр определения переменной, функции или поля запроса CTRL+F12 |
| getDifferences | Возвращает список различий в режиме сравнения |
| hideBlocks | Сворачивает переданные диапазоны строк в обычном редакторе |
| showHiddenBlocks | Раскрывает области, свернутые функцией hideBlocks |
Вкладки
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| createTab | Создаёт и выбирает новую независимую вкладку с редактором |
| closeCurrentTab | Закрывает текущую вкладку или очищает единственную вкладку |
| getCurrentTab | Возвращает название и нулевой индекс текущей вкладки |
Управление режимом работы / настройками
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| init | Инициализация редактора с передачей версии платформы и имени пользователя |
| setLanguageMode | Переключение режимов редактора (встроенный язык, язык запросов и т.п.) |
| setContextMode | Установка контекста редактора (сервер / тонкий клиент) |
| getContextMode | Получение текущего контекста редактора (сервер / тонкий клиент) |
| setTheme | Установка темы редактора bsl-white, bsl-white-query, bsl-dark, bsl-dark-query, bsl-edt-white, bsl-edt-dark|
| setReadOnly | Устанавливает/снимает режим Только просмотр |
| getReadOnly | Возвращает значение режима Только просмотр |
| switchLang| Переключает язык подсказок с английского на русский и обратно |
| enableQuickSuggestions | Включает/выключает режим быстрых подсказок |
| minimap | Включает/выключает отображение карты кода |
| wordWrap| Включает/выключает перенос строк |
| compare | Включает/выключает режим сравнения текстов |
| setDiffSideBySideMode | Включает/выключает двусторонее сравнение |
| hideUnchangedBlocks | Скрывает неизмененные блоки в режиме сравнения |
| showUnchangedBlocks | Показывает неизмененные блоки в режиме сравнения |
| getDiffCount | Возвращает количество изменений в режиме сравнения |
| nextDiff | Переход с следующему изменению в режиме сравнения |
| previousDiff | Переход с предыдущему изменению в режиме сравнения |
| getVarsNames | Возвращает имена всех объявленных в коде переменных |
| disableContextMenu | Отключает показ контекстного меню |
| showLineNumbers | Включает отображение номеров строк в редакторе |
| hideLineNumbers | Отключает отображение номеров строк в редакторе |
| hideScrollX | Скрывает стандартную горизонтальную полосу прокрутки |
| hideScrollY | Скрывает стандартную вертикальную полосу прокрутки |
| openSearchWidget | Открывает окно поиска |
| closeSearchWidget | Закрывает окно поиска |
| nextMatch | Переход к следующему совпадению в поиске |
| previousMatch | Переход к предыдущему совпадению в поиске |
| saveSearchHistory | Возвращает JSON-массив последних 10 строк поиска, от новой к старой |
| restoreSearchHistory | Восстанавливает историю из JSON-массива строк; возвращает true или описание ошибки |
| setFontSize | Установка размера шрифта |
| setFontFamily | Установка семейства шрифтов |
| setFontWeight | Установка насыщенности (толщины) шрифта |
| setLineHeight | Установка высоты строки |
| setLetterSpacing | Установка расстояния между символами |
| setDefaultStyle | Установка стиля редактора по умолчанию |
| showStatusBar | Включает отображение строки состояния в нижней части редактора |
| hideStatusBar | Отключает отображение строки состояния |
| renderWhitespace | Включает/отключает отображение пробелов и табуляций |
| hasTextFocus | Возвращает признак активности фокуса |
| setOption | Установка опциональных настроек редактора |
| getOption | Получение опциональных настроек редактора |
| disableKeyBinding | Отключает любое стандартное сочетание клавиш редактора |
| enableKeyBinding | Включает обратно сочетание |
| saveViewState | Возвращает JSON-строку с текущими настройками (положение курсора и прокрутки, а также свернутые блоки) |
| restoreViewState | Восстанавливает настройки. В качестве аргумента принимает JSON-строку, полученную ранее через saveViewState |
| parseHelp | Загружает Base64/Blob/File с shcntx, shlang, shquery или dcsui |
| getHelpState | Возвращает состояние справки: признак готовности ready и полное состояние сервиса |
| showHelp | Открывает справку текущего режима; с необязательной строкой поиска ищет, как CTRL+F1, только в готовом пакете |
| showHelpLoader | Показывает скрытую по умолчанию панель ручного выбора файлов справки |
| beginBase64Transfer | Начинает универсальную порционную передачу Base64 |
| pushBase64Chunk | Добавляет часть Base64 с произвольной границей |
| endBase64Transfer | Завершает передачу и публикует собранный Blob |
| setOriginalText | Устанавливает или сбрасывает оригинальный текст, на основании которого строится подсветка изменений |
| getOriginalText | Возвращает текст, установленный ранее функцией setOriginalText |
| getCurrentLanguageId | Возвращает идентификатор текущего языка (bsl, bsl_query, dcs_query, xml) |
| isQueryMode | Возвращает true, если редактор находится в режиме редактирования запроса и false в любом другом режиме |
| isDCSMode | Возвращает true, если редактор находится в режиме СКД и false в любом другом случае |
| isSuggestWidgetVisible | Возвращает видимость стандартного списка подсказок |
| isParameterHintsWidgetVisible| Возвращает видимость списка подсказок для параметров функции/метода |
| setDebugMode | Включает/выключает режим отладки (влияет на возможность использования команды "Вычислить выражение") |
| isDebugMode | Возвращает true, если редактор находится в режиме отладки и false в другом случае |
| setUsingDebugger | Включает/выключает возможность интерактивного управления точками останова |
| isUsingDebugger | Возвращает true, возможность интерактивного управления точками останова включена и false в другом случае |
Взаимодействие
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| updateMetadata | Обновляет через JSON структуру метаданных (Справочники/Документы/пр.) |
| setObjectContext | Задаёт контекст объекта (реквизиты/методы/ТЧ доступны как в модуле объекта) |
| clearObjectContext | Сбрасывает контекст объекта, заданный через setObjectContext |
| clearMetadata | Очищает структуру метаданных |
| clearBslGlobals | Очищает справочник глобальных объектов, сохраняя корневые разделы |
| filterBslGlobals | Оставляет или исключает выбранные объекты справочника глобальных объектов |
| updateSnippets | Обновляет пользовательские сниппеты |
| parseSnippets | Загружает шаблоны кода (сниппеты) в формате 1С:Предприятия |
| updateSnippetByGUID | Обновление текущего сниппета |
| setDefaultSnippets | Возвращает стандартные шаблоны кода (сниппеты) |
| clearSnippets | Очищает шаблоны кода (сниппеты) |
| updateCustomFunctions | Обновляет пользовательские функции |
| parseCommonModule | Загружает структуру общего модуля |
| parseMetadataModule | Загружает структуру модуля менеджера или модуля объекта |
| showImmediateHover | Показывает произвольную всплывающую подсказку |
| setCustomHovers | Обновляет пользовательские подсказки, показываемые при наведении |
| setCustomSignatures | Обновляет пользовательские подсказки по вызову процедуры/метода |
| setCustomCodeLenses | Загружает подсказки для Code Lens |
| addContextMenuItem | Регистрирует пользовательский пункт контекстного меню и связанное с ним событие |
| markError | Индикация ошибки в указанной строке |
| triggerSuggestions | Принудительный вызов подсказок |
| triggerHovers | Принудительный вызов всплывающей подсказки для текущего слов |
| triggerSigHelp | Принудительный вызов подсказки по вызову процедуры/метода |
| showCustomSuggestions | Показ пользовательских подсказок |
| showInlineSuggestion | Показ inline-подсказки в текущей позиции редактора |
| triggerInlineSuggestions | Явный запуск штатных inline-подсказок Monaco |
| resolveAIInlineCompletion | Передача результата AI inline-запроса из 1С |
| setInlayHints | Показ инлей-хинтов — текстовых подсказок в строках кода |
| clearInlayHints | Убирает все инлей-хинты текущей вкладки |
| setQueryParamsTooltips | Показ тултипов значений параметров запроса (&Параметр) в режимах запроса/СКД |
| setQueryDescription | Показ примечаний подзапросов у правого края строк в режимах запроса/СКД |
| showPreviousCustomSuggestions| Вывод списка пользовательских подсказок, ранее показанных через showCustomSuggestions |
| hideSuggestionsList | Скрывает текущий список подсказок |
| hideHoverList | Скрывает активную всплывающую подсказку для слова |
| hideSignatureList | Скрывает активную всплывающую подсказку по вызову процедуры/метода |
| addBookmark | Создание закладки в строке с указанным номером |
| removeBookmark | Удаление закладки из строки с указанным номером |
| goNextBookmark | Переход к следующей закладке |
| goPreviousBookmark | Переход к предыдущей закладке |
| getBookmarks | Возвращает массив с номерами строк, в которых установлены закладки |
| removeAllBookmarks | Удаляет все закладки |
| setMarkers | Задает маркеры выделения |
| getMarkers | Возвращает список установленных маркеров |
| goNextMarker | Переход к следующему маркеру |
| goPreviousMarker | Переход к предыдущему маркеру |
| setActiveSuggestLabel | Устанавливает заголовок активного пункта списка подсказок |
| setActiveSuggestDetail | Устанавливает подробное описание активного пункта списка подсказок |
| revealLineInCenter | Переход к строке по её номеру и позиционирование по центру экрана |
| goToFuncDefinition | Переход к определению процедуры/функции по имени |
| getLastToken | Возвращает токен (вид слова) текущей позиции |
| fold | Сворачиват текущий блок |
| unfold | Разворачивает текущий блок |
| foldAll | Сворачиват все блоки |
| unfoldAll | Разворачивает все блоки |
| showVariablesDescription | Вывод окна со значениями переменных (табло) |
| updateVariableDescription | Обновление значения переменной в табло |
| scale | Изменение масштаба (+1 - увеличить, -1 - уменьшить, 0 - сбросить) |
| gotoLine | Перейти к строке... |
| setActiveSuggestionAcceptors | Установка символов, подтверждающих выбор текущего пункта подсказки (в дополнение к Enter) |
| setLineNumbersDecorations) | Установка текста слева от номера каждой строки |
| startCodeReview | Активирует режим Code Review, в котором можно интерактивно добавлять замечания к коду |
| stopCodeReview | Отключает режим Code Review |
| getReviewIssues | Возвращает замечания, установленные в ходе Code Review |
| setReviewIssues | Устанавливает замечания в режиме Code Review |
| goNextIssue | Переход к следующему замечанию |
| goPreviousIssue | Переход к предыдущему замечанию |
| getBreakpoints | Возвращает сериализованный в JSON массив номеров строк точек останова |
| updateBreakpoints | Устанавливает/удаляет точку останова в строке по её номеру |
| removeAllBreakpoints | Удаляет все установленные точки останова |
| setCurrentDebugLine | Устанавливает цветовое выделение строки отладки по её номеру |
| deleteCurrentDebugLine | Удаляет цветовое выделение существующей строки отладки |
| showModuleMethods | Показывает список процедур и функций текущего модуля |
События, генерируемые редактором для 1С:Предприятия
| Событие | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| EVENT_QUERY_CONSTRUCT | При выборе пункта меню "Конструктор запросов". Возвращает текст и позицию запроса |
| EVENT_FORMAT_CONSTRUCT | При выборе пункта меню "Конструктор форматной строки". Возвращает текст и позицию форматное строки |
| EVENT_TYPE_CONSTRUCT | Генерируется при выборе шаблона кода ВыборТипа |
| EVENT_TYPEDESCRIPTION_CONSTRUCT | Генерируется при выборе шаблона кода КонструкторОписанияТипов |
| EVENT_CONTENT_CHANGED | При любом изменении содержимого редактора (подробнее) |
| EVENT_GET_METADATA | Генерируется при отсутствии метаданных. В параметрах передается имя запрашиваемых метаданных (подробнее) |
| EVENT_XXX | При выборе пользовательского пункта меню. addContextMenuItem('Мой пункт', 'EVENT_MY') |
| EVENT_ON_ACTIVATE_SUGGEST_ROW| При активации пункта в текущем списке подсказок (подробнее) |
| EVENT_ON_DETAIL_SUGGEST_ROW | При активации подробного описания пункта в текущем списке подсказок (подробнее) |
| EVENT_ON_SELECT_SUGGEST_ROW | При выборе пункта из списка подсказок (подробнее) |
| EVENT_BEFORE_SHOW_SUGGEST | Перед появлением списка подсказок (подробнее) |
| EVENT_BEFORE_HOVER | Перед появлением всплывающей подсказки для слова (подробнее) |
| EVENT_BEFORE_SIGNATURE | Перед появлением всплывающей подсказки по вызову процедуры/метода (подробнее) |
| EVENT_ON_LINK_CLICK | При клике по гиперссылке |
| EVENT_KEY_BINDING_ХХХ | При нажатии отключенного сочетания клавиш (подробнее) |
| EVENT_GET_DEFINITION | При переходе к определению (подробнее) |
| EVENT_ON_GET_HELP | Опционально при запросе справки по слову через CTRL+F1 |
| EVENT_ON_KEY_DOWN | При нажатии на клавиатуру (подробнее) |
| EVENT_ON_INSERT_SNIPPET | При вставке сниппета (шаблона) (подробнее) |
| EVENT_GET_VARIABLE_DATA | При расшифровке значения переменной в табло (подробнее) |
| EVENT_ON_KEY_ESC | При нажатии ESC (подробнее) |
| EVENT_EVALUATE_EXPRESSION | При выборе пункта меню "Вычислить выражение". Возвращает выделенный в редакторе текст |
| EVENT_UPDATE_BREAKPOINTS | При интерактивном добавлении/удалении точки останова в редакторе. Возвращает сериализованный в JSON массив номеров строк точек останова |
| EVENT_REMOVE_ALL_BREAKPOINTS | При интерактивном удалении всех точек останова в редакторе |
| EVENT_ON_HELP_READY | После успешной загрузки или замены пакетов shcntx/shquery/dcsui. Параметр {kind} |
| EVENT_ON_HELP_PREPARED | Ранний сигнал готовности справки (фаза prepared: оглавление и индекс заголовков готовы, полнотекстовая индексация ещё идёт). Параметр {kind} |
| EVENT_AI_INLINE_COMPLETION_REQUEST | Запрос AI inline-подсказки у 1С |
| EVENT_AI_INLINE_COMPLETION_CANCEL | Отмена ранее отправленного AI inline-запроса |
| EVENT_TAB_CHANGED | Изменилась текущая вкладка или её нулевой индекс. Параметр {title, index} |
Перед началом работы с редактором из 1С Предприятия желательно вызвать функцию инициализации и передать в нее текущую версию платформы. Пример:
init('8.3.27.2130');
Переключение режимов работы
По умолчанию редактор находится в режиме редактирования кода (bsl). Для переключения режимов работы редактора служит функция setLanguageMode
Пример:
// Переключение в режим языка запросов
setLanguageMode('bsl_query');
// Переключение в режим языка СКД
setLanguageMode('dcs_query');
// Переключение в режим XML
setLanguageMode('xml');
// Переключение в режим встроенного языка
setLanguageMode('bsl');
Справка выбирается по режиму: shcntx + shlang используются в bsl и xml, shquery — только
в bsl_query, dcsui — только в dcs_query.
Горячие клавиши
Все горячие клавиши описаны тут
Продукты, использующие консоль
- Infostart Toolkit
- OneDebugger
- Конвертация данных 3 расширение
- Контекстная подсказка в 1С КД3
- Подсистема "Инструменты разработчика"
- PowerTools
- Бустер Конвертации данных 3 (Infostart Toolkit)
- Редактор кода для КД 2
Проверенные платформы
- 8.3.27.1719
- 8.3.27.2130
Известные проблемы
- В веб-клиенте недоступно любое взаимодействие редактора и 1С. Можно попробовать только набор кода, отображение кода, вывод режима сравнения.
Благодарности
Выражаю благодарность команде 1c-syntax и их проекту для VSCode за подробное описание внутренних конструкций языка в JSON, а также за коллекцию сниппетов.
Благодарность @vandalsvq за перевод на версиюю 0.55