При работе с крупными конфигурациями, такими как 1С:ERP 2.4 или 1С:Комплексная автоматизация, разработчики часто сталкиваются с ситуацией: при нажатии кнопки «Показать все» (открытии формы выбора) возникает ошибка исполнения запроса. Самое загадочное в этой ситуации — текст ошибки содержит фрагменты кода, которые невозможно найти через глобальный поиск по конфигурации. Рассмотрим подробно, почему так происходит и как найти причину неисправности.
Типичный текст ошибки выглядит следующим образом: {(14, 47)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. И СправочникВидыРабочихЦентров.Подразделение <<?>>= &П2.
Проанализируем ситуацию: параметр с именем &П2 (или &П1, &П3 и т. д.) однозначно указывает на то, что текст запроса был сформирован платформой автоматически. Этот код не написан программистом вручную в модуле, он генерируется «на лету» в оперативной памяти в момент открытия формы выбора или списка. Именно поэтому стандартный поиск по текстам конфигурации не дает результатов.
Платформа добавляет подобные условия ГДЕ ... = &П2 в двух основных случаях:
Список установлены автоматические отборы через компоновщик настроек.Выясним причину ошибки, начав с самого вероятного места. Если ошибка возникает при выборе значения в строке табличной части или в реквизите шапки документа, нам нужно проверить свойства этого реквизита.
Рассмотрим алгоритм действий:
Подразделение фильтруется по значению другого реквизита (например, Объект.Подразделение), нужно убедиться, что типы этих полей совместимы.Важный нюанс: Ошибка часто возникает, если в Связи параметров выбора передается значение, которое может принимать тип Неопределено или составной тип, не предусмотренный в целевом справочнике. Если поле Подразделение в справочнике имеет тип СправочникСсылка.СтруктураПредприятия, а из документа передается ссылка другого типа, платформа сформирует некорректный запрос.
Если в метаданных реквизита связи настроены корректно или отсутствуют, проанализируем саму форму выбора, которая открывается по кнопке «Показать все».
Выполним следующие шаги:
ВидыРабочихЦентров). Это можно посмотреть в закладке «Формы» самого справочника или в свойствах объекта-хозяина.Список), имеющий тип ДинамическийСписок.Список найдем строку Настройка списка и нажмем «Открыть».Подразделение) выбирается из вложенного запроса или объединения, где его тип может стать «неопределенным» для платформы.Посмотрим на пример того, как может выглядеть некорректная программная установка отбора в модуле формы, которая также приведет к генерации параметра &П2:
// В процедуре ПриСозданииНаСервере или при инициализации списка
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Параметры.ОтборПодразделение; // Здесь может быть несовместимый тип
ЭлементОтбора.Использование = Истина;
Если поиск по тексту кода ничего не дал, попробуем поискать упоминание поля в элементах форм. При запуске глобального поиска (Ctrl+Shift+F) обязательно установим галочку Свойства элементов форм (или «Тексты модулей» и «Элементы форм» в зависимости от версии платформы).
Ищите строку Подразделение. Нас интересуют совпадения в колонке «Связи параметров выбора» или «Параметры выбора». Это поможет быстро найти форму, где жестко задан фильтр, вызывающий конфликт типов при сравнении с параметром &П2.
Если визуальный осмотр не помог, воспользуемся инструментами отладки. Рассмотрим, как поймать момент формирования ошибочного запроса:
ОткрытьФорму() или события модулей форм ПриСозданииНаСервере.Список:
Список.КомпоновщикНастроек.Настройки.Отбор.ЭлементыПроанализируем коллекцию элементов отбора. Посмотрите, какое значение установлено в ПравоеЗначение для поля Подразделение. Если там находится массив, когда ожидается ссылка, или объект неверного типа — вы нашли причину ошибки.
В современных конфигурациях типа ERP 2.4 часто используются Расширения. Если основная конфигурация кажется «чистой», проверим расширения. Текст запроса динамического списка может подменяться программно в расширении через аннотацию &Вместо или &После.
Также стоит учитывать, что справочник ВидыРабочихЦентров часто имеет сложную структуру подчинения. Если в системе используются «Производственные участки» и «Подразделения» одновременно, убедитесь, что в параметрах выбора передается именно тот тип ссылки, который ожидает поле Подразделение в базе данных. Несоответствие типов (например, попытка сравнить СправочникСсылка.ПодразделенияОрганизаций с СправочникСсылка.СтруктураПредприятия) приведет именно к такой ошибке запроса.
Ошибка с параметрами вида &П2 — это всегда следствие работы механизмов компоновки данных или связей параметров выбора. Для исправления ситуации необходимо: