Униформальная консоль запросов








Минималистичная и функциональная консоль запросов, которая выглядит и работает одинаково, как в обычных формах, так и в управляемых.

Обработка протестирована на следующих версиях платформы: 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.2024

— для толстого клиента вызывается классический конструктор запросов (работает даже если отключена модальность), для тонкого и веб клиента конструктор запросов не изменился

UPD 15.06.2024

— реализовано отображение результата выполнения запроса в виде дерева ОФ/УФ. Вариант вывода в дерево или таблицу определяется автоматически, по наличию итогов в выполняемом запросе. Проработаны команды контекстного меню для разворачивания/сворачивания дерева до произвольного уровня. Работает выполнение произвольного кода, дерево при этом обходится полностью по иерархии.

— исправлен баг на УФ при выделении пустой строки нового запроса

— исправлен баг с автосохранением нового и незаписанного файла(бесконечно возникал диалог сохранения) 

— проект выложен на GitHub

UPD 19.02.2024

— Реализована синтаксическая подсветка запросов на УФ(в т.ч. на веб-клиенте). Внешние компоненты не используются, написан свой оптимизированный по скорости алгоритм, работающий на стороне клиента (логика работы парсера перекликается с Разукрашкой). Для включения/выключения подсветки на форме предусмотрена отдельная кнопка (Ctrl+H), так как в режиме подсветки текст отображается в поле HTML документа и недоступен для редактирования.

— Исправлен баг с вызовом функций сжатия на веб-клиенте, что мешало запустить обработку.

 

50 Comments

  1. uri1978
    Убрано поле переключения на просмотр результата запроса в виде дерева (почти бесполезная функция, которая захламляет форму обработки)

    Жаль.

    Reply
  2. serwk

    Добрый день! Пару вопросов:

    1 Конструктор запроса открывается для конфигураций с режимом использования модальности — Не использовать. Например, ЗУП 3.1.6.37;

    2 В управляемом приложении открывается полноценный конструктор запроса. В нем связи настраиваются на отдельной закладке?

    Reply
  3. Synoecium

    (1) в принципе можно сделать отключаемой опцией в настройках и добавить такой функционал, у нас тоже есть человек, который

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

    Reply
  4. rpgshnik

    Да этот вид консоли более удачный не желе другие. Я чувствую вы зря сомневались в выкладывание и это будет бомба!)))

    Reply
  5. Dream_kz

    (3) Было бы неплохо

    Reply
  6. Mi11er

    Удобнее консоли, чем в ИР, я чет не видел …

    Reply
  7. Synoecium

    (7) попробуйте, вдруг понравится. Раньше пользовался в том числе ИР консолью.

    Reply
  8. Mi11er

    (3) да, дерево нужная штука.

    Итоги то строить =) и смотреть группы.

    Reply
  9. Tanis

    Огромное спасибо! Очень нужная вещь.

    Пытался найти несколько раз….

    Reply
  10. Synoecium

    (4)

    (11)

    Спасибо за поддержку)

    Если можно, пишите пожалуйста, что понравилось, а что нет. Тогда будет понятно, какая фишка действительно удачная и стоит её развивать, а чего возможно не хватает. Главное чтобы предложения соответствовали подходу функционального минимализма, к которому я стремился во время создания обработки.

    Reply
  11. TrinitronOTV

    Спасибо, попробую вашу консоль, может по душе придётся

    Reply
  12. user741393

    Добрый день, а как сделать что бы закладка связи отображалась, как на скриншоте у Сергей Бондаренко

    Reply
  13. Synoecium

    (14) актуальный вопрос, он меня как раз натолкнул на небольшое исследование, оказывается можно открывать классический конструктор в управляемых формах(но только в толстом клиенте). Как закончу доработку — выложу. Пока можете использовать следующий код в обработчике команды вызова конструктора:

     #Если ТолстыйКлиентУправляемоеПриложение  Тогда
    Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда
    Конструктор = Новый КонструкторЗапроса();
    Иначе
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    КонецЕсли;
    рез = Конструктор.ОткрытьМодально();
    Если рез = Истина Тогда
    ТекстЗапроса = Конструктор.Текст;
    Модифицированность = Истина;
    КонецЕсли;
    #Иначе
    Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда
    Конструктор = Новый КонструкторЗапроса();
    Иначе
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    КонецЕсли;
    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыполнитьПослеЗакрытияКонструктора», ЭтаФорма);
    Конструктор.Показать(ОповещениеОЗакрытии);
    #КонецЕсли
    

    Показать

    Reply
  14. Synoecium

    (2) спасибо за наводку, в ближайшее время сделаю доработку, чтобы при возможности открывался классический конструктор запросов, новый мне тоже очень не нравится, особенно то, что сделали со связями.

    Reply
  15. user741393

    (15) Сделал так не работает

    Процедура КнопкаКонструкторЗапросаНажатие(Элемент)
    ТекстЗапроса = ЭлементыФормы.ТекстЗапроса.ПолучитьТекст();
    Если ТолстыйКлиентУправляемоеПриложение  Тогда
    Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда
    Конструктор = Новый КонструкторЗапроса();
    Иначе
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    КонецЕсли;
    рез = Конструктор.ОткрытьМодально();
    Если рез = Истина Тогда
    ТекстЗапроса = Конструктор.Текст;
    Модифицированность = Истина;
    КонецЕсли;
    Иначе
    Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда
    Конструктор = Новый КонструкторЗапроса();
    Иначе
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    КонецЕсли;
    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыполнитьПослеЗакрытияКонструктора», ЭтаФорма);
    Конструктор.Показать(ОповещениеОЗакрытии);
    КонецЕсли
    
    КонецПроцедуры
    

    Показать

    Reply
  16. Synoecium

    (17) что пишет? проверьте что значок # скопировался в коде

    Reply
  17. serwk

    (12) Добавьте, пожалуйста, вывод результата запроса в виде дерева 🙂

    Reply
  18. XXIVek

    Спасибо. Было лень переделывать самому, а на управляемых страдал.

    Reply
  19. TODD22

    Как просматривать содержимое временных таблиц?

    В консоли для ОФ у меня есть кнопка по которой выводится список временных таблиц, можно выбрать любую и просмотреть содержимое.

    В этой консоли нажимаю на временные таблицы, внизу выводится результат две временные таблицы. Как посмотреть их содержимое?

    И вот сильно режет глаза и слух слово «униформальная», как то не по «русски» звучит может конечно есть такое слово но я значение такого слова не нашёл.

    Reply
  20. Synoecium

    (21) двойным кликом по ячейке колонки «РезультатЗапроса», там где написано «ТаблицаЗначений(N)»

    Униформальный — такого слова нет, я его сам придумал.

    Reply
  21. TODD22

    (22)По двойному клику открывает новое окно, в котором так же одна строка «ТаблицаЗначений(4)», если и по ней кликаю то открывается окно с кнопкой окей и цифрой 4. Таблица не расшифровывается.

    Reply
  22. TODD22

    По двойному клику расшифровывает только последнюю таблицу значений.

    ВТ не расшифровывает, может я конечно что то не так жму.

    Reply
  23. Synoecium

    (23) давайте разберемся в вашей проблеме, пишите в личку

    Reply
  24. Synoecium

    (1) Реализовал данную функцию. Сам попробовал, довольно удобно для просмотра итогов 🙂

    Reply
  25. Synoecium

    TODD22: Спасибо за помощь в борьбе с багами, исправил в новой версии.

    Reply
  26. uri1978

    1. Результаты могут выводится в виде дерева. Спасибо. Теперь не хватает переключателя. Сейчас я так понимаю определяет автоматически. А хотелось бы указывать самому.

    2. «Просмотр временных таблиц». Если выбран этот режим, то просматривать временные таблицы можно, но результата запроса нет. Часто нужно видеть итоговый результат запроса + возможность просмотреть временные таблицы. В типовой обработке если честно удобнее.

    3. «Просмотр временных таблиц». Если несколько временных таблиц, то просмотреть можно только первую таблицу, остальные пустые.

    4. «Просмотр временных таблиц». Нельзя открыть несколько временных таблиц одновременно.

    5. «Выполнить пакет», вообще не понял как работает. Две таблицы значений «ТаблицаЗначений(1)» при открытии которой одна запись в таблице «Количество» = 5759. Вторая таблица «ТаблицаЗначений(28926)», при открытии пустая таблица с колонкой «Количество». В общем вообще не понял что происходит.

    6. Из эстетических — кнопку «Настройки» поставьте последней, а не первой.

    Экспериментировал на простейшем запросе (УТ, обычные формы), без какого либо смысла, просто просмотреть как работает.

    Запрос

    Остаюсь на стандартной консоли. Просьба хотя бы чуть-чуть тестировать обработки перед публикацией.

    Reply
  27. Synoecium

    (28) просьба — читать описание публикации перед использованием. Там ясно указано, что используется логика из консоли Чистова, которая тщательно перенесена в УФ.

    Reply
  28. uri1978

    (29) Ок. Понял. Но увы заявленный функционал совсем на работает. Прошу вернуть уплаченный $m

    Reply
  29. leobrn

    конструктор запроса открывается стандартный? или где связи неудобно сделаны?

    Reply
  30. Synoecium

    (31) если есть возможность, запускается классический конструктор (для этого должен быть запущен толстый клиент)

    Reply
  31. WalterMort

    А если в результате 100000 строк, будет работать?

    Reply
  32. Synoecium

    (33) легко, такой запрос «ВЫБРАТЬ ПЕРВЫЕ 100000 * ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный» выполнился за секунду с небольшим (миллион уже подольше, около 15 сек, из них 6 сек ушло на выгрузку в таблицу на форме)

    Reply
  33. nomadon

    Примерно 5 разработчиков это как?) Кто-то полупрозрачный, или не полноценный?

    Reply
  34. V_V_V

    Обработка результата запроса возможна?

    Reply
  35. Synoecium

    (36) да, но на примитивном уровне, вызывается окно, куда можно вписать произвольный код, выполняемый для каждой строки результата запроса. В п. 4 кратко описана эта функция.

    Reply
  36. Synoecium

    (35) написал так, потому что некоторые не работали полностью 2 года, некоторые не сразу стали использовать эту консоль. Условно 10 человеко-лет использования тогда 🙂

    Reply
  37. vowg

    Спасибо, давно такую искал

    Reply
  38. Fil15

    Я считаю, что такую консольку нужно без голды раздавать (в счет пожетвований поставить). Сам бы дал то что имею и развивать ее сообществом!

    Reply
  39. Synoecium

    (40) а посмотрите внимательно раздел «Контакты» в публикации, консоль выложена на GitHub. Правда выложена она в виде epf файла, но никак руки не дойдут разложить с помощью precommit1c. Можете этим заняться 😉

    Reply
  40. ret

    Реально понравилось! Лаконичная простая. Особенно хорошо в УФ сделаны связи в консоли и вывод в ТЗ. Реально +++ !

    Reply
  41. Dream_kz
    UPD 19.02.2019

    — Реализована синтаксическая подсветка запросов на УФ(в т.ч. на веб-клиенте). Внешние компоненты не используются, написан свой оптимизированный по скорости алгоритм, работающий на стороне клиента (логика работы парсера перекликается с Разукрашкой). Для включения/выключения подсветки на форме предусмотрена отдельная кнопка (Ctrl+H), так как в режиме подсветки текст отображается в поле HTML документа и недоступен для редактирования.

    А где последнюю версию получить? (на гитхабе и яндексе старые лежат)

    Reply
  42. Synoecium

    (43) на гите буду выкладывать с небольшой задержкой до недели, чтобы был стимул скачать с ИС. Мне кажется это будет справедливо 🙂

    Reply
  43. Synoecium

    (42) спасибо. Приятно когда оценивают именно то, на что направлены усилия. Хотя конечно моей заслуги в создании конструктора нет — это типовой конструктор, но в формирование удобного представления ТЗ вложено прилично времени. На очереди работа с ТЗ в виде табличного документа и выгрузки/загрузки в Excel, это бывает полезно при работе с большими ТЗ в параметрах запроса или если запрос выдает результат в виде ТЗ внутри поля и нужно её сохранить в файл/перекинуть в Excel. Часть функционала по работе через табличный документ уже есть в текущей версии в режиме бета теста.

    Reply
  44. Dream_kz

    (44)

    чтобы был стимул скачать с ИС.

    Я качал уже =)

    Ну ладно, подождем.

    Reply
  45. frkbvfnjh

    Если попытаться сразу закрыть Предприятие не закрывая предварительно обработку, то выходит ошибка:

    Reply
  46. Synoecium

    (47) ага, понял, исправлю

    Reply
  47. biformatus

    работает ли в конфигурациях где вариант встроенного языка — английский?

    Reply
  48. Synoecium

    А бывают с этим проблемы? Английский язык в консоли не предусмотрен, по идее будет выглядеть также также как и в обычной конфигурации — на русском. Напишите название конфигурации — проверю

    Reply
  49. Synoecium

    (47) исправил, но баг мелкий, поэтому версию не менял. Везде залил с исправлением.

    Reply
  50. frkbvfnjh

    (51) Благодарствуем!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *