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

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

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

Шаг 1: Правильное написание условия в тексте запроса

Прежде чем настраивать параметры, нам необходимо убедиться, что сам текст запроса составлен корректно. Для того чтобы система поняла, что мы собираемся передать коллекцию значений, используется оператор В. Рассмотрим пример запроса к документам ЗаказНаряд, где нам нужно отобрать данные по нескольким видам ремонта:


ВЫБРАТЬ
    ЗаказНаряд.Ссылка,
    ЗаказНаряд.Номер,
    ЗаказНаряд.Дата,
    ЗаказНаряд.ВидРемонта
ИЗ
    Документ.ЗаказНаряд КАК ЗаказНаряд
ГДЕ
    ЗаказНаряд.ВидРемонта В(&ВидРемонта)

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

Шаг 2: Настройка типа параметра в консоли

После того как текст запроса написан, переходим к панели параметров. По умолчанию, если вы нажмете кнопку «Заполнить параметры», консоль может назначить параметру &ВидРемонта тип «Не определено» или тип ссылки на справочник (если консоль умеет анализировать метаданные). Если в колонке «Значение» вы видите возможность выбора только одного элемента, выполним следующие действия:

  1. Найдем в таблице параметров строку с нашим параметром ВидРемонта.
  2. Посмотрим на колонку, где указывается тип значения или само значение. Если там уже выбран какой-то тип (например, СправочникСсылка.ВидыРемонта), нам нужно его «сбросить».
  3. Критически важный момент: нажмем на кнопку очистки (обычно это «крестик» в поле выбора типа или значения).
  4. После очистки поля нажмем на кнопку выбора типа (кнопка с буквой «Т» или многоточием).
  5. В открывшемся окне выбора типов нам нужно найти и выбрать объект СписокЗначений.

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

Шаг 3: Заполнение списка значений

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

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

Различия между Списком значений и Массивом

Выясним причину, почему в консолях чаще используется именно СписокЗначений, хотя оператор В в языке запросов одинаково успешно обрабатывает и Массив. С точки зрения платформы 1С:

Поэтому в консолях запросов (инструментах разработчика) параметром почти всегда выступает именно СписокЗначений.

Особенности управляемых форм (версия 8.3)

Если вы работаете в консоли на управляемых формах, процесс может слегка отличаться. В современных инструментах (например, «Инструменты разработчика» или расширенные консоли запросов) реализован механизм автоматического определения типа. Если система видит оператор В, она может автоматически предложить создать список. Однако общий принцип остается прежним: если поле не дает выбрать список — ищите кнопку очистки типа (X) или кнопку выбора типа (T).

Важные ограничения и советы по производительности

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

  1. Ограничения СУБД: При выполнении запроса 1С преобразует ваш список значений в SQL-конструкцию IN (val1, val2, ...). У СУБД (особенно у Microsoft SQL Server) есть лимиты на количество элементов в этой конструкции. Если передать 20-30 тысяч элементов, запрос может либо выдать ошибку, либо крайне медленно выполняться.
  2. Решение при больших списках: Если вам нужно отфильтровать данные по огромному списку, правильнее будет загрузить эти данные во временную таблицу и использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ вместо оператора В.
  3. Пустые списки: Важно помнить, что если параметр &ВидРемонта будет содержать абсолютно пустой СписокЗначений, запрос не выдаст ошибку, но и не вернет ни одной строки. Условие В (ПустойСписок) всегда ложно.

Использование буфера обмена

Разберем полезный лайфхак. Если у вас есть список артикулов или кодов в Excel, и вам нужно быстро вставить их в параметры консоли, многие продвинутые консоли (например, консоль из состава «Инструментов разработчика») позволяют нажать правую кнопку мыши в окне редактирования списка значений и выбрать «Загрузить из буфера обмена». Это избавляет от необходимости добавлять каждую позицию вручную, что значительно экономит время при отладке сложных отчетов.

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

← На главную