Как в консоли запросов 1С передать список значений в качестве параметра?

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

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

Использование стандартной консоли запросов от 1С

Многие начинающие разработчики полагают, что стандартная консоль запросов, предоставляемая фирмой 1С в составе инструментов разработчика или на дисках ИТС, ограничена в функционале. Однако это не так. Разберем по шагам, как настроить параметр-список в типовой консоли:

  1. Откроем консоль запросов и напишем текст запроса, используя условие ГДЕ Ссылка В (&СписокСсылок).
  2. Перейдем на закладку Параметры.
  3. В колонке выбора типа данных для параметра СписокСсылок найдем и выберем тип СписокЗначений.
  4. После выбора этого типа в поле значения появится кнопка выбора (три точки), при нажатии на которую откроется стандартное окно редактирования списка значений.
  5. В открывшемся окне мы можем добавить любое количество элементов (например, ссылок на счета из плана счетов Хозрасчетный).

Проанализируем ситуацию: стандартная консоль вполне справляется с базовой задачей. Главное — правильно указать тип параметра. Если тип будет выбран просто как ПланСчетовСсылка.Хозрасчетный, то консоль позволит выбрать только один счет. Выбор именно СписокЗначений активирует нужный функционал. Для автоматического считывания и настройки параметров из текста запроса можно использовать консоль запросов с автоопределением параметров.

Продвинутый инструмент: Инструменты разработчика (ИР)

Если стандартных возможностей недостаточно, рассмотрим мощный комплекс "Инструменты разработчика" (автор Сергей Старых). Это, пожалуй, самый функциональный бесплатный аналог для профессиональной работы. Выясним причину, по которой опытные программисты предпочитают именно его:

Работа в управляемых формах (УФ)

Для современных конфигураций на базе управляемого интерфейса (УТ 11, БП 3.0, ERP) использование старых консолей в формате .epf может быть затруднено из-за ограничений модальных окон или отсутствия поддержки управляемых форм. Проанализируем доступные варианты для УФ:

  1. Консоль из состава БСП: В большинстве современных типовых баз уже встроена консоль запросов. Найти ее можно в разделе "Администрирование" — "Печатные формы, отчеты и обработки" — "Дополнительные отчеты и обработки" (если она подключена) или через функции технического специалиста.
  2. Специализированные разработки: Существуют адаптированные версии консолей (например, консоль от Чистова или расширенные версии с портала Инфостарт), которые корректно работают в веб-клиенте и поддерживают передачу сложных типов данных.

Программная реализация установки параметра-списка

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


// Формируем список значений
СписокСчетов = Новый СписокЗначений;
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТоварыОтгруженные);

// Создаем объект запрос
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ХозрасчетныйОстатки.Счет,
    |   ХозрасчетныйОстатки.СуммаОстаток
    |ИЗ
    |   РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
    |ГДЕ
    |   ХозрасчетныйОстатки.Счет В (&СписокСчетов)";

// Устанавливаем параметр
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);

РезультатЗапроса = Запрос.Выполнить();

Обратите внимание, что в качестве параметра можно передавать не только объект СписокЗначений, но и простой Массив. В современных версиях платформы 8.3 использование массива часто является более предпочтительным и производительным способом, если не требуется специфический функционал меток и картинок списка.

Дополнительные возможности современных консолей

Разберем еще несколько полезных функций, которые значительно облегчают жизнь программисту при работе со сложными запросами:

1. Исследование временных таблиц. Продвинутые консоли позволяют просматривать данные, которые попадают во временные таблицы в середине пакета запросов. Это делается через использование объекта МенеджерВременныхТаблиц. В обычной консоли вы видите только финальный результат, а в продвинутой — "срез" данных на любом этапе. Для такой работы подойдёт управляемая консоль с поддержкой пакетных запросов и временных таблиц.

2. Генерация программного кода. После того как вы настроили все параметры и проверили результат, многие консоли предлагают нажать кнопку "Получить код". Программа автоматически сформирует текст на 1С, включая конструктор Новый Запрос и все вызовы УстановитьПараметр. Это исключает опечатки при переносе имен переменных.

3. Анализ плана запроса SQL. Это функция для экспертов по производительности. Она позволяет увидеть, как СУБД (MS SQL, PostgreSQL) интерпретирует ваш запрос и не приводит ли передача огромного списка значений к сканированию всей таблицы вместо использования индексов.

Таким образом, для решения вашей задачи достаточно использовать стандартную консоль от 1С, правильно установив тип параметра СписокЗначений. Если же вам требуется регулярная работа с большими массивами данных, рекомендуем обратить внимание на "Инструменты разработчика" или встроенную консоль из состава БСП.

← На главную