Разработка и Конфигурация · 9 мин
Как установить значение параметра динамического списка в 1С
Способы установить значение параметра динамического списка 1С: в конфигураторе, программно через УстановитьПараметр и по событию ПриПолученииДанных. Примеры кода и ошибки.
Динамический список в управляемых формах 1С строится на произвольном запросе, и почти в каждом таком запросе есть параметры: период отбора, организация, склад, признак актуальности. Пока параметру не присвоено значение, платформа либо покажет пустую таблицу, либо вернёт ошибку «Параметр не установлен», поэтому установка значений — обязательный шаг при настройке любого списка с произвольным запросом.
Существует три рабочих способа задать значение параметра: в свойствах динамического списка в конфигураторе, программно из модуля формы и через событие формирования списка. Выбор зависит от того, известно ли значение заранее, меняется ли оно в ходе работы пользователя и нужно ли реагировать на контекст открытия формы.
Ниже разобраны все три подхода с примерами кода, типичными ошибками и способами проверить, что параметр действительно применился к запросу.
Как устроены параметры динамического списка
Динамический список — это реквизит формы типа «ДинамическийСписок», данные которого формируются запросом. Запрос задаётся в свойстве «Произвольный запрос» (флаг «ПроизвольныйЗапрос»), и любой параметр этого запроса (например, &Организация или &Период) попадает в коллекцию Параметры списка.
Коллекция параметров доступна и в конфигураторе (кнопка «Параметры» в палитре свойств динамического списка), и из кода через свойство Список.Параметры. Каждый элемент коллекции имеет имя, значение и флаг использования. Важно понимать: присвоить значение можно только параметру, который реально используется в тексте запроса — обращение к несуществующему имени вызовет ошибку.
Установка значения в конфигураторе
Если значение параметра известно на этапе разработки и не зависит от контекста, проще всего задать его статически. Откройте форму в конфигураторе, выделите реквизит динамического списка, в палитре свойств найдите строку «Параметры» и нажмите кнопку выбора — откроется редактор значений параметров.
В редакторе для каждого параметра запроса отображаются имя и текущее значение. Установите нужное значение и убедитесь, что флаг использования снят только там, где параметр действительно не нужен. Этот способ подходит для константных отборов: например, «показывать только активные элементы» или фиксированный вид документа.
Ограничение способа очевидно: значение «зашито» в форму. Если отбор должен зависеть от текущего пользователя, даты или параметров открытия формы, статическая установка не подойдёт — потребуется код.
Программная установка через УстановитьЗначениеПараметра
Основной рабочий метод — вызов УстановитьЗначениеПараметра у коллекции параметров списка. Типичное место вызова — обработчик ПриСозданииНаСервере, когда форма уже инициализирована, но список ещё не выведен пользователю.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Параметры.УстановитьЗначениеПараметра("Организация", Параметры.Организация);
Список.Параметры.УстановитьЗначениеПараметра("Период", ТекущаяДатаСеанса());
КонецПроцедурыПосле такого вызова платформа автоматически перечитает данные списка с новым отбором — дополнительно обновлять таблицу не требуется. Если параметр нужно менять в ходе работы (например, пользователь выбрал склад в поле на форме), вызывайте тот же метод из обработчика изменения поля — список пересчитается сам.
- 1Откройте модуль формы и найдите или создайте обработчик ПриСозданииНаСервере
- 2Определите значение параметра: из Параметры формы, настроек или функциональных опций
- 3Вызовите Список.Параметры.УстановитьЗначениеПараметра с точным именем параметра из запроса
- 4Проверьте тип значения — он должен совпадать с типом поля, с которым сравнивается параметр
- 5Откройте форму в режиме предприятия и убедитесь, что данные отфильтрованы
Установка параметра из параметров открытия формы
Частый сценарий — форма выбора, открываемая с отбором. В этом случае значение приходит в коллекции Параметры формы, и его нужно пробросить в параметры списка. При этом полезно проверять наличие ключа: обращение к несуществующему параметру формы даст неопределённость поведения.
Альтернатива — стандартный механизм Отбор в параметрах формы выбора: платформа сама добавит условие в список без изменения запроса. Но если отбор сложный (по диапазону дат, по условию ИЛИ), параметры запроса надёжнее.
Установка параметра при формировании списка
Когда значение должно вычисляться непосредственно в момент выполнения запроса (например, граница «сегодня» должна обновляться при каждом обновлении списка), используется событие ПриПолученииДанныхНаСервере элемента формы «Список». В нём параметры доступны через Настройки.ПараметрыДанных.
Такой подход гарантирует актуальность значения при каждой перерисовке списка, но требует аккуратности: обработчик вызывается часто, поэтому в нём нельзя выполнять тяжёлые вычисления или запросы к базе — это замедлит прокрутку списка.
Сравнение вариантов
Подходит для постоянных отборов; не реагирует на контекст открытия
Универсальный вариант для значений из параметров формы; устанавливается один раз
Для значений, зависящих от текущего момента; вызывается при каждом обновлении, нельзя перегружать
Проверка результата и типичные ошибки
Главный признак корректной установки — список показывает именно те строки, которые соответствуют отбору, без сообщений об ошибках. Если список пуст, сначала проверьте, не отсекает ли параметр все данные: временно задайте заведомо широкое значение и убедитесь, что записи появляются.
Отдельная ловушка — параметры типа «список значений» для условия В (&Список). Передавайте именно объект СписокЗначений или массив, а не строку с перечислением: иначе сравнение будет выполняться по строковому представлению и не вернёт ни одной записи.
Как проверить результат
Показаны только записи, удовлетворяющие отбору
Пустой список или все записи без фильтрации
Нет сообщений о параметрах запроса
Ошибка «Параметр не найден» или «Несовместимые типы»
Список мгновенно перестраивается
Отбор применяется только после переоткрытия формы
Ограничения и когда нужен другой подход
Параметры динамического списка — не единственный инструмент отбора. Если условие может меняться пользователем, правильнее использовать настройки компоновки данных списка (Список.КомпоновщикНастроек), добавляя элементы отбора — тогда пользователь сможет видеть и корректировать отбор стандартными средствами.
Помните и о производительности: условие по параметру в секции ГДЕ использует индексы таблицы, а условие, добавленное через произвольные выражения или соединения, может привести к полному сканированию. На больших таблицах проверяйте план запроса в консоли запросов до переноса кода в рабочую базу.
Что важно запомнить
Значение параметра задаётся статически в конфигураторе или вызовом Список.Параметры.УстановитьЗначениеПараметра на сервере. Имя и тип должны точно совпадать с запросом, а для редактируемых пользователем отборов лучше подходят настройки компоновки данных.
Частые вопросы
Можно ли установить параметр динамического списка на клиенте?
Нет. Коллекция параметров динамического списка доступна только в серверном контексте формы. Из клиентского обработчика вызывайте серверную процедуру, которая установит значение, после чего платформа сама обновит список.
Почему после установки параметра список пустой, хотя данные есть?
Чаще всего причина в несовпадении типов: например, параметру присвоена строка вместо ссылки или дата без времени отсекает записи текущего дня. Проверьте значение через отладчик и сравните с данными напрямую в консоли запросов с тем же параметром.
Как передать в параметр список значений для условия «В»?
Сформируйте объект СписокЗначений или массив и передайте его в УстановитьЗначениеПараметра. В тексте запроса условие должно выглядеть как «Поле В (&ИмяПараметра)». Строку с перечислением через запятую передавать нельзя — сравнение будет строковым.
Чем параметр запроса отличается от отбора динамического списка?
Параметр подставляется в текст запроса и невидим пользователю — он не может его изменить или отключить. Отбор в настройках компоновки отображается в стандартной панели настроек списка и доступен для редактирования. Для жёстких служебных ограничений используйте параметры, для пользовательских — отбор.
Нужно ли вручную обновлять список после установки параметра?
Нет, платформа автоматически перечитывает данные при изменении значения параметра. Явный вызов обновления требуется только в нестандартных сценариях, например после программной записи данных вне формы.
Параметр есть в запросе, но не виден в коллекции Параметры. Почему?
Проверьте, что у динамического списка включён флаг «Произвольный запрос» и что параметр действительно используется в тексте запроса, а не закомментирован. После правки текста запроса обновите форму — коллекция параметров перестраивается при сохранении текста.