Помощь - Поиск - Пользователи - Календарь
Полная версия: Консоль запросов доработал малость
ITLand: Информационные технологии в управлении бизнесом (EPM, PMO, ERP, MRP II, FRM, CRM, HRM, & 1С:Предприятие 8.3/8.2/8.1/8.0) > Форумы по решениям и платформе "1С:Предприятие 8" (8.3/8.2/8.1/8.0) > Платформа "1С:Предприятие 8" (8.3/8.2/8.1/8.0) > Проекты на системе "1С:Предприятие 8" (8.3/8.2/8.1/8.0)
DmitrO
Дополненый функционал
Рекурсивное составление текста запроса
В типовых конфигурациях достаточно часто применяется способ задания текста запроса частями в нескольких переменных с последующей конкатенацией в общий текст запроса и выполнением. Этот подход облегчает разработку и понимание общего текста запроса и приветствуется, однако он сильно затрудняет отладку таких запросов вцелом, и выполнение их частей в целях просмотра промежуточных результатов.
Предлагается следующее решение:
Из программного модуля через буфер обмена можно скопировать определение текста запроса (вместе с присвоением его переменной модуля), после этого нажать кнопку Обработать на панели. Имя переменной будет установлено как имя запроса, а текст будет обработан (очищен от |). При этом вставки в текст запроса вида "+Подзапрос+" будут сохранены в тексте, а также созданы одноименные подчиненные узлы в дереве запросов. Эти запросы (подзапросы) можно скопировать из модуля и обработать аналогичным образом. Т.о. можно заполнить все дерево большого запроса. При этом если конкретный подзапрос встречается вторично, при обработке текста запроса подчиненные узлы будут созданы с именем с префиксом @, это означает что это ссылка на подзапрос который должен находиться в том же дереве запросов и ему не нужно устанавливать текст.
После того как все тексты запросов вставлены и обработаны, нужно установить параметры у корневого запроса. Выполнять можно как сам корневой запрос, так и отдельные его части (подзапросы). При выполнении конечный текст запроса собирается по подчиненным узлам рекурсивно.
При выполнении подзапроса, коллекция параметров будет взята от родительских запросов рекурсивно (т.е. в любом случае дойдет до корня), но значения могут быть переопределены в текущем подзапросе. В подзапросах можно добавлять предложение упорядочивания, при этом оно может оставаться в тексте подзапроса даже при выполнении запросов верхнего уровня, т.к. при рекурсивной сборке конечного запроса, предложение упорядочивания вырезается.
Способы задания значения параметра
Установить флажок в графе "В", нажать кнопку выбора значения.
- значением (было в стандартной обработке);
- выражением (было в стандартной обработке);
- массивом значений определенного типа;
- программным модулем, который должен установить переменную "Параметр" в значение параметра.
Некоторые незначительные усовершенствования в эргономике
Скрывать/показывать дерево запросов, параметры вводятся в общей главной форме, ТП параметров тоже можно скрыть/показать.

Удобно искать ошибки в запросах типовых конфигураций.
Качать здесь
GvH
При нажатии на кнопку "Получить текст модуля"... получаю текст в котором
как-то странно куда-то переносится строка содержащая текст "Запрос.Текст".
DmitrO
Строка модуля в которой устанавливается текст запроса (Запрос.Текст = ) есть ниже, перед самым выполнением. А в самом начале должно быть присвоение текста запроса в переменную.
Надо просто задать имя этого запроса: в дереве запросов нажать F2.
Это и будет имя переменной в сгенеренном модуле.
GvH
Цитата(DmitrO @ Feb 22 2007, 17:29) [snapback]96848[/snapback]
А в самом начале должно быть присвоение текста запроса в переменную.

Да. Понятно.
SirStefan
Я тож переделывал, но не так круто smile.gif Очень удобно. Спасибо.
Предложения:
1. Имя из названия запроса в текст переносить без пробелов и у каждого слова первая буква заглавная. (те. из "По реализациям" получать "ПоРеализациям") Поскольку имена запросов удобно делать понятными, а текст запроса хочется сразу вставлять и работать - не проверяя корректность. Ну и если у запроса имени нет - подставлять "ТекстЗапроса" по умолчанию
2. Очень удобно сделать окно, где просто будет выводится количество строк ТЗ. (В некоторых запросах проверяется первоначально именно количество строк. Для себя пока переделал добавив окно в командную панель как недоступную кнопку)
3. Сделать кнопку "Скрывать/показывать панель результатов", или объединить ее с показом параметров (Когда правим сам запрос - чем больше текста тем удобнее)
DmitrO
Согласен по всем 3-м пунктам.
SirStefan
И еще одна пожелание: чтобы как при нажатии Выполнить при выделенном тексте выполняется кусок запроса, так же и при нажатии "Получить текст модуля" - формировался бы только нужный кусочек кода, а не весь код

Вот примерно так:
Не сделал только общее скрытие всех панелей, кроме текста запроса
DmitrO
Вышла новая версия обработки. (v1.3) Качать там же.

Основные изменения:
- добавлена возможность скрывать/показывать результат запроса (вместе с параметрами), т.о. можно во все окно редактировать текст запроса;
- движок сокрытия полностью переписан под метод свертки элементов управления (метод ЭУ Свертка), что позволило избежать некорректной работы привязок формы при изменени размеров (наблюдалось в предыдущей версии);
- форма задания значения параметра теперь открывается не модально;
- при формировании текста модуля по запросу имя запроса обрабатывается для того чтобы соответствовать правилам именования переменных (SirStefan);
- отображается статистика по результату запроса: количесто строк в результате запроса и время выполнения запроса в секундах с точностью до миллисекунд;
- появилась возможность хранить несколько таблиц с результатами запросов (кнопка Отложить результат).
GvH
Цитата(DmitrO @ May 25 2007, 13:28) [snapback]100943[/snapback]
Вышла новая версия обработки. (v1.3) Качать там же.

А кнопка "Получить текст модуля" у всех работает?
GvH
Да.
Не большое замечание.
Кнопка почему-то то работает, то не работает.
DmitrO
..ну что значит не работает?
Наверно ошибка какая-то формируется? Какая?
GvH
Цитата(DmitrO @ May 31 2007, 12:10) [snapback]101097[/snapback]
..ну что значит не работает?
Наверно ошибка какая-то формируется? Какая?

Никакой ошибки нет.
Открываю консоль запросов. Конструктором запроса сформирую какой-нибудь текст запроса. Нажимаю кнопку ОК в конструкторе запроса
и после нажимаю кнопку Получить текст модуля.

Получаю следующее:
Код
    Запрос = Новый Запрос;
    
    Запросы = "
    |
    |";
    
    
    
    Запрос.Текст = Запросы;
    РЗ = Запрос.Выполнить();


Поэтому и вопрос: где Текст запроса?
DmitrO
сие есть БАГ! smile.gif Поправил.

Вышла новая версия (v1.4).
- Исправлены ошибки при формировании текста модуля.
SirStefan
Присоединил новую версию (v1.4.2). biggrin.gif
Пофиксены баги с "Получить текст модуля" :

1. Если запрос внесен, но не сохранен - не выдавал текст модуля
2. Если запрос изменен - выдавал старый текст модуля
3. Если у параметра запроса тип = "Неопределено" вываливался с ошибкой

З.ы. Фиксил быстро, т.к. нет времени - посему мож и будут баги, у меня по крайней мере работает
З.з.ы. А на сайте висит, что версия 1.3 - я сперва даж заволновался smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия IP.Board © 2001-2020 IPS, Inc.