В сети много различных консолей запроса, но ни одного доработанного Конструктора. Конструктор запроса «вшит» в платформу, и извлечь его можно с помощью кода:
КопироватьФайл("v8res://mngbase/QueryWizard.epf", "C:\КонструкторЗапроса.epf");
Для начала захотелось доработать поиск в таблице «База данных» на странице «Таблицы и поля» (да, есть поиск Ctrl+F и отмена Ctrl+Q, неудобно).
Потом не устроило, что в условиях у таблицы строка не «многострочная».
В условиях в таблицу «Поля» со временем добавил поиск и сортировку по имени.
На форме «Произвольное выражение» (при открытии поля или условия) добавил частые символы из английской раскладки. Потом добавил выбор значения перечисления и выбор пустой ссылки. Добавил сортировку по наименованию. Докинул по мелочи команд в контекстное меню.
На вкладке «Дополнительно» урезал названия временных таблиц и добавил кнопку «Добавить запрос».
Так же при создании временной таблицы галка «Автоупорядочивание» теперь снимается автоматически.
Справа на форме добавил названия запросов и возможность переключатся по запросам. Так же при объединении добавил возможность переключатся между подзапросами.
Внизу добавил маленькую галку, при нажатии которой происходит открытие текста запроса, его изменение с последующим закрытием, после чего перестраиваются все поля.
Есть ещё немного мелких доработок во вкладке «Связи» и «Условия».
Конструктор можно добавить в свою любимую Консоль запроса в макет как двоичные данные и извлекать с помощью кода:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ИмяФайла = ПолучитьИмяВременногоФайла("erf");
ИмяОбр = ПолучитьИмяКонструкторЗапроса(ИмяФайла);
…
КонецПроцедуры
&НаСервере
Функция ПолучитьИмяКонструкторЗапроса(ИмяФайла)
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
Об = РеквизитФормыВЗначение("ОбработкаКонсольЗапросов");
ДвоичныеДанные = об.ПолучитьМакет("КонструкторЗапроса");
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,,,ОписаниеЗащиты);
Возврат ИмяОбр;
КонецФункции
Вернуть консоль можно кодом:
&НаКлиенте
Процедура ВозвратКонструктора(Команда)
ВозвратКонструктораНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВозвратКонструктораНаСервере ()
ИмяФайла = ПолучитьИмяВременногоФайла("erf");
КопироватьФайл("v8res://mngbase/QueryWizard.epf",ИмяФайла);
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,,,ОписаниеЗащиты);
КонецПроцедуры
Если у кого появятся идеи, как еще можно доработать, либо сами доработки – прошу делиться.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.18.46