1
0
mirror of https://github.com/salexdv/bsl_console.git synced 2024-11-19 17:32:02 +02:00
bsl_console/README.md
2024-06-28 14:23:56 +03:00

37 KiB

Консоль кода для 1С 8.3 (Управляемые и обычные формы)

Для работы внутри 1С требуется версия платформы не ниже 8.3.14.1565

Консоль кода

Как работает?

На основе Monaco editor

Основные возможности

  • Подсветка синтаксиса языка 1С
  • Подсветка языка запросов
  • Автокомплит для глобальных перечислений и функций
  • Автокомплит для метаданных (Справочники, Документы и т.п.)
  • Автокомплит для объектов метаданных (СправочникСсылка, ДокументОбъект и т.п.)
  • Подсказка параметров конструкторов и методов
  • Подсказка для типов
  • Вставка готовых блоков кода (сниппеты)
  • Вызов конструктора запроса и конструктора форматной строки
  • Загрузка пользовательских функций и сниппетов
  • Выделение строки, при выполнении которой произошла ошибка
  • Сворачивание циклов, условий и текстов запросов
  • Всплывающие подсказки для глобальных функций, перечислений и классов
  • Подсказки через точку для реквизитов типа справочники/документы
  • Подсказки через точку для объектов типа ТаблицаЗначений/Массив/РезультатЗапроса/ДвоичныеДанные и др., в том числе для объектов, полученных через методы других объектов.
  • Подсказки для источников и полей в режиме запроса

Публикации

Как запускать?

  1. Для запуска в браузере достаточно открыть index.html из каталога src, либо воспользоваться ссылкой
  2. Для запуска в 1С можно использовать обработку console.epf, выкладываемую в релизах или сделать свою.
  3. Редактор используется на сайте Paste1C.

Функции для взаимодействия с 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 Возвращает номер текущей колонки
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 Возвращает список различий в режиме сравнения

Управление режимом работы / настройками

Функция Описание
init Инициализация редактора с передачей версии платформы и имени пользователя
setLanguageMode Переключение режимов редактора (встроенный язык, язык запросов и т.п.)
setTheme Установка темы редактора bsl-white, bsl-white-query, bsl-dark, bsl-dark-query, bsl-edt-white, bsl-edt-dark
setReadOnly Устанавливает/снимает режим Только просмотр
getReadOnly Возвращает значение режима Только просмотр
switchLang Переключает язык подсказок с английского на русский и обратно
enableQuickSuggestions Включает/выключает режим быстрых подсказок
minimap Включает/выключает отображение карты кода
wordWrap Включает/выключает перенос строк
compare Включает/выключает режим сравнения текстов
getDiffCount Возвращает количество изменений в режиме сравнения
nextDiff Переход с следующему изменению в режиме сравнения
previousDiff Переход с предыдущему изменению в режиме сравнения
getVarsNames Возвращает имена всех объявленных в коде переменных
disableContextMenu Отключает показ контекстного меню
showLineNumbers Включает отображение номеров строк в редакторе
hideLineNumbers Отключает отображение номеров строк в редакторе
hideScrollX Скрывает стандартную горизонтальную полосу прокрутки
hideScrollY Скрывает стандартную вертикальную полосу прокрутки
openSearchWidget Открывает окно поиска
closeSearchWidget Закрывает окно поиска
nextMatch Переход к следующему совпадению в поиске
previousMatch Переход к предыдущему совпадению в поиске
setFontSize Установка размера шрифта
setFontFamily Установка семейства шрифтов
setFontWeight Установка насыщенности (толщины) шрифта
setLineHeight Установка высоты строки
setLetterSpacing Установка расстояния между символами
setDefaultStyle Установка стиля редактора по умолчанию
showStatusBar Включает отображение строки состояния в нижней части редактора
hideStatusBar Отключает отображение строки состояния
renderWhitespace Включает/отключает отображение пробелов и табуляций
hasTextFocus Возвращает признак активности фокуса
setOption Установка опциональных настроек редактора
getOption Получение опциональных настроек редактора
disableKeyBinding Отключает любое стандартное сочетание клавиш редактора
enableKeyBinding Включает обратно сочетание
saveViewState Возвращает JSON-строку с текущими настройками (положение курсора и прокрутки, а также свернутые блоки)
restoreViewState Восстанавливает настройки. В качестве аргумента принимает JSON-строку, полученную ранее через saveViewState
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 структуру метаданных (Справочники/Документы/пр.)
clearMetadata Очищает структуру метаданных
updateSnippets Обновляет пользовательские сниппеты
parseSnippets Загружает шаблоны кода (сниппеты) в формате 1С:Предприятия
updateSnippetByGUID Обновление текущего сниппета
setDefaultSnippets Возвращает стандартные шаблоны кода (сниппеты)
clearSnippets Очищает шаблоны кода (сниппеты)
updateCustomFunctions Обновляет пользовательские функции
parseCommonModule Загружает структуру общего модуля
parseMetadataModule Загружает структуру модуля менеджера или модуля объекта
showImmediateHover Показывает произвольную всплывающую подсказку
setCustomHovers Обновляет пользовательские подсказки, показываемые при наведении
setCustomSignatures Обновляет пользовательские подсказки по вызову процедуры/метода
setCustomCodeLenses Загружает подсказки для Code Lens
addContextMenuItem Регистрирует пользовательский пункт контекстного меню и связанное с ним событие
markError Индикация ошибки в указанной строке
triggerSuggestions Принудительный вызов подсказок
triggerHovers Принудительный вызов всплывающей подсказки для текущего слов
triggerSigHelp Принудительный вызов подсказки по вызову процедуры/метода
showCustomSuggestions Показ пользовательских подсказок
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 Удаляет цветовое выделение существующей строки отладки

События, генерируемые редактором для 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_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 При интерактивном удалении всех точек останова в редакторе

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

init('8.3.18.891');

Переключение режимов работы

По умолчанию редактор находится в режиме редактирования кода (bsl). Для переключения режимов работы редактора служит функция setLanguageMode Пример:

// Переключение в режим языка запросов
setLanguageMode('bsl_query');
// Переключение в режим языка СКД
setLanguageMode('dcs_query');
// Переключение в режим XML
setLanguageMode('xml');
// Переключение в режим встроенного языка
setLanguageMode('bsl');

Горячие клавиши

Все горячие клавиши описаны тут

Особенности

  • По умолчанию редактор не подстраивается под размеры окна. Это не ошибка, решение описано тут и тут

Продукты, использующие консоль

Проверенные платформы

  • 8.3.15.1830
  • 8.3.16.1148
  • 8.3.17.1386
  • 8.3.18.891
  • 8.3.20.1549

Известные проблемы

  • На платформах, выпущенных примерно до ноября 2020 года могут не работать горячие клавиши CTRL+SPACE, CTRL+C, CTRL+V и CTRL+Z и т.п.
  • В веб-клиенте недоступно любое взаимодействие редактора и 1С. Можно попробовать только набор кода. Иногда для этого в браузере надо предварительно открыть данную ссылку
  • В linux пока возможны проблемы с некоторым функционалом. Для сборки под linux необходимо использовать ветку webpack
  • Из-за особенностей реализации подсказка через точку для реквизитов ссылочного типа работает только тогда, когда подсказываемый реквизит выбран через Enter
  • В некоторых версиях платформы поле HTML некорректно работает с путями, содержащими кириллицу, поэтому обработка console.epf может выдавать ошибку Метод объекта не обнаружен (init). Решением в таком случае будет изменить в коде каталог хранения исходников на другой.

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

Выражаю благодарность команде 1c-syntax и их проекту для VSCode за подробное описание внутренних конструкций языка в JSON, а также за коллекцию сниппетов.