Как посмотреть результат запроса 1с в отладчике
Перейти к содержимому

Как посмотреть результат запроса 1с в отладчике

  • автор:

Как посмотреть результат запроса 1с в отладчике

Уважаемые эксперты 1С,

Вот запрос из учебника Радченко, который я разбираю:

Запрос.УстановитьПараметр(«ВидНоменклатуры», Перечисления.ВидыНоменклатуры.Услуга);
Запрос.УстановитьПараметр(«ДатаНачала», ДатаНачала);
Запрос.УстановитьПараметр(«ДатаОкончания», ДатаОкончания);

Проблема в том, что запрос, кажется, не «ловит» то, что нужно.

Вот, что получилось у меня при просмотре переменных Результат и ВыборкаОбщийИтог:

Результат.Колонки КоллекцияКолонокРезультатаЗапроса КоллекцияКолонокРезультатаЗапроса

Выручка КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Выручка» Строка
ТипЗначения Null, Число ОписаниеТипов
Ширина 32 Число

Представление КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Представление» Строка
ТипЗначения Null, Строка ОписаниеТипов
Ширина 32 Число

Услуга КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Услуга» Строка
ТипЗначения Null, Справочник ссылка: Номенклатура ОписаниеТипов
Ширина 25 Число

Выручка Ошибка чтения значения
Представление Ошибка чтения значения
Услуга Ошибка чтения значения

Как посмотреть в отладчике, что было выбрано в результате запроса?

Заранее благодарю за совет.

результат = запрос.выполнить().выгрузить()
и наслаждайтесь рассмотрением таблицы значений в Результат.

Как посмотреть результат запроса 1с в отладчике

Здравствуйте! В 7.7 чтобы посмотреть результат запроса в отладчике, можно было просто выгрузить его в ТЗ и потом в табло указать ТЗ.ВыбратьЗначение(). В 8.2 такого, конечно, не сделаешь, но есть какие-либо другой способ сделать это в процессе отладки?

ТЗ в табло + F2
ТЗ.ВыбратьСтроку()

В отладчике смотришь строку с нужным номером Р
результат[p]

рез — в watch, дописываем .Выгрузить() — имеем ТЗ. Дальше по накатанной тропинеке

> Дальше по накатанной тропинеке

Три приема отладки запросов в типовых конфигурациях

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

И вот Вы дорабатываете такой запрос – а он возвращает не тот результат, который ожидается.

Как найти причину? Нужно отладить запрос.

И нужно уметь это делать так, чтобы не терять на это кучу времени.

В серии из трех видеоуроков мы рассмотрим базовые приемы отладки, которые часто используются на практике:

  • Разберем базовый подход, как в консоли запросов сформировать и отладить результирующий пакетный запрос, при помощи которого получаются данные.
  • Научимся прямо в отладчике просматривать содержимое временных таблиц и результата запроса, чтобы проанализировать отдельные этапы выполнения запроса.
  • Также рассмотрим удобный прием – отложенную отладку. С помощью одной команды в отладчике получим в консоли итоговый текст выполняющегося запроса, значения параметров, содержимое временных таблиц. Это упрощает отладку, поскольку не нужно вручную в консоли вводить все указанные данные.

При работе с типовыми конфигурациями – незаменимые навыки как для новичков, так и для профи : )

Длительность видео – 52 минуты.

Как в консоли сформировать результирующий пакет запросов для отладки

Ключевые моменты видео:

  • 00:00 – Введение
  • 01:45 – Демонстрация обработки Отладка запросов с временными таблицами
  • 05:14 – Приемы отладки запроса с временными таблицами при помощи консоли запросов
  • 08:48 – Плюсы и минусы подхода сборки текста запроса в консоли запросов
  • 10:15 – Итоги

Удобный просмотр результата запроса с большим количеством временных таблиц

  • Просмотр всех таблиц менеджера.png
  • Пакет запроса с промежуточными данными.png
  • Таблицы менеджера временных таблиц.png
  • Просмотр одной таблицы менеджера.png

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

Эта статья именно про удобный просмотр содержимого большого пакетного запроса в режиме отладки. Когда нужно видеть, что получилось в одной ВТ, что в другой, в третьей, потом опять вернуться в первую, ну в общем, вы понимаете, о чем я. Работать с запросами, содержащими большое количество временных таблиц, приходится очень часто. Например в механизмах расчета зарплаты в ЗУП, в подборе видов запасов или расчете себестоимости в ЕРП или УТ и во многих других.

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

И так, ближе к делу.

Не для кого не секрет, что начиная с платформы 1С 8.3.8 появился очень удобный механизм для просмотра результата выполнения пакетного запроса.

Во-первых , у объекта встроенного языка «Запрос» появился новый метод «ВыполнитьПакетСПромежуточнымиДанными», который позволяет получить результат с промежуточными результатами временных таблиц:

Выполнение пакета с промежуточным результатом

Напомню, существующий ранее метод «ВыполнитьПакет» возвращает в результате выполнения только данные о количестве строк временных таблиц.

Во-вторых , у объекта встроенного языка «МенеджерВременныхТаблиц» появилось новое свойство «Таблицы», которое содержит коллекцию временных таблиц хранящуюся в менеджере:

Таблицы менеджера ВТ

Для каждой временной таблицы можно выполнить метод «ПолучитьДанные», который содержит результат запроса этой таблицы. Затем можно выгрузить данные в таблицу значений. Полный синтаксис ниже:

МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить() 

В результате, можно получить данные каждой таблицы менеджера ВТ в виде таблицы значений:

Просмотр таблицы менеджера ВТ

Пользоваться объектом «МенеджерВременныхТаблиц» более удобно, так как можно посмотреть все таблицы, сформированные для менеджера. Таблицы могут формироваться отдельно, в разных процедурах. Также можно увидеть имена временных таблиц в свойстве таблицы менеджера «ПолноеИмя». Это очень помогает при большом их количестве.

Все это, без условно, очень удобно. Раньше для этих же целей приходилось использовать специальные процедуры общих модулей «ПоказатьВременнуюТаблицу» для просмотра содержимого пакетного запроса или изворачиваться, как описано здесь. Теперь всего этого делать не нужно.

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

МенеджерВременныхТаблиц.Таблицы

А потом подставлять этот номер в выражение:

МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить() 

Хотелось бы быстро перемещаться между таблицами менеджера и просматривать их содержимое.

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

Код функции следующий:

//ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц) Функция ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц) Экспорт СтруктураДанных = новый Структура; Для каждого Таблица Из МенеджерВременныхТаблиц.Таблицы Цикл ТЗ_ВыборкаИзТаблицы = Таблица.ПолучитьДанные().Выгрузить(); СтруктураДанных.Вставить(Таблица.ПолноеИмя, ТЗ_ВыборкаИзТаблицы); КонецЦикла; Возврат СтруктураДанных; КонецФункции 

Данная функция создает структуру, в которую добавляет все временный таблицы менеджера ВТ. Ключ структуры – имя таблицы, значение – данные этой таблицы, выгруженные в таблицу значений.

Теперь в режиме отладки, в форме расчета выражения можно вставить следующую строку:

ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц)

Если менеджер ВТ называется по другому, соответственно, нужно изменить имя переменной.

В результате мы получаем структуру с данными, которую можно удобно и быстро просматривать:

Просмотр всех таблиц менеджера ВТ

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

Расширение с общим модулем и приведенной в статье экспортной функцией можно скачать ниже.

Расширение можно использовать для любой конфигурации 1С, работающей в режиме совместимости 8.3.12.

Другие мои статьи из серии «практика программирования»:

  1. Отслеживание выполнения фонового задания
  2. Чеки ККМ для расчетов с ИП по безналу. Новые обязательные реквизиты в чеке
  3. Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4
  4. Исправление отрицательных остатков по организациям в УТ 11.4, КА 2.4, ЕРП 2.4. Интеркампани, механизм формирования резервов

Добавить комментарий

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