С самого начала киллерфича - подсветка синтаксиса запроса с помощью текстового редактора CodeMirror, написанного на javascript. Редактирование запроса происходит в поле html документа, что создает некоторые трудности и ограничения, но об этом позже. На данный момент используется самый ненагруженный функционалом вариант текстового редактора, просто корректная подсветка ключевых слов и выделением текущей строки, однако возможности для развития огромные.
В планах на развитие
- Автодополнение ключевых слов
- Подсветка объектов метаданных и реквизитов
- Подсказка параметров виртуальных виртуальных таблиц
- Позиционирование на первую строку с ошибкой, подсветка строк с ошибками
- Сворачивание запросов в пакете
За основу взят запросник на управляемых формах (ссылка в конце публикации). Выражаю свою благодарность его автору, mrstomak, который проделал очень большую работу. Мою разработку прошу считать форком управляемого запросника, отдельной веткой развития.
В процессе прикручивания к запроснику текстового редактора была пофиксено парочка мелких багов и сделано с несколько небольших дополнений. Даю самые заметные кратким списком:
- Добавлено поле поиска запроса по наименованию.
- Расположение основных кнопок приведено к более привычному виду, похожему на оригинальный запросник, с его шикарной эргономикой. Увы, полностью повторить пока невозможно, но мысли как улучшить эргономику есть
- При переключении версий запроса текущая версия отображается поверх поля редактирования, как в оригинале, а не появляющейся и исчезающей текстовой декорацией над редактором. Изменение видимости декорации на старых релизах может вызвать ресайз формы
Теперь о плохом. Наш мир далек от идеала, в процессе работы пришлось преодолеть множество трудностей и некоторые только с помощью костылей
- Самая главная проблема - неполноценность поля html документа как браузера, в частности оно не позволяет нормально обрабатывать нажатия некоторых клавиш, таких как кнопки со стрелками, home, end, insert. Решить ее удалось с помощью внешней компоненты, перехватывающей нажатия кнопок на клавиатуре и отдающей их напрямую скриптам. Большой костыль, но если в 1С однажды появится браузер на базе webkit (как в линукс клиенте, ага) этот костыль будет не нужен
- Еще одна проблема - странное поведение мыши при выделении текста в старых релизах. Мы ставим курсор, тянем мышь и замечаем что выделена только первая буква. Начиная с релиза 8.3.5.1385 этой проблемы не существует
- Третья серьезная проблема, привязка к версии браузера системы. Если у вас WinXP и браузер ни разу не обновлялся, то скорее всего зрелище будет печальным. Минимальная версия IE в системе при которой все должно корректно работать - IE8.
Уверен, что есть еще несколько проблем, оставшихся мной незамеченными, также я не тестировал разработку в веб-клиенте , линукс-клиенте и релизах версии 8.2. Надеюсь на обратную связь в комментариях.
В данной разработке использованы:
Запросник на управляемых формах
Версия 2.1.2
- Поддержка долгово нажатия клавиш со стрелками на современных релизах (8.3.5.1385 и новее)
- Отображение номеров строк
- Подчеркивание слов, совпадающих с тем, на котором установлен курсор
- Пофиксен баг с удалением корня дерева запросов
- Пофиксен баг, приводящий к зацикливанию при переключении между колонками результата запроса
Версия 2.1.3
- Отрезана поддержка обычного приложения и целая гора легаси кода, связанного с ней
- Разбор запроса по временным таблицам с помощью схемы запроса, а не сомнительного анализа текста, часто дающего сбой
- Автодополнение ключевых слов по Ctrl+Пробел
ВНИМАНИЕ! Из за особенностей поля html документа не получилось сделать подтверждение выбранного варианта по нажатию на Enter. Нажатие на Enter переводит курсор на следующую строку и обойти этот момент без совсем феерических костылей мне пока не удалось. Для выбора в всплывающем списке следует использовать стрелку вправо или мышь. Это непривычно только первую сотню раз (Больше неактуально, исправлено в версиии 2.1.4)
- Подсветка групп метаданных (Справочник, Документ, Регистр...) полужирным шрифтом, автодополнение их по Ctrl+Пробел
- Мгновенное обновление результата при переключении способа отображения таблица/дерево (Раньше надо было заново выполнить запрос)
- Исправлена ошибка с таблицей значений в параметрах для тонкого клиента
- Исправлена ошибка с выполнением алгоритма при пустом результате
Версия 2.1.4
- Доработана внешняя компонента для перехвата клавиатуры в результате чего удалось добиться правильного поведения клавиши энтер в контекстной подсказке и более корректного поведения курсора при переходе на новую строку