2020-07-16 20:43:33 +02:00
# Консоль кода для 1С 8.3 (Управляемые и обычные формы)
Для работы внутри 1С требуется версия платформы не ниже **8.3.14.1565**
![](https://github.com/salexdv/git_images/blob/master/bslconsole_view.png?raw=true)
## Как работает?
На основе [Monaco editor ](https://github.com/Microsoft/monaco-editor )
## Основные возможности:
* Подсветка синтаксиса языка 1С
2020-08-07 09:47:07 +02:00
* Подсветка языка запросов
2020-07-16 20:43:33 +02:00
* Автокомплит для глобальных перечислений и функций
* Автокомплит для метаданных (Справочники, Документы и т.п.)
* Автокомплит для объектов метаданных (СправочникСсылка, ДокументОбъект и т.п.)
* Подсказка параметров конструкторов и методов
2020-07-29 19:19:03 +02:00
* Подсказка для типов
2020-07-16 20:43:33 +02:00
* Вставка готовых блоков кода (сниппеты)
2020-07-29 19:19:03 +02:00
* Вызов конструктора запроса и конструктора форматной строки
* Загрузка пользовательских функций и сниппетов
* Выделение строки, при выполнении которой произошла ошибка
* Сворачивание циклов, условий и текстов запросов
* Всплывающие подсказки для глобальных функций, перечислений и классов
2020-07-31 10:05:35 +02:00
* Подсказки через точку для реквизитов типа справочники/документы
2020-08-06 09:52:46 +02:00
* Подсказки через точку для объектов типа ТаблицаЗначений/Массив/РезультатЗапроса/ДвоичныеДанные и др., в том числе для объектов, полученных через методы других объектов.
2020-12-19 13:50:47 +02:00
* Подсказки для источников и полей в режиме запроса
2020-07-16 20:43:33 +02:00
2020-07-17 11:10:21 +02:00
## Как запускать?
2020-07-29 19:19:03 +02:00
1. Для запуска в браузере достаточно открыть **index.html** из каталога **src** , либо воспользоваться [ссылкой ](https://salexdv.github.io/bsl_console/src/index.html )
2. Для запуска в 1С можно использовать обработку **console.epf** , выкладываемую в [релизах ](https://github.com/salexdv/bsl_console/releases ) или сделать свою.
2020-08-21 14:08:36 +02:00
3. Редактор используется на сайте [Paste1C ](https://paste1c.ru/ ).
2020-07-29 19:19:03 +02:00
2020-08-06 09:52:46 +02:00
## Функции для взаимодействия с 1С:Предприятием
2020-12-19 13:50:47 +02:00
### Работа с текстом (кодом)
2020-08-06 09:52:46 +02:00
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| `setText` | Устанавливает переданный текст в текущую или определенную позицию |
2020-09-27 13:18:37 +02:00
| `updateText` | Полностью заменяет весь текст редактора, игнорируя при этом режим *Только просмотр* |
2020-08-06 09:52:46 +02:00
| `getText` | Возвращает весь текст из окна редактора |
| `eraseText` | Удаляет весь текст редактора |
2020-12-30 12:53:17 +02:00
| `selectedText(text)` | Функция без параметров возвращает выделенный текст, с параметром - устанавливает |
| `getSelection` | Возвращает [selection ](https://microsoft.github.io/monaco-editor/api/classes/monaco.selection.html ), аналог GetTextSelectionBounds|
| `setSelectionByLength` | Устанавливает выделение, аналог первой сигнатуры SetTextSelectionBounds |
| `setSelection` | Устанавливает выделение, аналог второй сигнатуры SetTextSelectionBounds |
| `getLineCount` | Возвращает количество строк |
| `getLineContent` | Возвращает содержимое строки по её номеру, аналог GetLine |
| `setLineContent` | Устанавливает содержимое строки по её номеру, аналог ReplaceLine |
| `getCurrentLineContent` | Возвращает содержимое текущей строки |
| `getCurrentLine` | Возвращает номер текущей строки |
| `getCurrentColumn` | Возвращает номер текущей колонки |
2020-12-19 13:50:47 +02:00
| `setLineContent` | устанавливает содержимое строки по её номеру, аналог ReplaceLine |
2020-08-06 09:52:46 +02:00
| `getQuery` | Определяет текст запроса в текущей позиции и возвращает его вместе с областью текста |
| `getFormatString` | Определяет текст форматной строки в текущей позиции |
2020-12-19 13:50:47 +02:00
| `findText` | Возвращает номер строки, в которой находится заданный текст |
| `addComment` | Добавляет комментарий к текущему блоку кода |
| `removeComment` | Удаляет комментарий у текущего блока |
2020-12-30 13:06:32 +02:00
| `addWordWrap` | Добавляет перенос строки к текущему блоку |
| `removeWordWrap` | Удаляет перенос строки у текущего блока |
2020-12-19 13:50:47 +02:00
### Управление режимом работы / настройками
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| `init` | Инициализация редактора с передачей версии платформы |
2020-08-07 09:47:07 +02:00
| `setTheme` | Установка темы редактора `bsl-white` , `bsl-white-query` , `bsl-dark` , `bsl-dark-query` |
2020-08-06 09:52:46 +02:00
| `setReadOnly` | Устанавливает/снимает режим *Только просмотр* |
| `switchLang` | Переключает язык подсказок с английского на русский и обратно |
| `enableQuickSuggestions` | Включает/выключает режим быстрых подсказок |
2020-08-07 09:47:07 +02:00
| `minimap` | Включает/выключает отображение карты кода |
2020-12-23 21:15:40 +02:00
| [`enableModificationEvent` ](docs/modification_event.md ) | Включает/выключает генерацию события, возникающего при изменении содержимого редактора|
2020-12-30 19:37:28 +02:00
| [`switchQueryMode` ](docs/switch_query.md ) | Переключение между режимом запроса и режимом редактирования кода |
2020-12-19 22:22:32 +02:00
| [`compare` ](docs/compare.md ) | Включает/выключает режим сравнения текстов |
2020-12-31 19:55:23 +02:00
| `nextDiff` | Переход с следующему изменению в режиме сравнения |
| `previousDiff` | Переход с предыдущему изменению в режиме сравнения |
2020-12-20 06:27:44 +02:00
| `getVarsNames` | Возвращает имена всех объявленных в коде переменных |
2020-12-30 19:37:28 +02:00
| `switchXMLMode` | Переключение в режим просмотра XML с подсветкой и обратно |
2021-02-18 18:07:23 +02:00
| `disableContextMenu` | Отключает показ контекстного меню |
| `hideLineNumbers` | Скрывает отображение номеров строк в редакторе |
2021-03-07 13:10:50 +02:00
| `hideScrollX` | Скрывает стандартную горизонтальную полосу прокрутки |
| `hideScrollY` | Скрывает стандартную вертикальную полосу прокрутки |
2020-09-27 13:49:16 +02:00
2020-12-19 13:50:47 +02:00
### Взаимодействие
| Функция | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
2020-12-19 20:59:55 +02:00
| `updateMetadata` | Обновляет через JSON структуру метаданных (Справочники/Документы/пр.) |
2021-02-23 08:46:55 +02:00
| `clearMetadata` | Очищает структуру метаданных |
2020-12-19 20:59:55 +02:00
| `updateSnippets` | Обновляет пользовательские сниппеты |
| `updateCustomFunctions` | Обновляет пользовательские функции |
2020-12-30 09:39:20 +02:00
| `setCustomHovers ` | Обновляет пользовательские подсказки, показываемые при наведении |
2020-12-23 21:15:40 +02:00
| [`addContextMenuItem` ](docs/add_menu.md ) | Регистрирует пользовательский пункт контекстного меню и связанное с ним событие |
2020-12-19 13:50:47 +02:00
| `markError` | Индикация ошибки в указанной строке |
2020-12-30 08:35:21 +02:00
| [`triggerSuggestions` ](docs/trigger_suggestions.md ) | Принудительный вызов подсказок |
2020-12-30 09:39:20 +02:00
| [`showCustomSuggestions` ](docs/custom_suggestions.md ) | Показ пользовательских подсказок |
2020-12-19 13:50:47 +02:00
2020-09-27 13:49:16 +02:00
## События, генерируемые редактором для 1С:Предприятия
| Событие | Описание |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| `EVENT_QUERY_CONSTRUCT` | При выборе пункта меню "Конструктор запросов". Возвращает текст и позицию запроса |
| `EVENT_FORMAT_CONSTRUCT` | При выборе пункта меню "Конструктор форматной строки". Возвращает текст и позицию фор.строки |
| `EVENT_CONTENT_CHANGED` | При любом изменении содержимого редактора. Вкл/откл через *enableModificationEvent* |
2020-12-30 08:35:21 +02:00
| `EVENT_GET_METADATA` | Генерируется при отсутствии метаданных. В параметрах передается имя запрашиваемых метаданных |
2020-09-27 13:49:16 +02:00
| `EVENT_XXX` | При выборе пользовательского пункта меню. *addContextMenuItem('Мой пункт', 'EVENT_MY')* |
2020-12-19 13:50:47 +02:00
*Перед началом работы с редактором из 1С Предпрития желательно вызвать функцию инициализации и передать в нее текущую версию платформы.*
Пример:
```javascript
init('8.3.18.891');
```
## Продукты, использующие консоль:
* [Infostart Toolkit ](https://infostart.ru/journal/news/news/infostart-toolkit-1-3-teper-s-novym-redaktorom-koda-na-baze-monaco-editor_1303095/ )
* [Конвертация данных 3 расширение ](https://infostart.ru/public/1289837/ )
2020-12-20 06:27:44 +02:00
* [Контекстная подсказка в 1С КД3 ](https://github.com/GenVP/TipsInCD3 )
2020-08-06 09:52:46 +02:00
2020-07-29 19:19:03 +02:00
## Проверенные платформы:
* 8.3.15.1830
* 8.3.16.1148
* 8.3.17.1386
2020-08-06 09:52:46 +02:00
* 8.3.18.891
2020-07-29 19:19:03 +02:00
## Известные проблемы:
* На платформах до 8.3.16 могут не работать горячие клавиши CTRL+C, CTRL+V и CTRL+Z и т.п.
2020-08-06 09:52:46 +02:00
* На платформах до 8.3.18 команды копировать/вставить работают только в пределах окна редактора
2020-07-29 19:19:03 +02:00
* В веб-клиенте недоступно любое взаимодействие редактора и 1С. Можно попробовать только набор кода. Иногда для этого в браузере надо предварительно открыть данную [ссылку ](https://salexdv.github.io/bsl_console/src/index.html )
* Работа в linux на данный момент не поддерживается.
2020-07-31 10:05:35 +02:00
* Из-за особенностей реализации подсказка через точку для реквизитов ссылочного типа работает только тогда, когда подсказываемый реквизит выбран через Enter
2020-07-17 09:58:04 +02:00
2020-07-16 20:43:33 +02:00
## Благодарности
2020-12-19 13:50:47 +02:00
Выражаю благодарность команде [1c-syntax ](https://github.com/1c-syntax ) и их [проекту для VSCode ](https://github.com/1c-syntax/vsc-language-1c-bsl ) за подробное описание внутренних конструкций языка в JSON, а также за коллекцию сниппетов.