Консоль запросов 1С 8.3 для управляемых форм: работа с параметрами, ВТ и ИИ-помощником
Консоль запросов 1С 8.3 для управляемых форм — это внешняя обработка (.epf), в которой разработчик или аналитик собирает и выполняет запросы в режиме «1С:Предприятие» (БП 3.0, ERP, КА, УТ 11, ЗУП 3.1, УНФ) без изменения конфигурации. Под капотом обработка создаёт объект Новый Запрос, назначает ему Новый МенеджерВременныхТаблиц, заполняет коллекцию Запрос.Параметры и вызывает Запрос.ВыполнитьПакетСПромежуточнымиДанными() для просмотра каждого шага пакета.
При отладке проверяйте точность конца периода (КонецДня() с временем 23:59:59 вместо 00:00:00), для условий В (&Список) передавайте СписокЗначений или Массив, а перед помещением ТаблицаЗначений во временную таблицу задавайте всем колонкам ОписаниеТипов с фиксированной длиной строки в КвалификаторыСтроки. Если искать регистры вручную долго, используйте ИИ Консоль запросов 1С — агент сам изучит метаданные вашей базы и соберёт запрос по описанию задачи.
Зачем нужна консоль запросов 1С 8.3 на управляемых формах
В типовых конфигурациях на управляемых формах (1С:Бухгалтерия 3.0, 1С:ERP Управление предприятием, Комплексная автоматизация, Управление торговлей 11, ЗУП 3.1, УНФ) любой сложный отчёт, заполнение документа или закрытие месяца строится на многошаговых пакетных запросах. Если проверять каждое изменение текста запроса через сохранение обработки или отчёта в Конфигураторе и EDT, на одну итерацию уходят минуты.
Консоль запросов 1С 8.3 управляемые формы решает эту задачу в пользовательском режиме: вы открываете внешнюю обработку через «Файл — Открыть» или подключаете её в разделе «НСИ и администрирование — Печатные формы, отчёты и обработки — Дополнительные отчёты и обработки», вызываете штатный конструктор запроса 1С, меняете условия и за долю секунды видите таблицу результата.
- Отладка без перезапуска сеанса: редактирование секций
ВЫБРАТЬ,ГДЕ,СОЕДИНЕНИЕи параметров виртуальных таблиц происходит на живых данных информационной базы. - Инспекция промежуточных временных таблиц: в отличие от обычного вызова
Запрос.Выполнить(), возвращающего только итоговую выборку, консоль показывает содержимое каждой ВТ (ПОМЕСТИТЬ ВТ_Заказы,ПОМЕСТИТЬ ВТ_Остатки) и число строк на каждом шаге пакета. - Быстрая сверка регистров для аналитика: консоль запросов для пользователя 1С ERP или ЗУП 3.1 позволяет проверить движения документа по регистрам накопления, сведений и расчёта без прав на Конфигуратор.
- Экспорт кода в модуль: готовый текст запроса вместе с кодом инициализации параметров
Запрос.УстановитьПараметр(...)копируется одной кнопкой в процедуру серверного модуля.
Как консоль запросов выполняет запрос и находит параметры
Внутри серверного модуля управляемой формы любой консоли запросов работают четыре базовых объекта платформы 1С:Предприятие 8.3: Запрос, МенеджерВременныхТаблиц, ОписаниеПараметровЗапроса и РезультатЗапроса. Когда вы нажимаете кнопку «Заполнить параметры», консоль вызывает метод Запрос.НайтиПараметры().
&НаСервере
Процедура ЗаполнитьПараметрыЗапросаНаСервере(ТекстЗапроса)
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
// Платформа сама парсит все вхождения &Имя в тексте
НайденныеПараметры = Запрос.НайтиПараметры();
Для Каждого ОписаниеПараметра Из НайденныеПараметры Цикл
Сообщить("Параметр: " + ОписаниеПараметра.Имя
+ ", тип: " + Строка(ОписаниеПараметра.ТипЗначения));
КонецЦикла;
КонецПроцедуры
Метод НайтиПараметры() анализирует синтаксис запроса, находит все выражения с амперсандом (&Организация, &Период, &СписокНоменклатуры) и по контексту полей метаданных выводит ожидаемый ОписаниеТипов в свойстве ОписаниеПараметраЗапроса.ТипЗначения. После того как пользователь заполнил значения в таблице формы, консоль передаёт их через Запрос.УстановитьПараметр(Имя, Значение).
&НаСервере
Функция ВыполнитьЗапросСПараметрами(ТекстЗапроса, СтруктураПараметров)
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Для Каждого КлючИЗначение Из СтруктураПараметров Цикл
Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Как задавать сложные параметры в консоли запросов 1С
Большинство расхождений между результатом в консоли запросов и результатом в боевом отчёте или документе возникает из-за того, что параметры в форме консоли заданы не тем типом или с неточной границей времени. Разберём четыре самых частых случая.
1. Границы дат с временем 23:59:59 и СтандартныйПериод
Если в поле параметра типа Дата выбрать календарную дату 31.10.2026 и не указать время, платформа передаст в запрос значение 31.10.2026 00:00:00. В результате:
- при условии
Док.Дата МЕЖДУ &НачалоПериода И &КонецПериодавсе документы за 31 октября, проведённые в09:15:00или18:40:25, выпадут из выборки; - в виртуальной таблице
РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментКонца, ...)параметрПериодне включает саму секунду границы (если не переданаГраницасВидГраницы.Включая), поэтому на00:00:00вы увидите остатки только на начало дня.
В консоли запросов на управляемых формах для закрытия периода указывайте время 23:59:59 вручную в поле ввода даты, используйте тип СтандартныйПериод (он сам приводит конец интервала к концу суток 23:59:59) либо оборачивайте параметр прямо в тексте запроса функцией КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ).
2. СписокЗначений и Массив для оператора В (&Список)
Когда в секции ГДЕ или параметре виртуальной таблицы написано Номенклатура В (&СписокНоменклатуры), передавать одиночную ссылку нельзя, если нужно проверить отбор по нескольким элементам. В форме консоли выберите для параметра тип «Список значений» (СписокЗначений), добавьте элементы справочника или перечисления. Во встроенном языке 1С в такой параметр одинаково штатно передаются как СписокЗначений, так и Массив.
3. Пустые ссылки и предопределённые значения через ЗНАЧЕНИЕ(...)
Чтобы проверить в запросе незаполненный реквизит справочника или документа, не обязательно создавать пустой параметр в таблице параметров консоли. Намного надёжнее и нагляднее использовать в самом тексте запроса литерал ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) или конкретное перечисление ЗНАЧЕНИЕ(Перечисление.ВидыОпераций.Реализация). Если же пустая ссылка нужна именно в параметре (например, вы тестируете неизменяемый текст чужого запроса с &ПустойДоговор), выберите в консоли тип СправочникСсылка.ДоговорыКонтрагентов и оставьте поле значения незаполненным.
4. Типизированная ТаблицаЗначений для помещения во ВТ
Если отлаживаемый запрос начинается с конструкции ВЫБРАТЬ ТЗ.Номенклатура, ТЗ.Количество ПОМЕСТИТЬ ВТ_Товары ИЗ &ТЗ КАК ТЗ, консоль запросов позволяет сконструировать ТаблицаЗначений в отдельном диалоге. Здесь действует жёсткое правило платформы 1С 8.3: у каждой выбираемой колонки ТЗ должен быть задан конкретный тип (не «Произвольный»), для чисел — КвалификаторыЧисла, а для строковых колонок — ненулевая фиксированная длина (например, Строка(150)). Если оставить строку неограниченной длины (Длина = 0), запрос упадёт с исключением Тип не может быть выбран в запросе.
// Пример текста запроса для проверки всех 4 видов параметров в консоли
ВЫБРАТЬ
ВТ_Товары.Номенклатура КАК Номенклатура,
ВТ_Товары.Артикул КАК Артикул,
ВТ_Товары.КоличествоПлан КАК КоличествоПлан
ПОМЕСТИТЬ ВТ_Товары
ИЗ
&ТЗ КАК ВТ_Товары
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Товары.Номенклатура КАК Номенклатура,
ВТ_Товары.Артикул КАК Артикул,
ВТ_Товары.КоличествоПлан КАК КоличествоПлан,
ЕСТЬNULL(Остатки.ВНаличииОстаток, 0) КАК ОстатокНаСкладе
ИЗ
ВТ_Товары КАК ВТ_Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ),
Склад В (&СписокСкладов)
И Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК Остатки
ПО ВТ_Товары.Номенклатура = Остатки.Номенклатура
Пошаговый анализ пакетного запроса и временных таблиц
Когда сложный отчёт в 1С:ERP или БП 3.0 выдаёт пустую таблицу или задваивает суммы в два-три раза, искать ошибку в итоговом (десятом по счёту) пакете бесполезно. Нужно локализовать, на каком именно шаге пакета пропали строки или размножились записи из-за некорректного ЛЕВОЕ СОЕДИНЕНИЕ.
Для этого в платформе 1С 8.3 предусмотрен метод Запрос.ВыполнитьПакетСПромежуточнымиДанными(). В отличие от обычного Запрос.ВыполнитьПакет(), который для запросов с конструкцией ПОМЕСТИТЬ ВТ_Имя возвращает лишь служебный результат с одной ячейкой (количеством помещённых записей), метод ВыполнитьПакетСПромежуточнымиДанными() сохраняет полные выборки всех промежуточных временных таблиц.
&НаСервере
Процедура РазобратьПакетПоШагам(ТекстПакета, СтруктураПараметров)
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = ТекстПакета;
Для Каждого Парам Из СтруктураПараметров Цикл
Запрос.УстановитьПараметр(Парам.Ключ, Парам.Значение);
КонецЦикла;
// Получаем полные данные каждого пакета, включая запросы с ПОМЕСТИТЬ
МассивРезультатов = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
Для Индекс = 0 По МассивРезультатов.ВГраница() Цикл
ТекРезультат = МассивРезультатов[Индекс];
ТаблицаШага = ТекРезультат.Выгрузить();
Сообщить("Шаг " + Строка(Индекс + 1)
+ ": строк = " + Строка(ТаблицаШага.Количество()));
КонецЦикла;
// Дополнительно можно прочитать любую живую ВТ из МенеджерВТ.Таблицы
Для Каждого ВТ Из МенеджерВТ.Таблицы Цикл
ДанныеВТ = ВТ.ПолучитьДанные().Выгрузить();
Сообщить("ВТ " + ВТ.ПолноеИмя + ": записей = " + Строка(ДанныеВТ.Количество()));
КонецЦикла;
КонецПроцедуры
В интерфейсе консоли запросов на управляемых формах переключение между пакетами позволяет за 3 шага найти источник бага:
- Проверьте количество строк по шагам: если в
ВТ_Документыбыло 120 строк, а в следующем пакете послеЛЕВОЕ СОЕДИНЕНИЕ ВТ_КурсыВалютстало 360 строк — значит, в правой таблице соединения ключ неуникален (например, не сгруппировали по валюте или забыли фильтр по виду курса). - Проверьте
NULLпосле соединений: если в следующем пакете стоит условиеГДЕ ВТ_Оплаты.Сумма > 0безЕСТЬNULL(ВТ_Оплаты.Сумма, 0), тоЛЕВОЕ СОЕДИНЕНИЕфактически превращается во внутреннее и отсекает все неоплаченные документы. - Сверьте дерево группировок: если в запросе используется конструкция
ИТОГИ СУММА(...) ПО ОБЩИЕ, Склад, Номенклатура, переключите режим просмотра результата в консоли с обычного списка на иерархическое дерево (в коде ему соответствуетРезультат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)или обход черезРезультат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)). Так вы сразу проверите, на каких уровнях считаются агрегаты.
Чем классическая консоль запросов ИТС отличается от ИИ Консоли запросов 1С
Стандартная обработка «Консоль запросов» с диска ИТС (или её аналоги для управляемых форм) — отличный инструмент, когда вы уже точно знаете, в каких регистрах лежат нужные цифры, как называются измерения и какие параметры ждут виртуальные таблицы. Но в конфигурациях масштаба 1С:ERP 2.5, КА 2.5 или ЗУП 3.1 насчитываются тысячи объектов метаданных, и львиная доля времени уходит не на выполнение запроса, а на поиск нужных таблиц и связей в Конфигураторе.
В ИИ Консоли запросов 1С от Aether Lab процесс устроен иначе: агент работает через десктоп-клиент на вашем компьютере, сам видит структуру вашей конкретной базы (включая все нетиповые реквизиты и расширения), по текстовому описанию задачи составляет запрос, сам проверяет его выполнение на базе и выводит готовую таблицу или отчёт.
| Задача при работе с запросом | Классическая Консоль запросов (ИТС, .epf) | ИИ Консоль запросов 1С (Aether Lab) |
|---|---|---|
| Поиск нужных регистров и реквизитов | Вручную в дереве Конфигуратора / EDT или конструкторе запроса | Агент сам находит регистры, справочники, документы и нетиповые доработки вашей базы |
| Написание пакетного запроса с ВТ | Разработчик вручную собирает пакеты, соединения, ЕСТЬNULL и ВЫРАЗИТЬ |
Достаточно описать задачу словами — агент генерирует готовый пакетный запрос по метаданным |
| Заполнение параметров и типизация ТЗ | Ручной ввод каждого параметра, ручная настройка типов колонок ТаблицаЗначений |
Агент сам подбирает ссылки в базе, выставляет границы дат и выполняет запрос |
| Пошаговая диагностика дублей и пустых выборок | Ручной просмотр промежуточных ВТ и комментирование условий в секции ГДЕ |
Агент анализирует промежуточные выборки пакета и объясняет, на каком шаге теряются или двоятся строки |
| Порог входа для аналитика и консультанта 1С | Нужно уверенно владеть синтаксисом языка запросов 1С 8.3 и знать структуру регистров | Можно задать вопрос на обычном языке и получить как готовую таблицу с цифрами, так и чистый код запроса |
Частые ошибки при работе в консоли запросов 1С 8.3
- Конец периода задан без времени (
00:00:00). Самая частая ловушка при проверке документов и движений за день или месяц: все документы последнего дня с временем больше00:00:00не попадают в отборМЕЖДУ. Всегда выставляйте время23:59:59либо используйтеКОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ). - Параметр условия поставлен во внешнем
ГДЕвместо параметров виртуальной таблицы. Если написатьИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период) КАК Остатки ГДЕ Остатки.Склад = &Склад, СУБД сначала рассчитает итоги по всем складам, и только потом отфильтрует их (а при расчёте оборотов или среза последних результат вообще изменится логически!). Передавайте отбор по измерениям строго внутрь скобок виртуальной таблицы:Остатки(&Период, Склад = &Склад). - Ошибка «Тип не может быть выбран в запросе» при передаче
ТаблицаЗначений. Возникает, когда у колонки ТЗ в параметрах консоли оставлен тип «Произвольный» или для типаСтрокауказана длина0(неограниченная). Задайте точный тип и фиксированную длину строки (например,100). - Разыменование полей составного типа через точку без
ВЫРАЗИТЬ. Обращение видаРегистратор.Контрагентпо измерению или регистратору составного типа заставляет платформу генерировать в SQL левые соединения со всеми десятками таблиц документов, входящих в тип. Ограничивайте тип черезВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент. - Условие по полю правой таблицы в секции
ГДЕпослеЛЕВОЕ СОЕДИНЕНИЕ. ЗаписьГДЕ ПраваяТаблица.ВидЦены = &ВидЦеныотсекает все строки левой таблицы, где совпадений не нашлось (так какNULL = &ВидЦеныдаёт ложь). Переносите такие условия в секциюПОсамого соединения либо учитывайтеЕСТЬ NULL. - Забыли
УНИЧТОЖИТЬпри повторном создании ВТ с тем же именем в одном пакете. Если в длинном пакетном запросе имя временной таблицы переиспользуется, перед повторнымПОМЕСТИТЬ ВТ_Данныеявно удаляйте старую таблицу запросомУНИЧТОЖИТЬ ВТ_Данные.
Частые вопросы о консоли запросов 1С 8.3
Как открыть консоль запросов в 1С 8.3 на управляемых формах (ERP, БП 3.0, ЗУП 3.1, УТ 11)?
В тонком клиенте нажмите «Файл — Открыть» и выберите файл внешней обработки (.epf). Если главное меню скрыто, нажмите на иконку настроек в правом верхнем углу окна — «Файл — Открыть». В базах с ограниченными правами или в веб-клиенте подключите обработку через раздел «НСИ и администрирование — Печатные формы, отчёты и обработки — Дополнительные отчёты и обработки».
Как в консоли запросов 1С передать список значений для условия В (&Список)?
Нажмите кнопку заполнения параметров, найдите нужный параметр в списке, выберите для него тип «Список значений» и добавьте элементы справочника, документа или перечисления. В тексте запроса сам параметр обязательно должен стоять в круглых скобках после оператора В: Поле В (&Список).
Как посмотреть содержимое временной таблицы в консоли запросов 1С 8.3?
В консоли запросов для управляемых форм выполните запрос в режиме пакетного просмотра (кнопка выполнения пакета или дерево пакетов) и переключитесь на нужный шаг с конструкцией ПОМЕСТИТЬ ВТ_Имя. Программно платформа возвращает эти таблицы через вызов Запрос.ВыполнитьПакетСПромежуточнымиДанными() или через коллекцию МенеджерВременныхТаблиц.Таблицы.