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

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

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

Рассмотрим подробно причины такого поведения платформы, разберем ключевые технические различия между объектами Массив и СписокЗначений и изучим варианты решения данной задачи при отладке.

Разница между Массивом и Списком значений в запросах 1С

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

  1. Массив (Массив) — это базовая последовательная коллекция значений любого типа (ссылки, строки, числа). Элементы массива содержат исключительно чистые данные.
  2. Список значений (СписокЗначений) — это специализированный объект интерфейса, предназначенный для интерактивного выбора элементов пользователем. Каждый элемент списка представляет собой составную структуру со свойствами Значение, Представление, Пометка, Картинка.

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

Особенности параметров виртуальных таблиц (Регистры расчета и Бухгалтерия)

Проанализируем ситуацию с виртуальными таблицами. Некоторые параметры виртуальных таблиц (например, список измерений или разрезов в регистрах расчета) на уровне платформы **строго требуют тип Массив** (например, массив строк с именами измерений).

Разберем по шагам, почему возникает ошибка при отладке в консоли:

  1. Большинство консолей запросов используют СписокЗначений для интерактивного ввода коллекций, так как в платформе нет встроенной формы редактирования объектов типа Массив.
  2. Если консоль передает СписокЗначений напрямую в метод Запрос.УстановитьПараметр(), платформа 1С не может корректно прочитать структуру параметров виртуальной таблицы.
  3. В результате виртуальная таблица не получает нужные измерения, и результат выполнения запроса содержит 0 записей.

Способы решения проблемы в Консоли запросов

Рассмотрим несколько способов, которые позволяют успешно отладить запрос с параметрами-коллекциями.

Вариант 1. Использование «Списка значений» для стандартных условий

Если параметр передается в обычное условие ГДЕ Ссылка В (&Параметр), достаточно выбрать в консоли запросов тип параметра Список значений и заполнить его нужными элементами. Убедитесь, что типы значений в списке строго соответствуют типам полей в базе данных (например, конкретная ссылка справочника, а не ее строковое представление).

Вариант 2. Выгрузка Списка значений в Массив через код

Продвинутые консоли запросов (например, из состава Универсальных инструментов разработчика) позволяют задавать параметры с помощью кода 1С. В таком случае список значений перед передачей в параметр можно выгрузить в чистый массив с помощью метода ВыгрузитьЗначения().

Посмотрим на пример кода обработки параметров:


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

// Выгружаем чистый массив значений из списка
МассивДляЗапроса = СписокИзмерений.ВыгрузитьЗначения();

// Передаем массив в параметр запроса
Запрос.УстановитьПараметр("Измерения", МассивДляЗапроса);

Вариант 3. Временный хардкод в тексте запроса при отладке

Если используемая консоль не позволяет передать чистый массив, а отладить запрос необходимо, проанализируем простой вариант обхода. На время отладки в консоли можно заменить имя параметра конкретной строкой или значением прямо в тексте запроса.

Рассмотрим пример подстановки в виртуальную таблицу:


// В коде программы используется параметр:
// РегистрРасчета.ОсновныеНачисления.Авторасчет(&Измерения)

// На время отладки в консоли запросов меняем параметр на значение:
РегистрРасчета.ОсновныеНачисления.Авторасчет("Сотрудник")

Пример правильной передачи массива в коде 1С

Для сравнения рассмотрим, как передача массива в параметры запроса выглядит в рабочем программном коде 1С:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОсновныеНачисления.Сотрудник КАК Сотрудник,
    |	ОсновныеНачисления.Результат КАК Результат
    |ИЗ
    |	РегистрРасчета.ОсновныеНачисления.СоздатьЗаписи() КАК ОсновныеНачисления";

// Формируем массив строк с именами измерений
МассивИзмерений = Новый Массив;
МассивИзмерений.Добавить("Сотрудник");

// Передаем массив в параметр
Запрос.УстановитьПараметр("Измерения", МассивИзмерений);

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

Рекомендации по отладке

При работе с параметрами запросов рекомендуется придерживаться следующих правил:

  1. Проверяйте типы данных: при интерактивном заполнении элементов в консоли следите, чтобы случайно не передать строку вместо ссылки на объект или перечисление.
  2. Учитывайте особенности виртуальных таблиц: помните, что виртуальные таблицы регистров расчета и бухгалтерии критичны к типу Массив.
  3. Используйте функциональные консоли: применяйте консоли запросов с возможностью вычисления выражений на языке 1С или автоматическим преобразованием списков значений в массивы.
← На главную