Отладка логики запроса в консоли запросов ИР

15.06.23

Разработка - Инструментарий разработчика

Облегчаем поиск причины неожиданного результата запроса в консоли запросов из подсистемы "Инструменты разработчика" (ИР)

Актуально для подсистемы “Инструменты разработчика” 6.80

Термины статьи

  • Отладка логики программного кода - поиск причин получения неожиданного результата выполнения программного кода
  • Запрос - инструкция (оператор) над таблицами базы данных
  • Пакет запросов - последовательность запросов, использующих общий набор временных таблиц
  • Запрос пакета - последовательно выполняемый запрос в пакете запросов 
  • Подзапрос или вложенный запрос - запрос, являющийся частью другого запроса
  • Проблемный запрос - запрос, выдающий неожиданный результат

Вступление

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

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

Написав или изменив запрос, мы обычно проверяем его работу в консоли запросов, чтобы убедиться в соответствии выдаваемого им результата нашим ожиданиям. Рассмотрим, какими приемами можно отлаживать логику запроса 1С в консоли запросов из подсистемы Инструменты разработчика (ИР).

Поиск проблемного запроса

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

Сериализация логики запроса

Любой подзапрос в целях отладки можно перенести в отдельный запрос пакета, создающий временную таблицу, и заменить его текст в исходном месте на выборку из этой временной таблицы. Многие консоли запросов позволяют делать это нажатием одной кнопки и консоль запросов ИР в частности.

Также в отдельные запросы пакета можно переносить и соединяемые выборки из секции “ИЗ” при наличии у них собственных отборов. Но тут уже придется делать все вручную.

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

Отладка подзапросов

Некоторые консоли запросов позволяют отлаживать подзапросы и части объединения прямо в месте их определения. Консоль запросов ИР в режиме дерева запроса так уже очень давно позволяет делать. Двойным кликом в строке дерева в ней можно выполнить любой подзапрос.

 

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

Отладка неделимого запроса

Если на входе в запрос все таблицы и вложенные запросы передают ожидаемые данные, то дальше встает задача поиска ошибки в значениях параметров или тексте этого запроса. Расхождение между ожидаемым и фактическим результатом запроса состоит из проблемных строк 3-х типов: 

  • строка с неожиданными значениями неключевых полей
  • отсутствующая строка с нужными ключевыми полями
  • лишняя строка

Таким образом дальше нам нужно разбираться с этими проблемными строками.

Для помощи в решении этой задачи в консоли запросов ИР имеется команда “Отладить строку” результата запроса. Она создает временный запрос в отдельном окне консоли с добавлением в тексте запроса значений всех однозначных базовых выражений для выбранной строки результата.

Рассмотрим работу этой команды на примерах.

Строка с неожиданными значениями неключевых полей

Имеем запрос

ВЫБРАТЬ

    КурсыВалютТ.Валюта КАК Валюта,

    ВЫБОР

        КОГДА МАКСИМУМ(КурсыВалютТ.Курс) > &МаксимальныйКурс

            ТОГДА 1

        ИНАЧЕ 2

    КОНЕЦ КАК КатегорияКурса

ИЗ

    РегистрСведений.КурсыВалют КАК КурсыВалютТ

ГДЕ ИСТИНА

    И КурсыВалютТ.Период > &ДатаНачала

    И КурсыВалютТ.Период < &ДатаКонца

СГРУППИРОВАТЬ ПО

    КурсыВалютТ.Валюта

с параметрами

Имя параметра

Значение

ДатаНачала

01.01.2006 0:00:00

ДатаКонца

01.01.2007 0:00:00

МаксимальныйКурс

34

 

выдающий для валюты USD результат КатегорияКурса=1, но мы ждали КатегорияКурса=2. 

Активируем проблемную строку результата и выполним команду “Отладить строку”.

При этом откроется новое окно консоли запросов в режиме “Расшифровки”, о чем свидетельствует заголовок формы.

В списке запросов этого окна консоли появится одноименный исходному пакет запросов расшифровки. Если исходный запрос содержит группировку (секцию СГРУППИРОВАТЬ ПО или агрегатные функции), то первым запросом пакета будет вывод всех строк, попадающих в группировку выбранной строки. Последний запрос этого пакета всегда выводит результат исходного запроса, выполненного с отбором по всем выбранным полям исходного запроса для выбранной строки, и с встроенными в текст значениями базовых выражений после группировки. Однако эти дополнительные отборы применяются разово и сразу удаляются из текста запроса расшифровки. Он же активируется при открытии окна консоли в режиме “Расшифровки”. В тексте запроса сразу выделяется то выбранное поле, колонка которого является текущей в результате исходного запроса. 

В этом примере нас интересует выбранное поле КатегорияКурса. В расшифровке его выражение выглядит так

    ВЫБОР

        КОГДА МАКСИМУМ(КурсыВалютТ.Курс){34.58} > &МаксимальныйКурс{34}

            ТОГДА 1

        ИНАЧЕ 2

    КОНЕЦ КАК КатегорияКурса

В фигурных скобках указываются представления значений выражений, находящихся слева от этих скобок. Таким образом в нашем случае мы понимаем, что результатом агрегатной функции МАКСИМУМ(КурсыВалютТ.Курс) является число 34.58, а значением параметра &МаксимальныйКурс является число 34. 

Далее мы можем активировать первый запрос расшифровки с названием “ДоГруппировки”, чтобы изучить вычисление агрегатных функций.

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

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

Отсутствующая строка с нужными ключевыми полями

Имеем запрос 

ВЫБРАТЬ

    КурсыВалютТ.Валюта КАК Валюта,

    МАКСИМУМ(КурсыВалютТ.Курс) КАК Курс

ИЗ

    РегистрСведений.КурсыВалют КАК КурсыВалютТ

ГДЕ ИСТИНА

    И КурсыВалютТ.Период > &ДатаНачала

    И НЕ (КурсыВалютТ.Валюта В (&ЗапрещенныеВалюты))

    И КурсыВалютТ.Период < &ДатаКонца

СГРУППИРОВАТЬ ПО

    КурсыВалютТ.Валюта

ИМЕЮЩИЕ МАКСИМУМ(КурсыВалютТ.Курс) < &МаксимальныйКурс

с параметрами

Имя параметра

Значение

ДатаНачала

01.01.2007 0:00:00

ДатаКонца

01.01.2006 0:00:00

ЗапрещенныеВалюты

(1): ё126

МаксимальныйКурс

50

 

и мы ожидаем в его результате строку Валюта=USD, но фактически он возвращает 0 строк. Снова выполняем команду “Отладить строку” и в ответе на вопрос выбираем вариант “Выполнить запрос без отбора”. 

При этом из текущего запроса разово удаляются отборы (до и после группировки) и выводится результат для того, чтобы пользователь смог выбрать нужную строку. Находим в таком результате запроса нужную строку и вызываем команду “Отладить строку” снова.

Получаем расшифровку с пустым результатом запроса после группировки

В нашем простом примере уже здесь можно заметить, что у нас перепутаны значения параметров “ДатаНачала” и “ДатаКонца”. В реальных ситуациях все может быть намного сложнее и заметить подобную ошибку в установке значений параметров в этом запросе может быть непросто. Поэтому переходим к запросу “ДоГруппировки”.

Этот запрос также может вернуть пустой результат. Если такое произошло, то он автоматически разово повторно выполняется без отборов и дописывает соответствующий комментарий в секцию “ГДЕ” текста запроса. Далее активируем в результате без отбора любую строку, которую мы ожидаем в результате с отбором, и снова вызываем для нее команду “Отладить строку”.

Теперь снова получаем текст запроса со встроенными значениями базовых выражений и легко находим причину отбрасывания нужной строки отбором.

Вступайте в нашу телеграмм-группу Инфостарт

запрос отладка консоль запросов ИР

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    13746    124    0    

84

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    83356    432    171    

364

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    285885    1608    423    

1220

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    16893    63    62    

74

Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    44262    122    54    

135

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    77039    147    41    

154

Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.

18300 руб.

11.09.2026    3789    5    0    

10

Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    28789    103    46    

107
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 7670 05.01.21 14:57 Сейчас в теме
Красота!
Dmitry888; mike1970; ABudnikov; +3 – Ответить
2. ПрестарелыйЗаяц 05.01.21 15:27 Сейчас в теме
О! Сергей наконец ты стал документировать свои разраработки, а то столько фич, но пока старшие товарищи носом не тыкнут.
Дмитрий74Чел; Flashill; akamuza; gorakh; mike1970; KilloN; immemor; caponid; nvv1970; Batman; +10 – Ответить
3. aspirator23 343 06.01.21 14:46 Сейчас в теме
Постоянно пользуюсь ИР. Но многие возможности за боротом. "Апатамушта" слабо документированы. Хотя конечно понимаю, что требовать от автора - это тоже перебор. Статья очень полезна.
shard; SirStefan; akamuza; gorakh; mike1970; ABudnikov; dante; immemor; rozer; +9 – Ответить
4. json 3438 08.01.21 04:09 Сейчас в теме
Инфостарт продвигает другую альтернативную разработку.

Хотя ИР в разы круче. Тулкит - пред-пред-ыдущее поколение по сравнению с ИР. И слабо верится, что Тулкит когда-нибудь сможет хотя бы приблизится по функиональности и продуманности каждой детали по сравнению ИР.

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

Как вариант, чтобы текущая версия ИР в виде расширения через обычные формы оставалась бесплатной, а портативная для тонкого клиента с низким режимом совместимости (чтобы охватить максимальное количество разработчиков) была бы платной. Плюс сделать подписку на обновления, как в Снегопате.
rozer; KOTzilla; birk; ms33; Student1C; Kesak; Shmell; michmich; siroga; MVK80; CodeNull; ubnkfl; Olenevod; akamuza; gravitator; mike1970; kuzyara; rhtr; ShiningPhoenix; +19 – Ответить
5. triviumfan 103 09.01.21 00:02 Сейчас в теме
Активно пользуюсь ИР, но тут столько наворотов... даже не знаю, попробую разобраться! :)
6. DrAku1a 1803 10.01.21 15:06 Сейчас в теме
Всё круче и круче! :)
7. _also 492 14.01.21 20:48 Сейчас в теме
Сергей, спасибо огромное за ваш инструмент! Можно попросить маленькую фичу: в консоли запросов, на вкладке Обработка строки результата сделать флаг "Обработать только первую строку". Она очень полезна. Сделали запрос, написали код обработки, оттестировали на первой строке и дальше уже запускаем полную обработку.
8. tormozit 7393 14.01.21 21:16 Сейчас в теме
(7) Я в таких случаях пользуюсь ограничением количества загружаемых строк результата. Создал задачу https://www.hostedredmine.com/issues/915456 . Зарегистрированные пользователи могут подписаться на ее изменения. Также получают уведомления те, кто описал свое пожелание в виде новой темы на официальном форуме и подписались на нее.
9. tormozit 7393 30.01.23 15:04 Сейчас в теме
В инструментах 6.61 улучшена функция выполнения запроса без отбора https://www.hostedredmine.com/issues/956992
10. tormozit 7393 02.04.23 17:46 Сейчас в теме
В инструментах 6.70 теперь встраиваются результаты логических выражений https://www.hostedredmine.com/issues/961183
11. user981381 05.02.24 13:20 Сейчас в теме
Есть простой запрос:

ВЫБРАТЬ ПЕРВЫЕ 1
СИСписаниеМатериалов.Ссылка КАК Ссылка
ИЗ
Справочник.СпецификацииИзделий.СписаниеМатериалов КАК СИСписаниеМатериалов
ГДЕ
СИСписаниеМатериалов.ПозицияКаталога В(&СписокПозиций)

Пишет "Почему нет строк"
Можно эту функцию как-то отключить, чтобы сформировать запрос именно так, как мне нужно?
Alex_Prodigy; +1 – Ответить
Для отправки сообщения требуется регистрация/авторизация