При работе с консолью запросов, особенно в среде 1С:Предприятие 8.2 на обычных формах, разработчики часто сталкиваются с ситуацией, когда необходимо передать в запрос не одно конкретное значение, а целый набор. Типичный пример — использование оператора В для фильтрации данных по списку ссылок. Начинающие пользователи часто заходят в тупик, так как интерфейс консоли по умолчанию предлагает выбрать только один объект. Разберем детально, как решить эту задачу и какие нюансы стоит учитывать.
Прежде чем настраивать параметры, нам необходимо убедиться, что сам текст запроса составлен корректно. Для того чтобы система поняла, что мы собираемся передать коллекцию значений, используется оператор В. Рассмотрим пример запроса к документам ЗаказНаряд, где нам нужно отобрать данные по нескольким видам ремонта:
ВЫБРАТЬ
ЗаказНаряд.Ссылка,
ЗаказНаряд.Номер,
ЗаказНаряд.Дата,
ЗаказНаряд.ВидРемонта
ИЗ
Документ.ЗаказНаряд КАК ЗаказНаряд
ГДЕ
ЗаказНаряд.ВидРемонта В(&ВидРемонта)
Обратите внимание на конструкцию В(&ВидРемонта). Параметр в скобках после оператора В сигнализирует платформе о том, что ожидается массив, список значений или результат вложенного запроса.
После того как текст запроса написан, переходим к панели параметров. По умолчанию, если вы нажмете кнопку «Заполнить параметры», консоль может назначить параметру &ВидРемонта тип «Не определено» или тип ссылки на справочник (если консоль умеет анализировать метаданные). Если в колонке «Значение» вы видите возможность выбора только одного элемента, выполним следующие действия:
ВидРемонта.СправочникСсылка.ВидыРемонта), нам нужно его «сбросить».СписокЗначений.Проанализируем ситуацию: почему это работает именно так? В обычных формах 1С (характерных для версии 8.2) поле ввода жестко типизировано. Пока в нем указана конкретная ссылка, оно не позволит добавить коллекцию. Сброс типа «разблокирует» поле, позволяя назначить ему системный тип СписокЗначений.
Теперь, когда тип параметра установлен как Список значений, в колонке «Значение» появится кнопка выбора (три точки). При нажатии на нее откроется стандартное диалоговое окно работы со списком. Здесь мы можем добавить столько элементов, сколько необходимо. Рассмотрим, как сделать процесс заполнения удобнее:
Типизация самого списка: Чтобы при добавлении каждого нового элемента система не спрашивала каждый раз, какой тип данных вы хотите выбрать, рекомендуется сразу настроить «Тип значения» для самого списка значений. В окне списка найдите кнопку настройки типа и выберите там СправочникСсылка.ВидыРемонта. После этого при нажатии кнопки «Добавить» будет сразу открываться нужный справочник.
Выясним причину, почему в консолях чаще используется именно СписокЗначений, хотя оператор В в языке запросов одинаково успешно обрабатывает и Массив. С точки зрения платформы 1С:
Массив — это более легкий объект, он занимает меньше памяти и предпочтительнее при программном формировании запросов на сервере.СписокЗначений — это визуальный объект. Он предназначен для интерактивной работы пользователя. У него есть методы для отображения пометок, выбора элементов и, что самое важное, для него в платформе предусмотрена стандартная форма редактирования, которую мы и видим в консоли запросов.Поэтому в консолях запросов (инструментах разработчика) параметром почти всегда выступает именно СписокЗначений.
Если вы работаете в консоли на управляемых формах, процесс может слегка отличаться. В современных инструментах (например, «Инструменты разработчика» или расширенные консоли запросов) реализован механизм автоматического определения типа. Если система видит оператор В, она может автоматически предложить создать список. Однако общий принцип остается прежним: если поле не дает выбрать список — ищите кнопку очистки типа (X) или кнопку выбора типа (T).
Проанализируем ситуацию, когда в списке значений оказывается очень много элементов (например, несколько тысяч). Нужно помнить о следующих моментах:
IN (val1, val2, ...). У СУБД (особенно у Microsoft SQL Server) есть лимиты на количество элементов в этой конструкции. Если передать 20-30 тысяч элементов, запрос может либо выдать ошибку, либо крайне медленно выполняться.ВНУТРЕННЕЕ СОЕДИНЕНИЕ вместо оператора В.&ВидРемонта будет содержать абсолютно пустой СписокЗначений, запрос не выдаст ошибку, но и не вернет ни одной строки. Условие В (ПустойСписок) всегда ложно.Разберем полезный лайфхак. Если у вас есть список артикулов или кодов в Excel, и вам нужно быстро вставить их в параметры консоли, многие продвинутые консоли (например, консоль из состава «Инструментов разработчика») позволяют нажать правую кнопку мыши в окне редактирования списка значений и выбрать «Загрузить из буфера обмена». Это избавляет от необходимости добавлять каждую позицию вручную, что значительно экономит время при отладке сложных отчетов.
Таким образом, для успешной работы со списками значений в консоли запросов 8.2 достаточно запомнить простое правило: очистите тип параметра перед его изменением. Это действие открывает доступ к выбору коллекций значений и позволяет гибко настраивать условия фильтрации в ваших запросах.