Подсистема "Контекстная подсказка" для 1С:Предприятие 8.2

##### Общая информация

Иногда удобно хранить фрагменты программы непосредственно в БД. Это касается как внутреннего языка, так и языка запросов. Однако редактировать программу в режиме предприятия довольно сложно из-за отсутствия контекстной подсказки и справки. Если для языка запросов это компенсируется наличием конструктора (при использовании которого вы лишаетесь драгоценных комментариев в тексте запроса), то для внутреннего языка никаких средств не предусмотрено. Данная внутренняя компонента предназначена для поднятия эффективности работы с программным текстом в режиме предприятия.

Основное предназначение - быстрый выбор слова исходя из вычисляемого контекста. Поддерживается режим внутреннего языка и режим языка запросов. Принцип работы основан на безопасном вычислении типа и сборе статистики обращения к свойствам и методам объекта. В рамках безопасного вычисления типа реализована хорошая поддержка метаданных. Используется упрощенный анализ синтаксиса языков, который однако позволяет в подавляющем большинстве случаев правильно выполнять заявленные функции.

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

- вычисление предопределенных свойств и методов
- вычисление свойств, определяемых метаданными
- вычисление расширений форм и элементов управления (требуется специальная передача метаданных)
- подсказка в специальных случаях: языка запросов - <ССЫЛКА >, <ЗНАЧЕНИЕ(>; внутреннего языка - <Тип(">, <Новый >, <Новый(" >, <Новый ОписаниеТипов(">
- отображение адекватной информации об ошибке и подсветка ошибочной строки текста
- переход к последнему определению идентификатора в тексте
- отображение контекстной справки по слову и по параметру метода
- поддержка программного указания свойств локального контекста
- поддержка указания типа в комментариях (//: Таб=Новый Таблица;)

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

- в режиме языка запросов не производится анализ разграничения между вложенными запросами

##### Поле текстового документа текста программы

При подключении компоненты к полю текстового документа на рядом расположенной командной панели обычно будут присутствовать следующие команды:

- язык запросов - Удалить переносы
- внутренний язык - Выполнить, Редактор строкового литерала
- общие - Конструктор, Синтаксический контроль, Выполнить шаблон, Перейти к определению, Контекстная справка, Подсказать параметр, Контекстная подсказка, Заменить неначальные табуляции пробелами, Настройка компоненты.

Описание команд:

- Команда "Конструктор" - CTRL+W - вызывает конструктор запросов и в случае языка запросов передает ему выделенный или весь текст, а в случае внутреннего языка передает ему весь строковый литерал, внутри которого находится курсор.
- Команда "УдалитьПереносы" - CTRL+ALT+D - удаляет переносы строк из текста запроса.
- Команда "Выполнить" - CTRL+R - исполняет программу.
- Команда "Редактор строкового литерала" - CTRL+SHIFT+E - вызывает редактор строкового литерала, в котором находится курсор.
- Команда "Синтаксический контроль" - CTRL+F7 выполняет проверку синтаксиса текста запроса или программного кода. В случае обнаружения ошибки в окно сообщений будет выведено описание ошибки с указанием номера строки. Ошибочная строка будет выделена. Команда "Перейти к определению" - F12 - переходит к определению идентификатора в тексте. В режиме языка запросов корректное определение пока будет указываться только для таблиц.
- Команда "Выполнить шаблон" - SHIFT+SPACE - выполняет шаблон (слово непосредственно слева от курсора).
- Команда "Контекстная справка" - CTRL+F1 - открывает справку на выбор по роли или типу текущего слова.
- Команда "Подсказать параметр" - CTRL+F2 - открывает справку по текущему параметру метода. Определяется последний открытый вызов метода в позиции курсора, номер текущего параметра и открывается справка с подсветкой нужного параметра.
- Команда "Контекстная подсказка" - CTRL+SPACE - вычисляет список слов для текущего родительского контекста и дополняет текущее начало слова до минимальной общей части группы слов, начало которых совпадает с данным. Если такое дополнение невозможно, открывается форма подсказки.
- Команда "Заменить неначальные табуляции пробелами" - Alt+Shift+Space - выполняет замену всех символов табуляции, расположенных после первого символа каждой строки на эквивалентное количество пробелов.
- Команда "Настройка компоненты" - открывает окно настройки компоненты.

  Для отображения значения какого либо выражения в нужном месте текста программы можно использовать специальную функцию глобального контекста Исследовать(Параметр, Модально = Истина). В качестве первого параметра нужно указать интересующее выражение, а вторым параметром задается необходимость модального режима. При выполнении функции будет открыто окно "Исследователь объектов", являющееся аналогом диалога "Вычислить выражение" отладчика.

##### Форма подсказки

В заголовке формы после слова "Контекст: " отображает идентификатор текущего родительского контекста. В самом верху формы расположено поле типа родительского контекста. Ниже расположено поле ввода текущего слова. Вводить можно только части слов из списка. Т.е. последовательности символов, не совпадающие ни с одним словом в списке, ввести не получится. После ввода каждого символа текущего слова происходит позиционирование в списке слов, а также промежуточное дополнение слова исходя из набора слов, чье начало совпадает с введенной строкой. При удалении каждого символа происходит аналогичное сокращение текущего слова.
Рассмотрим на примере. Например имеем список слов
...
-ПеребратьЭлементы()
-ПолуПериод
-ПолученноеСреднее
...
-ПолучитьСреднееСРазбивкойПоИнтервалам()
-ПолучитьСреднееБезРазбивкиПоИнтервалам()
-ПреобразоватьКСтроке()
...
и нам требуется длинное слово "ПолучитьСреднееБезРазбивкиПоИнтервалам". В штатной контекстной подсказке конфигуратора нам потребовалось бы набрать "ПолучитьСреднееБ" и выбрать слово. В нашем же случае после ввода "По" программа сразу дополнит слово до "Полу", как максимальной общей части всех элементов списка, начинающихся с заданной строки. Затем вводим "и" ("Получи") и сразу же происходит дополнение до ("ПолучитьСреднее"). Затем символ "б" ("ПолучитьСреднееБ") и уже видим "ПолучитьСреднееБезРазбивкиПоИнтервалам". Так как такой подход немного непривычен, сделана специальная колонка "Ключевая буква", где для каждого слова отображается следующая буква. По умолчанию эта колонка, как и многие другие скрыта.

В списке слов всего доступно 6 настраиваемых колонок: Определение, Частота, Тип значения, Тип слова, Ключевая буква. Описание колонок:

- Колонка "Ключевая буква" уже рассмотрена выше.
- Колонка "Определение" содержит информацию о характере декларации.
- Колонка "Частота" показывает количество вхождений.
- Колонка "Тип значения" отображает вычисленный набор типов значений.
- Колонка "Тип слова" может содержать "метод", "свойство", "поле", "таблица", "тип", "ключевое слово".
- Контекстное меню списка слов позволяет осуществлять привычный отбор по колонкам Слово, Определение, Частота, Тип значения, Тип слова.

Справа от поля ввода текущего слова находится поле ввода "горячего" фильтра по подстроке. Еще правее расположена командная панель быстрых переключателей исключающих фильтров "Не методы", "Не свойства", "Не ключевые слова". Для них закреплены горячие сочетания клавиш CTRL+1, CTRL+2, CTRL+3. В форме можно нажать CTRL+F1 для отображения справки по слову из текущей строки.

После выбора нужного слова путем двойного щелчка мышкой или нажатия <ENTER> текущее слово в тексте будет заменено на выбранное. Если новое слово является методом, то автоматически будет добавлено "(", "()" или "();" в зависимости от того, процедура это или функция, и режима языка. Если нажать "=", то произойдет все тоже самое, но дополнительно будет добавлено " = ".

  Если на выбранном слове нажать "." (кириллическая точка; при этом фокус ввода должен находиться в поле ввода), то текущее слово в тексте будет также заменено на выбранное, и после него будет сразу добавлена точка и окно подсказки переоткроется. Таким образом вы сразу переходите "внутрь" выбранного слова. В данном случае ввод параметров всех выбранных функций откладывается на потом.

В случае определения у контекста нескольких агрегатных типов будет предложено выбрать конкретный тип из списка.

##### Форма настройки

Настройки компоненты хранятся в профиле пользователя информационной базы.

- Путь к файлу шаблонов позволяет подключить стандартный файл шаблонов (ST).
- Опция "Открывать окно подсказки при пустом списке" отвечает за отказ от открытия формы подсказки в случае пустого списка для текущего контекста.
- Возвращением фокуса главному окну при открытии окна справки управляет опция "Активизировать окно справки при его открытии".
- Для включения промежуточных дополнений непосредственно в поле текстового документа предназначена опция "Использовать промежуточные дополнения"

##### Форма синтакс-помощника

Представляет собой браузер для отображения оглавления книг и страниц синтакс-помощника.

##### О программе

Страница проекта http://infostart.ru/public/14700/. Автор tormozit, skype: tormozit, icq:283511553, mailto:tormozit@mail.ru.