Обработка протестирована на следующих версиях платформы: 8.3.7, 8.3.11
Долгое время сомневался, стоит ли выкладывать очередную консоль запросов на Инфостарте, но теперь решился. Понравится тем, кто ценит простоту и функциональность. Консоль успешно эксплуатируется более 2х лет командой из примерно 5 человек, поэтому багов там минимум (если найдете, пишите, исправлю).
Визуально повторяет консоль запросов Чистова на обычных формах, так как за основу была взята именно эта консоль, которая в свою очередь основана на типовой консоли запросов для обычных форм. Что касается внутреннего содержимого, весь код я почти полностью переписал, а главное добавил управляемые формы, внешне точно повторяющие вид в обычных формах, так что с консолью можно работать в любых формах, не теряясь в расположении элементов и наборе доступных функций.
Интерфейс:
1. Дерево запросов. Здесь все просто, управляем структурой запросов в виде дерева как и раньше. Основная доработка — качественный Drag&Drop мышкой элементов дерева, с учетом вложенных элементов. Ещё добавлена информация о количестве строк в текущем запросе в шапку дерева запросов.
2. Текст запроса. Отличий нет, но здесь переработана функция получения кода с запросом в части установки параметров.
3. Панель информации. Здесь выводится количество строк в результате выполнения запроса и время выполнения (время выполнения также дублируется в заголовке формы). Убрано поле переключения на просмотр результата запроса в виде дерева (почти бесполезная функция, которая захламляет форму обработки). Также здесь расположена кнопка, вызывающая конструктор запроса, чтобы не лазить каждый раз в контекстное меню для вызова конструктора. Горячая клавиша для её вызова Ctrl+D, такое сочетание не назначено на что-то критичное в 1с и его легко нажать.
4.Таблица результата. Как и раньше результат запроса выгружается в таблицу значений (в управляемых формах тоже), что по моему мнению гораздо удобнее выгрузки в табличный документ, который реализован в некоторых консолях запросов. При таком способе выгрузки результат легко отсортировать по нужному полю, а при необходимости можно выгрузить в тот же табличный документ. Главный плюс выгрузки в таблицу в скорости работы, отличия заметны когда результат запроса содержит много строк, при этом выгрузка в табличный документ начинает сильно тормозить. В контекстное меню добавлена новая функция выполнения произвольного кода. Вообще мне не нравится идея комбайнов, которые могут делать всё, но не очень хорошо, и здесь напрашивается отдельная обработка для выполнения алгоритмов над выбранными объектами, но на практике бывает так, что результат выполнения сложного запроса надо обработать по-быстрому без лишних телодвижений (например распровести все выбранные документы), в таком случае простая обработка в консоли может пригодиться. В целях повышения удобства просмотра данных типа хранилище значения, в представлении значения такого типа в скобках отображается содержимое хранилища, и при нажатии на значение такого типа открывается соответствующая форма просмотра значения. Аналогично для таблиц значений в представлении отображается количество строк в таблице и при нажатии на значение открывается форма просмотра таблицы.
5. Панель команд. Изменен порядок кнопок и удалены лишние на мой взгляд команды. На все кнопки назначены горячие клавиши, при этом запрос можно выполнить как нажатием на F5 (как в MSSQL Management Studio), так и нажатием сочетания Ctrl+Enter, которое вызывает последний способ выполнения запроса (выполнение, выполнение пакета или просмотр временных таблиц). Добавлены кнопки копирования в буфер/вставки из буфера обмена, при этом сериализуется текст запроса со всеми параметрами запроса, включая таблицы, что бывает удобно для копирования отдельных запросов с большим количеством параметров. Также можно добавить простую функцию сериализации запроса в буфер в общий модуль любой конфигурации, тогда запрос можно будет копировать при отладке.
Функция ЗапросВКонсоль(пЗапрос) Экспорт;
рез = Новый Структура;
рез.Вставить("Текст",пЗапрос.Текст);
рез.Вставить("Параметры",пЗапрос.Параметры);
строкаРез = ЗначениеВСтрокуВнутр(рез);
Попытка
Объект = Новый COMОбъект("htmlfile");
Объект.ParentWindow.ClipboardData.Setdata("Text", строкаРез);
Исключение
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
6. Форма параметров запроса. Как и в исходной консоли выполнена в виде отдельной открывающейся формы без модальности. Для каждого параметра можно указать один из 3х вариантов: 1) Значение — обычное значение любого типа. 2) Список — список значений содержащий элементы любого типа, при этом если параметры заполнены кнопкой «Получить из запроса», то в целях удобства значения ограничены типом параметра, если это не составной тип. 3) ТаблицаЗначений — таблица значений, редактирование которой осуществляется в отдельной форме. Форма сделана максимально простой, сверху указываются имена колонок и их тип, снизу задается значение строк. Во всей консоли в представление таблицы выводится количество строк, чтоб бывает удобно для быстрой оценки размера таблицы.
Кнопка «Получить из запроса» - работает как и типовой консоли, но сделаны некоторые изменения. Улучшена работа с параметрами типа список значений, раньше такой параметр очищался от списка объектов при перезаполнении. Для отсутствующих в запросе параметров пользователю задается вопрос об удалении таких параметров из таблицы. Перед закрытием формы параметров происходит проверка на наличие дублирующихся по имени параметров и выдается предупреждение, если такие есть.
7. Форма настройки. Настройки «Использовать автосохранение» и «Использовать только выделенную область текста запроса» работают как в консоли Чистова. Добавлена настройка «Использовать бэкап запросов перед выполнением», которая перед каждым выполнением запроса сохраняет редактируемый файл запросов во временный файл и если запрос так и не завершился, то после открытия консоли все изменения будут восстановлены из файла. Такая функция должна решать проблему потери текста большого запроса из-за падения программы во время выполнения запроса (например по причине ошибочного соединения больших таблиц без условий). Теоретически функция автосохранения запроса может помочь с этой проблемой, но есть нюансы: если интервал автосохранения достаточно большой и обработчик не успел сработать после изменения текста запроса, то изменения потеряются, бэкап запроса в этом случае гарантирует сохранение перед выполнением. Еще один нюанс - автосохранение работает только для существующих файлов запросов, к которым указан путь, бэкап же может работать и с несохраненными файлами.
Внутренние улучшения/адаптация под УФ:
- проработана совместимость формата хранения файлов .sel с консолью запросов ИР
- для тонкого клиента в целях ускорения добавлена архивация перед пересылкой на сервер(опция вынесена в настройки)
Контакты
Адрес проекта на GitHub: github.com/Synoecium/Uniform-query-console-1C
UPD 28.05.2018
- для толстого клиента вызывается классический конструктор запросов (работает даже если отключена модальность), для тонкого и веб клиента конструктор запросов не изменился
UPD 15.06.2018
- реализовано отображение результата выполнения запроса в виде дерева ОФ/УФ. Вариант вывода в дерево или таблицу определяется автоматически, по наличию итогов в выполняемом запросе. Проработаны команды контекстного меню для разворачивания/сворачивания дерева до произвольного уровня. Работает выполнение произвольного кода, дерево при этом обходится полностью по иерархии.
- исправлен баг на УФ при выделении пустой строки нового запроса
- исправлен баг с автосохранением нового и незаписанного файла(бесконечно возникал диалог сохранения)
- проект выложен на GitHub
UPD 19.02.2019
- Реализована синтаксическая подсветка запросов на УФ(в т.ч. на веб-клиенте). Внешние компоненты не используются, написан свой оптимизированный по скорости алгоритм, работающий на стороне клиента (логика работы парсера перекликается с Разукрашкой). Для включения/выключения подсветки на форме предусмотрена отдельная кнопка (Ctrl+H), так как в режиме подсветки текст отображается в поле HTML документа и недоступен для редактирования.
- Исправлен баг с вызовом функций сжатия на веб-клиенте, что мешало запустить обработку.