Обработка протестирована на следующих версиях платформы: 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 документа и недоступен для редактирования.
— Исправлен баг с вызовом функций сжатия на веб-клиенте, что мешало запустить обработку.
Жаль.
Добрый день! Пару вопросов:
1 Конструктор запроса открывается для конфигураций с режимом использования модальности — Не использовать. Например, ЗУП 3.1.6.37;
2 В управляемом приложении открывается полноценный конструктор запроса. В нем связи настраиваются на отдельной закладке?
(1) в принципе можно сделать отключаемой опцией в настройках и добавить такой функционал, у нас тоже есть человек, который
пользуются деревьями в результате запроса и он пояснил в каких ситуациях они полезны (например когда хочешь видеть итоги по группе и разворачивать нужные ветви для детализации в одном месте). Если бы я придумал как расположить такой функционал на форме не занимая лишнего места, то сделал бы в исходном варианте.
Да этот вид консоли более удачный не желе другие. Я чувствую вы зря сомневались в выкладывание и это будет бомба!)))
(3) Было бы неплохо
Удобнее консоли, чем в ИР, я чет не видел …
(7) попробуйте, вдруг понравится. Раньше пользовался в том числе ИР консолью.
(3) да, дерево нужная штука.
Итоги то строить =) и смотреть группы.
Огромное спасибо! Очень нужная вещь.
Пытался найти несколько раз….
(4)
(11)
Спасибо за поддержку)
Если можно, пишите пожалуйста, что понравилось, а что нет. Тогда будет понятно, какая фишка действительно удачная и стоит её развивать, а чего возможно не хватает. Главное чтобы предложения соответствовали подходу функционального минимализма, к которому я стремился во время создания обработки.
Спасибо, попробую вашу консоль, может по душе придётся
Добрый день, а как сделать что бы закладка связи отображалась, как на скриншоте у Сергей Бондаренко
(14) актуальный вопрос, он меня как раз натолкнул на небольшое исследование, оказывается можно открывать классический конструктор в управляемых формах(но только в толстом клиенте). Как закончу доработку — выложу. Пока можете использовать следующий код в обработчике команды вызова конструктора:
Показать
(2) спасибо за наводку, в ближайшее время сделаю доработку, чтобы при возможности открывался классический конструктор запросов, новый мне тоже очень не нравится, особенно то, что сделали со связями.
(15) Сделал так не работает
Показать
(17) что пишет? проверьте что значок # скопировался в коде
(12) Добавьте, пожалуйста, вывод результата запроса в виде дерева 🙂
Спасибо. Было лень переделывать самому, а на управляемых страдал.
Как просматривать содержимое временных таблиц?
В консоли для ОФ у меня есть кнопка по которой выводится список временных таблиц, можно выбрать любую и просмотреть содержимое.
В этой консоли нажимаю на временные таблицы, внизу выводится результат две временные таблицы. Как посмотреть их содержимое?
И вот сильно режет глаза и слух слово «униформальная», как то не по «русски» звучит может конечно есть такое слово но я значение такого слова не нашёл.
(21) двойным кликом по ячейке колонки «РезультатЗапроса», там где написано «ТаблицаЗначений(N)»
Униформальный — такого слова нет, я его сам придумал.
(22)По двойному клику открывает новое окно, в котором так же одна строка «ТаблицаЗначений(4)», если и по ней кликаю то открывается окно с кнопкой окей и цифрой 4. Таблица не расшифровывается.
По двойному клику расшифровывает только последнюю таблицу значений.
ВТ не расшифровывает, может я конечно что то не так жму.
(23) давайте разберемся в вашей проблеме, пишите в личку
(1) Реализовал данную функцию. Сам попробовал, довольно удобно для просмотра итогов 🙂
TODD22: Спасибо за помощь в борьбе с багами, исправил в новой версии.
1. Результаты могут выводится в виде дерева. Спасибо. Теперь не хватает переключателя. Сейчас я так понимаю определяет автоматически. А хотелось бы указывать самому.
2. «Просмотр временных таблиц». Если выбран этот режим, то просматривать временные таблицы можно, но результата запроса нет. Часто нужно видеть итоговый результат запроса + возможность просмотреть временные таблицы. В типовой обработке если честно удобнее.
3. «Просмотр временных таблиц». Если несколько временных таблиц, то просмотреть можно только первую таблицу, остальные пустые.
4. «Просмотр временных таблиц». Нельзя открыть несколько временных таблиц одновременно.
5. «Выполнить пакет», вообще не понял как работает. Две таблицы значений «ТаблицаЗначений(1)» при открытии которой одна запись в таблице «Количество» = 5759. Вторая таблица «ТаблицаЗначений(28926)», при открытии пустая таблица с колонкой «Количество». В общем вообще не понял что происходит.
6. Из эстетических — кнопку «Настройки» поставьте последней, а не первой.
Экспериментировал на простейшем запросе (УТ, обычные формы), без какого либо смысла, просто просмотреть как работает.
Показать
Остаюсь на стандартной консоли. Просьба хотя бы чуть-чуть тестировать обработки перед публикацией.
(28) просьба — читать описание публикации перед использованием. Там ясно указано, что используется логика из консоли Чистова, которая тщательно перенесена в УФ.
(29) Ок. Понял. Но увы заявленный функционал совсем на работает. Прошу вернуть уплаченный $m
конструктор запроса открывается стандартный? или где связи неудобно сделаны?
(31) если есть возможность, запускается классический конструктор (для этого должен быть запущен толстый клиент)
А если в результате 100000 строк, будет работать?
(33) легко, такой запрос «ВЫБРАТЬ ПЕРВЫЕ 100000 * ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный» выполнился за секунду с небольшим (миллион уже подольше, около 15 сек, из них 6 сек ушло на выгрузку в таблицу на форме)
Примерно 5 разработчиков это как?) Кто-то полупрозрачный, или не полноценный?
Обработка результата запроса возможна?
(36) да, но на примитивном уровне, вызывается окно, куда можно вписать произвольный код, выполняемый для каждой строки результата запроса. В п. 4 кратко описана эта функция.
(35) написал так, потому что некоторые не работали полностью 2 года, некоторые не сразу стали использовать эту консоль. Условно 10 человеко-лет использования тогда 🙂
Спасибо, давно такую искал
Я считаю, что такую консольку нужно без голды раздавать (в счет пожетвований поставить). Сам бы дал то что имею и развивать ее сообществом!
(40) а посмотрите внимательно раздел «Контакты» в публикации, консоль выложена на GitHub. Правда выложена она в виде epf файла, но никак руки не дойдут разложить с помощьюprecommit1c . Можете этим заняться 😉
Реально понравилось! Лаконичная простая. Особенно хорошо в УФ сделаны связи в консоли и вывод в ТЗ. Реально +++ !
— Реализована синтаксическая подсветка запросов на УФ(в т.ч. на веб-клиенте). Внешние компоненты не используются, написан свой оптимизированный по скорости алгоритм, работающий на стороне клиента (логика работы парсера перекликается с Разукрашкой). Для включения/выключения подсветки на форме предусмотрена отдельная кнопка (Ctrl+H), так как в режиме подсветки текст отображается в поле HTML документа и недоступен для редактирования.
А где последнюю версию получить? (на гитхабе и яндексе старые лежат)
(43) на гите буду выкладывать с небольшой задержкой до недели, чтобы был стимул скачать с ИС. Мне кажется это будет справедливо 🙂
(42) спасибо. Приятно когда оценивают именно то, на что направлены усилия. Хотя конечно моей заслуги в создании конструктора нет — это типовой конструктор, но в формирование удобного представления ТЗ вложено прилично времени. На очереди работа с ТЗ в виде табличного документа и выгрузки/загрузки в Excel, это бывает полезно при работе с большими ТЗ в параметрах запроса или если запрос выдает результат в виде ТЗ внутри поля и нужно её сохранить в файл/перекинуть в Excel. Часть функционала по работе через табличный документ уже есть в текущей версии в режиме бета теста.
(44)
Я качал уже =)
Ну ладно, подождем.
Если попытаться сразу закрыть Предприятие не закрывая предварительно обработку, то выходит ошибка:
(47) ага, понял, исправлю
работает ли в конфигурациях где вариант встроенного языка — английский?
А бывают с этим проблемы? Английский язык в консоли не предусмотрен, по идее будет выглядеть также также как и в обычной конфигурации — на русском. Напишите название конфигурации — проверю
(47) исправил, но баг мелкий, поэтому версию не менял. Везде залил с исправлением.
(51) Благодарствуем!