Отладка запросов из отладчика в варианте Клиент-Сервер





Описывается способ отладки запроса, полученного через отладчик. Работает как на сервере, так и на клиенте.

Для 1С есть обработка "КонсольЗапросов", с помощью которой можно отлаживать и тестировать запросы. Но есть проблема: она не работает в отладчике и если в коде на сервере мы вычисляем сложный запрос с большим количеством параметров, особенно вида "ТаблицаЗначений", "СписокЗначений", "Массив", то протестировать такой запрос в режиме 1С Предприятие очень сложно, т.к. нужно вручную заполнить в Консоли запросов много параметров.

Чтобы этого не делать, можно сохранить запрос в буфер обмена и вставить его в немного доработанную обработку "ИнструментыРазработчикаКонсольЗапросовСОтладкой.epf". Эту обработку я взял с диска ИТС и добавил в неё кнопку "Восстановить запрос из хранилища". Теперь сложный запрос с трудными параметрами можно тестировать в режиме 1С Предприятие.

Алгоритм переноса запроса из отладчика:

1) Запускаем программу, ставим точку останова в месте выполнения интересующего нас запроса.

2) Когда отладка остановилась на нужном нам запросе, запускаем Вычислить выражение = 

ЗначениеВСтрокуВнутр(Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры))

В результате получим строку, описывающую запрос. Скопируем эту строку в буфер обмена.

3) Завершаем отладку или открываем новое окно 1С: Предприятие. В режиме 1С: Предприятие запускаем обработку ИнструментыРазработчикаКонсольЗапросовСОтладкой.epf

4) В обработке нажимаем кнопку "Восстановить запрос из хранилища". В открывшееся окно вводим строковое описание запроса из буфера обмена.

5)  Запрос со всеми параметрами загружен в КонсольЗапросов. С ним можно работать.

Есть также второй способ преобразования запроса в строку для копирования в буфер обмена: при вычислении выражения в точке останова Вместо 

ЗначениеВСтрокуВнутр(Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры))

Нужно вычислить выражение вида

ВнешниеОбработки.Создать("E:WorkИнфостартКонсольЗапросовИнструментыРазработчикаКонсольЗапросовСОтладкой.epf").ЗапросВВидеСтроки(Запрос)

где нужно указать путь доступа к обработке "КонсольЗапросов", доступный серверу 1С. Такой способ аналогичен первому способу, но он также позволяет копировать таблицы из Менеджера временных таблиц, которые будут помещены в таблицы консоли запросов с добавлением инициализирующих из запросов. 

 

Тестировалась на Управление торговлей, редакция 11 (11.4.5.111).

Платформа 1С:Предприятие 8.3 (8.3.12.1595).

13 Comments

  1. json

    Инструменты разработчика от (tormozit) или Запросник принципиально не используете. Предпочитаете самостоятельно все инструменты разрабатывать?

    У консоли запросов с ИТС есть требования к бсп и режиму совместимости.

    Reply
  2. Evg-Lylyk

    Недавно было на эту тему Отладка в упр. формах

    Reply
  3. VmvLer

    как-то слишком много телодвижений — мне будет лень столько работать руками, тем более, что есть инструменты которые избавят от лишних действий

    Reply
  4. agentz

    Это все конечно хорошо, но попробуйте отладить запрос в типовом ЗУП 3, например.

    Там используется 100500 временных таблиц и промежуточных результатов.

    Reply
  5. json

    (4) ИР вроде анализирует запрос, вытаскивает имена временных таблиц, выгружает их в таблицы, потом при отладке подгружает.

    С этим вроде порядок. Надо только потратить немного времени, чтобы разобраться, а потом экономить его при отладке сложных запросов.

    Reply
  6. agentz

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

    Reply
  7. ice-net

    (6) Так это проблема Зуп, Вам не кажется?

    Reply
  8. budidich

    (2) Спасибо, не видел. Вообще, не знал про существование альтернативных Запросников.

    Reply
  9. СергейКа

    (6) (7) Кто вам сказал что это проблема ЗУП? Это крутая фишка (!)

    Совместно с механизмом Представлений это вообще «бомба» получается, замедленного действия ))))

    В том смысле что при желании и умении отлаживается довольно легко. А если из этого чего то не хватает, то может где то и рвануть )))

    Reply
  10. ice-net

    (9) Т.е. Вы серьезно считаете, что запросы в зуп крутая фича?)

    Reply
  11. СергейКа

    (10) Ах да, забыл теги поставить <sarcasm></sarcasm>

    Ну а если серьезно, то конечно серединка-наполовинку. С одной стороны разобраться с непривычки сложно, часть можно было бы сделать проще.

    Ну а с другой стороны:

    1) когда данные обрабатываются в основном посредством запросов (не только выборка из БД, но и сами расчеты) это всегда плюс к быстродействию и ресурсоемкости.

    2) опыт, сын ошибок трудных… После более чем десятка лет работы с зарплатой — запросы в других конфигурациях часто просто элементарны. Если думаете что фича запросов только в ЗУП 3, то ошибаетесь. Посмотрите отчетность в 2.5 например )

    Reply
  12. DrAku1a

    Читаю рассылку за неделю… прям эпидемия))) Три разные публикации на одну и ту-же тему.

    Reply
  13. bob_

    в Модуле объекта правил 2032 строку, добавил попытку:

    Попытка
    ЭлементПараметр.Тип = ?(Флаг, ЭлементСписка.Значение, XMLТип(ТипЗнч(КлючЗначение.Значение)).ИмяТипа);
    ЭлементПараметр.Значение = ЗначениеВСтрокуВнутр(КлючЗначение.Значение);
    Исключение
    ЭлементПараметр.Тип = «Массив»;
    ЭлементПараметр.Значение = ЗначениеВСтрокуВнутр(КлючЗначение.Значение);
    
    КонецПопытки;

    по ошибке вылетало

    Reply

Leave a Comment

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