При разработке расширений для типовых конфигураций 1С часто возникает ситуация, когда после добавления или модификации запроса система выдает ошибку: «Не задано значение параметра ...». Рассмотрим, почему это происходит и как пошагово решить эту проблему.
Ошибка Не задано значение параметра сигнализирует о том, что в тексте вашего запроса присутствует параметр (строка, начинающаяся с символа &), но при выполнении программного кода значение для него не было передано в коллекцию параметров объекта. Платформа 1С строго следит за тем, чтобы все переменные, указанные в тексте ВЫБРАТЬ, имели определенные значения. Если вы переносите код из одной формы в другую или создаете расширение, важно помнить: параметры не «подхватываются» автоматически — их нужно задавать явно в том месте, где запрос подготавливается к выполнению. Для быстрой проверки текста и автоматического извлечения параметров можно использовать консоль запросов с определением параметров.
Если ошибка возникает в элементе формы ДинамическийСписок, то установка значений параметров должна происходить в модуле формы, как правило, в процедуре ПриСозданииНаСервере. Система не знает, откуда взять данные для параметра СкладОтбор, пока вы не укажете это в коде.
Для установки параметра используйте следующий синтаксис:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Установка параметра динамического списка
Список.Параметры.УстановитьЗначениеПараметра("СкладОтбор", Склад);
КонецПроцедуры
Важно: если вы используете расширение с аннотацией &Вместо, убедитесь, что вы не «обрезали» установку других параметров, которые могли присутствовать в типовом коде. Всегда вызывайте ПродолжитьВыполнение(), если необходимо сохранить базовую логику работы платформы.
В вашем случае при программном формировании данных часто используется объект ПостроительОтчета. Здесь механизм работы аналогичен: параметры, которые вы используете в тексте запроса, должны быть добавлены в коллекцию параметров построителя до вызова метода Выполнить().
Давайте проанализируем процесс настройки параметров:
ПостроительОтчета.Текст.Параметры объекта.Вставить("ИмяПараметра", Значение).
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.Текст = ТекстЗапроса;
// Добавление параметров
ПостроительОтчета.Параметры.Вставить("ВыбВидЦены", ПараметрыЗапроса.ВидЦен);
ПостроительОтчета.Параметры.Вставить("ВыбНоменклатура", СписокОтборНоменклатуры);
// И так далее для каждого параметра, используемого в запросе
ПостроительОтчета.Выполнить();
Если вы не уверены, какой именно параметр «теряется», лучшим инструментом станет отладчик 1С. Выполните следующие действия:
Выполнить() (для построителя) или на строке установки параметров.ПостроительОтчета.Параметры (или Список.Параметры).Неопределено — вы нашли причину ошибки.Проанализировав ваш код, можно выделить несколько рекомендаций:
СкладОтбор, но, исправив его, вы можете обнаружить, что не задан другой параметр (например, &ВыбВидЦены). Всегда проверяйте всю связку параметров запроса.ПостроительОтчета), проверяйте каждый этап формирования текста запроса на соответствие переданным параметрам.Используя эти методы, вы сможете локализовать проблему и убедиться, что все параметры передаются в запрос корректно, что обеспечит стабильную работу вашего расширения.