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





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

Для 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 не будет опубликован. Обязательные поля помечены *