С самого начала киллерфича — подсветка синтаксиса запроса с помощью текстового редактора 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
— Доработана внешняя компонента для перехвата клавиатуры в результате чего удалось добиться правильного поведения клавиши энтер в контекстной подсказке и более корректного поведения курсора при переходе на новую строку
Много раз порывался сделать подобное, но именно изобилие необходимых костылей останавливало.
(4) Darklight, Не буду отвечать на каждый пункт, предложения по большей части вкусные и частично уже находятся в todo листе. Отвечу только на то, что сам первоначально принял за баг взятой за основу разработки
На самом деле все работает, но кнопка «Сохранить» не помещается на форме редактирования списка значений, надо растянуть форму пошире и кнопка появится.
Такое случается в такси на формах изначально сделанных под старые УФ. Конечно, логичнее было бы, сохраняйся список при закрытии, доберусь и до этого
Ещё десяток багов и замечаний :))))
21. Криво работает поиск в тексте запроса. При поиске вниз ищет только самое первое вхождение. Причём всегда сверху. Поиск ищет перебирая слова снизу вверх как и положено, но тоже не умеет определять текущую позицию начала поиска. Странно работает поиск по выделенному фрагменту. Вроде как ищет. Но даже при поиске назад сбивается. Выделение при этом тоже может сбиться. Если в выделенном блоке нет искомой подстроки поиск идёт далее по коду.
22. Есть проблема и с обратным поиском (к текущему направлению) по комбинации Shift+F3
23. Поиск с учетом регистра регистр не учитывает (но вроде это только при поиске назад).
24. Кнопки команд поиска не вынесены ни на форму ни в подменю. Работают только горячит клавиши Ctrl+F, F3, Shift+F3 (ещё какие-то, какие я не знаю?)
25. Нет «Поиска и замены» (вообще нет, даже Ctrl+H, Ctrl+R не помогает)
26. Горячие комбинации не показаны в меню и подсказках к кнопкам
27. Нет номеров строк по вертикали (нигде нельзя посмотреть даже текущую позицию курсора)
28. Нет команды перехода к строке №
29. Я бы выполнение запроса поставил бы на клавишу F5 — привычнее для 1С. А на клавишу F7 вызов конструктора запроса. А аа F10 переход к выполнению алгоритма
30. В некоторых окнах (например окне работы с типами или списками) нет кнопки «Закрыть»/»Применить»/»ВЫБРАТЬ»/»ОК» — не хватает для удобного восприятия/использования. (а лучше бы пара кнопок включая «ОТМЕНА»).
Да, не заметил. Как и большинство, скорее всего не заметит сразу. Может перенести эту ОЧЕНЬ важную кнопку левее! И вообще перейти на кнопки с иконками, вместо текста.
Или можно просто у формы «СписокЗначенийУпр» увеличить ширину в конфигураторе с 50 до 60. И сделать кнопку «Сохранить» кнопкой по умолчанию (соотв. флагом) — будет работать по Ctrl+Enter
Пункты 11 и 13 это баги — нужно исправлять 😉
(6) Darklight, в 29 пункте F7 — это стандартный запуск исполнения запроса в консоли. Изменять на F5 не нужно
Мда, легаси код кроме плюсов того, что его не надо писать имеет свои недостатки.
Я планирую переделать работу с анализом временных таблиц на СхемуЗапроса, баг уйдет. При этом, правда, отвалится поддержка релизов, старше чем 8.3.5, но не думаю что на них сидит так уж много народа.
Второй баг «исправлен в тестовой версии»
(10) в предыдущем комментарии я добавил ещё одну важную ошибку (после Вашего ответа на него)
Использование объекта «СхемаЗапроса» это, конечно, хорошо, но… уж больно он кривой. ОЧЕНЬ КРИВОЙ и чувствительный к изменениям структуры запроса (особенно при работе с временными таблицами). Хотя в режиме «Только чтение» работает хорошо! Но его API очень сырой и неудобный!
38. Нашёл внтури вот такую функцию АлгоритмВыполняетсяНаСервере()
ну и процедуру ВыполнитьАлгоритм(Команда)
Это что за фигня такая там написана?
То есть, если алгоритм не выполняется в транзакции и весь находится внутри цикла («Для Каждого СтрокаРезультата Из РезультатТаблица Цикл»), то он выполняется построчным перебором на клиенте с серверным вызовом на каждую обрабатываемую строку. НА КАЖДУЮ! А если их будет миллион…. будет миллион серверных вызовов!
Это просто кошмар! И жуткое падение производительности.
Я уж промолчу про возможность распараллеливания на фоновых процессах….
Нужно просто сделать переключатель, говорящий где нужно обрабатывать алгоритм: на сервере или на клиенте.
Ну у расппаралелливание тоже не помешало бы (как один из вариантов серверной обработки алгоритма)
ну и процедуру ВыполнитьАлгоритм(Команда)
Это что за фигня такая там написана?
Проклятый легаси код. Есть планы все эти конюшни вычистить, но прикручивать новые фичи к текстовому редактору интереснее.
Таки да, это запланировано, наравне с фоновым выполнением самих запросов
(6)
Хотелось бы уточнить в виду имелась Граница или Таблица Значений. Если таблица значений, то этот баг я только что пофиксил в тестовой версии, он был связан с недоступностью ТЗ в тонком клиенте, а если Граница, то повторить его мне не удалось.
Есть ли возможность выгрузить результат запроса в файл?
Можете пожалуйста скинуть на: j21r01a91@mail.ru
Можете пожалуйста скинуть на: j21r01a91 (собака)майл.ру
в обработке отсутствует Модуль объекта и Модуль менеджера. Соответственно нет обещанной функции отладки Дамп
ВнешниеОбработки.Создать(«d:zapr.epf»,Ложь).Дамп(Запрос)
Можете поделиться Вашей разработкой (в личку)? К сожалению еще не набрал 1$m
Спасибо.
А можете сделать подсветку синтаксиса в «Выполнить алгоритм» как у Тезина?
и довести функционал до его последней версии?
(21) viplelik, Дайте ссылку на публикацию, посмотрю что возможно
Сайт Запросника:
Основа — консоль запросов ИТС
(23) viplelik, Понял о чем вы. Цели полностью повторить функционал оригиального запросника на управляемых формах я себе не ставил. Целью было именно реализовать подсветку синтаксиса для управляемых форм. Прикрутить недостающие фишки, конечно, можно но, отнимет слишком много свободного времени, столько энтузиазма у меня нет. Да и взял за основу я далеко не лучшую консоль для управляемых форм. По хорошему стоит начать разработку с нуля, а не бороться с наследственными болезнями, но тут снова проблема мотивации. С подсветкой синтаксиса в поле для выполнения кода та же проблема
Вошёл. Нажал СКАЧАТЬ за стартмани. С меня списалось $m и нет ничего. ((((
HELP!
(25)
На почту письмо пришло со ссылкой на скачивание?
(26) Вот только что… скачал. Просто привык к нормальному, что приходит в течении 2-3 минут. Извините!
Если удастся удалить эти файлы, чтобы других не смущать, удалите плиз!
Идея хорошая, но перехватчик клавиатуры работает ужасно, передвижение курсора по стрелочке работает через раз, либо курсор может перескакивать через слова, нажатие ctrl+пробел может сработать, а может передвинуть курсор на символ вправо, а затем обработка может вообще на некоторое время зависнуть, очень жаль, что нужно теперь самому копаться в коде.
Запросник2_1_4
В верхнем окне где должно быть поле ввода запроса ошибка:
Не удается отобразить эту страницу
{ВнешняяОбработка.КонсольЗапросовИОбработчик.Форма.ФормаУпр.Форма(167)}: Метод объекта не обнаружен (GetQuery)
ТекстЗапроса.УстановитьТекст(ОкноБраузера().GetQuery(«»));
Что не так?
(29) проблема устранилась ручной чисткой папки temp. Видимо проблема в некорректном завершении работы 1с.
Не хочет регистрировать компоненту…
{Обработка.КонсольЗапросовИОбработчик.Форма.ФормаУпр.Форма(42)}: Тип не определен (AddIn.Hook.KeyboardHook)
мКомпонентаKeyBoardHook = Новый(«AddIn.Hook.KeyboardHook»);
(31) Платформа 8.3.10.2667
(31)
Такая же беда
Так же «Тип не определен» (платформа 8.3.11, если важно)
Что делать с ошибкой Тип не определен (AddIn.Hook.KeyboardHook)?
Подозреваю, что у вас x64 клиент
Компонента писалась во времена, когда его не существовало. Попробуйте клиент х32
(36)
На клиенте х32 та же ошибка.
(36)
Что еще может быть? Такая ошибка не только у меня.
Итого, пробовали на разных ПК, на разных системах, пытались вручную зарегистрировать компоненту — результата не достигли. Закомментировали процедуру по подключению внешней компоненты, удалось запустить обработку, однако работать с ней невозможно по следующим причинам:
1. Не работают горячие клавиши от слова «Совсем».
2. Не работают стрелки перемещения по тексту.
3. При нажатии на enter курсор устанавливается в начало строки всегда.
Полагаю, за все эти функции как раз и отвечает внешняя компонента.
Пока проблема с компонентой не будет устранена — пользоваться невозможно.
Пробовали на платформах 8.3.11 и 8.3.12.
(35) тоже самое
(35)попытка-исключение
Не работает.
1С:Предприятие 8.3 (8.3.12.1714)
{ВнешняяОбработка.КонсольЗапросовИОбработчик.Форма.ФормаУпр.Форма(43)}: Тип не определен (AddIn.Hook.KeyboardHook)
мКомпонентаKeyBoardHook = Новый(«AddIn.Hook.KeyboardHook»);
И 1с зависает и больше не реагирует.