Как исправить ошибку «Для данного типа значений операция подбора недоступна» в СКД при выборе параметров

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

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

В этой статье мы подробно разберем, почему возникает эта ошибка, как работает механизм выбора и подбора в 1С и какими способами можно привести отчет в рабочее состояние.

Анализ исходной ситуации

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


ВЫБРАТЬ
    ИСТИНА КАК Выгружать,
    ПроизводствоБезЗаказа.Ссылка КАК Документ,
    ПроизводствоБезЗаказа.Организация КАК Организация,
    ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК Склад,
    NULL КАК Контрагент,
    NULL КАК СуммаДокумента,
    ПроизводствоБезЗаказа.Дата КАК Дата,
    ПроизводствоБезЗаказа.Номер КАК Номер,
    ЛОЖЬ КАК ЕстьСчетФактура
ИЗ
    Документ.ПроизводствоБезЗаказа КАК ПроизводствоБезЗаказа
ГДЕ
    "ПроизводствоБезЗаказа" В (&МассивВидовДокументов)
    И ПроизводствоБезЗаказа.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И НЕ ПроизводствоБезЗаказа.ПометкаУдаления

Проблема заключается в условии "ПроизводствоБезЗаказа" В (&МассивВидовДокументов). Здесь параметр &МассивВидовДокументов ожидает коллекцию строк. Несмотря на то, что в настройках СКД на вкладке «Параметры» программист заполнил ограничение «Доступные значения», платформа выдает ошибку при нажатии кнопки «Подбор».

Выясняем причину: Разница между «Выбором» и «Подбором»

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

  1. Выбор (кнопка с тремя точками): Эта команда вызывает стандартное окно выбора значения. Если для параметра задан список «Доступных значений», платформа откроет именно этот локальный список. Для строковых типов это работает корректно.
  2. Подбор (кнопка в форме списка значений): Эта команда предназначена для массового добавления элементов. Механизм «Подбора» на уровне платформы жестко завязан на ссылочные типы данных (Справочники, Документы, Перечисления). Когда пользователь нажимает «Подбор», система пытается определить, форму выбора какого объекта метаданных ей нужно открыть.

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

Способ №1: Использование ссылочных типов вместо строк

Самый правильный и надежный метод — уйти от использования строковых литералов в запросах и параметрах. Рассмотрим, как можно переписать условие. Если нам нужно фильтровать документы по их типам, лучше использовать системное перечисление или проверку типа ссылки.

Проанализируем пример изменения логики запроса:


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

В этом случае в параметре &МассивТипов будут храниться не строки, а объекты типа ОписаниеТипов или ссылки. Если же видов документов ограниченное количество, можно создать вспомогательный справочник или использовать существующее в конфигурации перечисление. Для ссылочных типов кнопка «Подбор» будет работать идеально, открывая стандартную форму выбора из базы данных.

Способ №2: Работа через «Выбор» вместо «Подбора»

Если по каким-то причинам вы не можете изменить строковую логику запроса (например, данные приходят из внешнего источника, где виды документов — это просто текст), нужно изменить способ взаимодействия пользователя с отчетом. Выясним, как это сделать без изменения кода:

Важный момент: Чтобы упростить жизнь пользователю, в настройках параметра СКД можно установить флаг «Ограничение доступности» для лишних полей или убедиться, что тип параметра четко ограничен списком, чтобы платформа не пыталась предлагать «Подбор» из всех возможных типов (Любая ссылка).

Способ №3: Перенос фильтра в «Отбор»

Как заметили участники обсуждения, механизм Отбора в СКД (на вкладке «Настройки») работает более гибко, чем механизм Параметров. Рассмотрим, почему это так:

Когда мы выносим поле в «Отбор», СКД сама управляет представлением этого поля. Если поле в наборе данных имеет ограниченный список значений, компоновщик более корректно обрабатывает интерфейсные команды. Попробуйте убрать параметр из раздела ГДЕ запроса и просто выведите поле «ТипДокумента» (как строку) в набор данных, а затем наложите отбор в пользовательских настройках.

Рекомендации по оформлению запросов в СКД

Рассмотрим подробнее «плохие» и «хорошие» практики при работе с видами документов в компоновке данных.

Плохая практика (использование строк):

ГДЕ "ПриходныйКассовыйОрдер" В (&ВидыДокументов)

Такой код сложно поддерживать: при переименовании документа в конфигураторе запрос «сломается», а интерфейс будет выдавать обсуждаемую ошибку подбора.

Хорошая практика (использование ТИПЗНАЧЕНИЯ):

ГДЕ ТИПЗНАЧЕНИЯ(ПроизводствоБезЗаказа.Ссылка) В (&СписокТипов)

Здесь &СписокТипов — это массив, содержащий типы. В СКД такой параметр настраивается через выбор типов из метаданных, и подбор для него работает штатно.

Выясняем особенности версий платформы

Стоит отметить, что в старых релизах 1С v8.3 (до появления интерфейса «Такси») поведение некоторых элементов управления отличалось. Иногда ошибка проявляется только в управляемых формах, в то время как в обычных формах список доступных значений для строк мог подхватываться иначе. Если вы столкнулись с этой проблемой после обновления платформы, знайте — это следствие ужесточения контроля типов в механизме подбора.

Подведем итог:

  1. Ошибка вызвана попыткой вызвать подбор для типа Строка.
  2. Решение: используйте стандартную кнопку выбора в строке списка значений вместо общей кнопки подбора.
  3. Лучшее решение: пересмотрите архитектуру запроса, заменив строковые сравнения на работу со ссылочными типами данных или системными перечислениями.
  4. Альтернатива: используйте вкладку «Настройки» -> «Отбор» вместо жестких параметров в тексте запроса.

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

← На главную