Консоль запросов с временными таблицами

Предназначена для отладки запросов с временными таблицами.
На базе обработки с ИТС (обычное приложение).
Похожа на разработку http://infostart.ru/public/19577/, но предлагает более простой сценарий использования.

Позволяет "отловить" запрос с параметрами и временными таблицами во время отладки и перенести в консоль.

Платформа 8.3.5 и старше, обычное приложение.

Использование:

  1. Разместить обработку в каталоге, доступном при исполнении кода.
    Для клиент-серверного варианта, каталог должен быть доступен по сети пользователю, под которым работает служба сервера 1с (либо разместить прямо на сервере).  
  2. Остановиться в отладчике перед выполнением запроса. 
  3. Вычислить выражение:
    ВнешниеОбработки.Создать("\ПутьКОбработкеКонсольЗапросов.epf").СериализоватьЗапрос(Запрос)
  4. Скопировать результат вычисления (строку XML) в буфер обмена. 
  5. В режиме Предприятие вставить скопированный запрос по кнопке "Загрузить сериализованный" в контекстном меню дерева запросов. 
  6. Всё, можно выполнять запрос. 

Содержимое сохраненных временных таблиц можно просматривать по кнопке "Врем. таблицы".
Временные таблицы сохраняются в файл вместе с деревом запросов и загружаются из него.
При копировании запроса, временные таблицы тоже копируются. 

Более никакими "фичами" консоль не обладает.

Алгоритм поиска имен временных таблиц в тексте запроса не идеален.
В частности, таблицы определяются только в предложении ИЗ, условия не анализируются.
В таких случаях, нужно явно перечислить имена временных таблиц:
 

ВнешниеОбработки.Создать("\КомпШараКонсольЗапросов.epf").СериализоватьЗапрос(Запрос, "Вт1, Вт2, Вт3")

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

9 Comments

  1. webester

    Я просто оставлю это здесь. Поиск как известно не для простых смертных.

    Reply
  2. Mleg

    (1) webester, вы бы показали конкретно инструмент, который делает то же самое.

    А так вы просто умничаете.

    Я вот не нашел.

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

    Reply
  3. DenisCh

    А что, инструменты разработчика (в том числе портативные) перестали решать эту задачу?

    Reply
  4. IgorXml

    (3) DenisCh, Не совсем по теме, но есть способ вытащить №-запрос или вирт.таблицу из запроса без всяких инструментов:

    РезультатЗапроса = Запрос.ВыполнитьПакет();
    N_Запрос =   РезультатЗапроса[Номер].Выгрузить();
    Reply
  5. webester

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

    http://infostart.ru/public/175229/

    (4)Автор в (2) говорит, что читатьписать код это сложно. Функции там писать или что то еще, ну его… проще создавать внешние обработки.

    То есть вот это вставить в «вычислить выражение» сложно(я сам не пробовал, я работаю только с измененными конфигурациями, но нет причин по которым не будет работать)

    ВнешниеОбработки.Создать(«\ПутьКОбработкеОбработкаПросмотраВТ.epf»).ПосмотретьВТ(Запрос, «НужнаяТаблица»)

    А то что предлагает автор нет. Кхм.. ну может быть. Сама фишка в том, что он сериализует в текст данные ВТ как я понял.

    Reply
  6. Mleg

    (3) DenisCh, Решает. Но не всегда, потому что по-другому.

    Там запрос переносится только в консоль запросов, запущенную в отлаживаемом сеансе.

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

    У меня же можно остановиться в сеансе управляемого приложения, засериализовать запрос, а отлаживать в другом сеансе, запустив обычное приложение.

    Кроме того, если вы не используете ИР, требуется гораздо большее время на «холодный» старт.

    Я же предлагаю такую же «фичу» во всем привычной и многими любимой простой Консоли запросов с ИТС,

    Reply
  7. Mleg

    (5) webester, «Чукча не читатель, чукча писатель».

    Моя обработка решают другую задачу:

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

    Просмотр содержимого одной временной таблицы — это вопрос слишком простой и тривиальный, чтобы целую разработку публиковать. Кроме того, в современных типовых (УТ 11) уже есть для этого функция «ПоказатьВременнуюТаблицу» (в модуле СкладыСервер что ли).

    Reply
  8. tormozit

    (6) «не встраивая подсистему, не разрешая использовать обычные формы в управляемом приложении, ничего не получится, т.к. консоль запросов в ИР — обычная форма»

    Не совсем так. В ИР (включая портативный) есть и режим отложенной отладки, когда отладка выполняется в другом сеансе асинхронно. Портативный — http://www.youtube.com/watch?v=hiw_aYVOvFc, подсистема — https://www.youtube.com/watch?v=54WwCC4j03U . Поэтому не обязательно строго в управляемом приложении открывать консоль запросов.

    Reply
  9. SeverBaP

    В модуле объекта есть ошибка, нужно заменить на: Запрос.Текст = СтрокаИзМассиваПодстрок(Подзапросы, «;

    Reply

Leave a Comment

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