Как быстро задать параметры запроса для списка значений или массива в консоли «Инструментов разработчика»?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с типовыми конфигурациями 1С программисты часто сталкиваются с ситуацией, когда запрос использует сложные параметры: массивы исключаемых ссылок, списки значений для фильтров или таблицы значений. Копировать такие параметры вручную в визуальный редактор параметров консоли — задача трудоемкая и неблагодарная, особенно если элементов в списке десятки. Рассмотрим, как автоматизировать этот процесс и перенести код инициализации параметров из конфигуратора в консоль запросов «Инструментов разработчика» (ИР) с минимальными усилиями.

Способ 1. Использование вкладки «Перед выполнением запроса»

Это самый мощный и гибкий метод, позволяющий использовать стандартный синтаксис 1С для подготовки данных. Разберем по шагам, как это работает. В консоли запросов ИР существует специальная закладка «Перед выполнением запроса». Код, написанный здесь, исполняется непосредственно перед тем, как запрос будет отправлен на сервер БД.

Рассмотрим алгоритм действий:

  1. Копируем из кода конфигурации блок инициализации массива или списка значений.
  2. Переходим в консоль ИР на вкладку «Перед выполнением запроса».
  3. Вставляем код и дополняем его методом установки параметра в объект запроса.

Проанализируем пример кода, который можно вставить в это окно:


// Код инициализации, скопированный из типовой конфигурации
ИсключаемыеЗаписи = Новый Массив;
ИсключаемыеЗаписи.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
// ... и так далее

// Ключевой момент: передача параметра в консоль
// В контексте этого окна нам доступен объект мОбъектЗапроса
мОбъектЗапроса.УстановитьПараметр("ИсключаемыеЗаписи", ИсключаемыеЗаписи);

Важное замечание: многие разработчики путаются, когда после выполнения кода визуальный список параметров в нижней части консоли не обновляется. Выясним причину: в ИР программная установка параметров через мОбъектЗапроса и визуальная таблица — это два разных слоя. Программная установка имеет приоритет. Даже если в таблице параметров пусто, запрос отработает корректно, так как параметр будет «подсунут» объекту запроса в момент выполнения. Чтобы убедиться в правильности заполнения, можно добавить в код строку Сообщить(ИсключаемыеЗаписи.Количество());.

Способ 2. Тип параметра «Выражение»

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

Рассмотрим особенности этого подхода:

Пример выражения для создания массива на лету:


Новый Массив; 
м = Результат; // В некоторых версиях используется переменная Результат
м.Добавить(Справочники.Валюты.НайтиПоКоду("643"));
Возврат м;

Этот способ удобен для небольших фрагментов кода, которые не загромождают общую логику подготовки запроса.

Способ 3. Перехват запроса из отладчика (команда от)

Это «профессиональный» путь, который экономит максимум времени. Если вы используете портативную или встроенную версию ИР, вам не обязательно копировать текст запроса и параметры вручную. Можно «выстрелить» объектом запроса прямо из конфигуратора в консоль.

Разберем, как это сделать:

  1. Остановитесь на точке останова в конфигураторе в тот момент, когда объект Запрос уже инициализирован (параметры установлены).
  2. Откройте «Табло» или «Вычислить выражение» (Ctrl+F9).
  3. Введите команду: ирОбщий.От(Запрос) (для портативных версий префикс может отличаться, например, ирКл.От(Запрос)).
  4. Консоль ИР откроется автоматически, при этом в нее приедет и текст запроса, и все установленные параметры, включая сложные массивы и временные таблицы.

Посмотрим на преимущества этого метода: вам вообще не нужно заботиться о коде Добавить(). Массив уже существует в памяти 1С, и ИР просто копирует его состояние в интерфейс консоли.

Способ 4. Заполнение через структуру параметров

В контексте вкладки «Перед выполнением запроса» помимо объекта мОбъектЗапроса доступна также структура мПараметры. Рассмотрим, как можно манипулировать ею:


// Можно напрямую изменять структуру параметров консоли
мПараметры.Вставить("МойМассив", Новый Массив);
мПараметры.МойМассив.Добавить(1);
мПараметры.МойМассив.Добавить(100);

Отличие от мОбъектЗапроса.УстановитьПараметр() заключается в том, что в некоторых сборках ИР изменения в структуре мПараметры могут отобразиться в интерфейсе более наглядно, хотя поведение зависит от конкретной версии портативного инструмента.

Советы по эффективной работе

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

  1. Используйте многострочное редактирование. Если поле кажется узким, нажмите Shift+F2 или кнопку выбора в ячейке.
  2. Если вы используете временные таблицы, которые формируются кодом до основного запроса, вы также можете передать МенеджерВременныхТаблиц в мОбъектЗапроса.МенеджерВременныхТаблиц в той же вкладке «Перед выполнением».
  3. Для проверки типов данных используйте встроенные функции ИР, такие как ирОбщий.СообщитьЛ(Значение), чтобы быстро увидеть содержимое объекта в окне сообщений.

Таким образом, мы выяснили, что наиболее эффективным способом для разового переноса кода является вкладка «Перед выполнением запроса», а для работы «в потоке» лучше всего подходит использование метода отладки От().

← На главную