К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как установить значение параметра динамического списка в 1С

Способы установить значение параметра динамического списка 1С: в конфигураторе, программно через УстановитьПараметр и по событию ПриПолученииДанных. Примеры кода и ошибки.

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

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

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

Как устроены параметры динамического списка

Динамический список — это реквизит формы типа «ДинамическийСписок», данные которого формируются запросом. Запрос задаётся в свойстве «Произвольный запрос» (флаг «ПроизвольныйЗапрос»), и любой параметр этого запроса (например, &Организация или &Период) попадает в коллекцию Параметры списка.

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

Установка значения в конфигураторе

Если значение параметра известно на этапе разработки и не зависит от контекста, проще всего задать его статически. Откройте форму в конфигураторе, выделите реквизит динамического списка, в палитре свойств найдите строку «Параметры» и нажмите кнопку выбора — откроется редактор значений параметров.

В редакторе для каждого параметра запроса отображаются имя и текущее значение. Установите нужное значение и убедитесь, что флаг использования снят только там, где параметр действительно не нужен. Этот способ подходит для константных отборов: например, «показывать только активные элементы» или фиксированный вид документа.

Ограничение способа очевидно: значение «зашито» в форму. Если отбор должен зависеть от текущего пользователя, даты или параметров открытия формы, статическая установка не подойдёт — потребуется код.

Программная установка через УстановитьЗначениеПараметра

Основной рабочий метод — вызов УстановитьЗначениеПараметра у коллекции параметров списка. Типичное место вызова — обработчик ПриСозданииНаСервере, когда форма уже инициализирована, но список ещё не выведен пользователю.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("Организация", Параметры.Организация);
    Список.Параметры.УстановитьЗначениеПараметра("Период", ТекущаяДатаСеанса());
КонецПроцедуры

После такого вызова платформа автоматически перечитает данные списка с новым отбором — дополнительно обновлять таблицу не требуется. Если параметр нужно менять в ходе работы (например, пользователь выбрал склад в поле на форме), вызывайте тот же метод из обработчика изменения поля — список пересчитается сам.

Порядок действий
  1. 1
    Откройте модуль формы и найдите или создайте обработчик ПриСозданииНаСервере
  2. 2
    Определите значение параметра: из Параметры формы, настроек или функциональных опций
  3. 3
    Вызовите Список.Параметры.УстановитьЗначениеПараметра с точным именем параметра из запроса
  4. 4
    Проверьте тип значения — он должен совпадать с типом поля, с которым сравнивается параметр
  5. 5
    Откройте форму в режиме предприятия и убедитесь, что данные отфильтрованы

Установка параметра из параметров открытия формы

Частый сценарий — форма выбора, открываемая с отбором. В этом случае значение приходит в коллекции Параметры формы, и его нужно пробросить в параметры списка. При этом полезно проверять наличие ключа: обращение к несуществующему параметру формы даст неопределённость поведения.

Альтернатива — стандартный механизм Отбор в параметрах формы выбора: платформа сама добавит условие в список без изменения запроса. Но если отбор сложный (по диапазону дат, по условию ИЛИ), параметры запроса надёжнее.

Установка параметра при формировании списка

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

Такой подход гарантирует актуальность значения при каждой перерисовке списка, но требует аккуратности: обработчик вызывается часто, поэтому в нём нельзя выполнять тяжёлые вычисления или запросы к базе — это замедлит прокрутку списка.

Сравнение вариантов

Статически в конфигураторе

Подходит для постоянных отборов; не реагирует на контекст открытия

ПриСозданииНаСервере

Универсальный вариант для значений из параметров формы; устанавливается один раз

ПриПолученииДанныхНаСервере

Для значений, зависящих от текущего момента; вызывается при каждом обновлении, нельзя перегружать

Проверка результата и типичные ошибки

Главный признак корректной установки — список показывает именно те строки, которые соответствуют отбору, без сообщений об ошибках. Если список пуст, сначала проверьте, не отсекает ли параметр все данные: временно задайте заведомо широкое значение и убедитесь, что записи появляются.

Типичные ошибки
01
Опечатка в имени параметра — платформа выдаст ошибку или параметр просто не применится; сверяйте имя с текстом запроса посимвольно
02
Несовпадение типов: параметру даты присвоена строка — условие в запросе молча не сработает
03
Установка параметра на клиенте в тонком клиенте: коллекция параметров списка доступна только на сервере
04
Забыт флаг «Произвольный запрос» у динамического списка — параметры из текста запроса не подхватятся
05
Установка значения в ПриОткрытии вместо ПриСозданииНаСервере — список уже сформирован без отбора, лишнее обращение к базе

Отдельная ловушка — параметры типа «список значений» для условия В (&Список). Передавайте именно объект СписокЗначений или массив, а не строку с перечислением: иначе сравнение будет выполняться по строковому представлению и не вернёт ни одной записи.

Контрольные точки

Как проверить результат

Содержимое списка после открытия формы
Норма

Показаны только записи, удовлетворяющие отбору

Тревожный признак

Пустой список или все записи без фильтрации

Журнал ошибок / окно сообщений
Норма

Нет сообщений о параметрах запроса

Тревожный признак

Ошибка «Параметр не найден» или «Несовместимые типы»

Смена значения параметра в ходе работы
Норма

Список мгновенно перестраивается

Тревожный признак

Отбор применяется только после переоткрытия формы

Ограничения и когда нужен другой подход

Параметры динамического списка — не единственный инструмент отбора. Если условие может меняться пользователем, правильнее использовать настройки компоновки данных списка (Список.КомпоновщикНастроек), добавляя элементы отбора — тогда пользователь сможет видеть и корректировать отбор стандартными средствами.

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

Итог

Что важно запомнить

Значение параметра задаётся статически в конфигураторе или вызовом Список.Параметры.УстановитьЗначениеПараметра на сервере. Имя и тип должны точно совпадать с запросом, а для редактируемых пользователем отборов лучше подходят настройки компоновки данных.

Частые вопросы

Можно ли установить параметр динамического списка на клиенте?

Нет. Коллекция параметров динамического списка доступна только в серверном контексте формы. Из клиентского обработчика вызывайте серверную процедуру, которая установит значение, после чего платформа сама обновит список.

Почему после установки параметра список пустой, хотя данные есть?

Чаще всего причина в несовпадении типов: например, параметру присвоена строка вместо ссылки или дата без времени отсекает записи текущего дня. Проверьте значение через отладчик и сравните с данными напрямую в консоли запросов с тем же параметром.

Как передать в параметр список значений для условия «В»?

Сформируйте объект СписокЗначений или массив и передайте его в УстановитьЗначениеПараметра. В тексте запроса условие должно выглядеть как «Поле В (&ИмяПараметра)». Строку с перечислением через запятую передавать нельзя — сравнение будет строковым.

Чем параметр запроса отличается от отбора динамического списка?

Параметр подставляется в текст запроса и невидим пользователю — он не может его изменить или отключить. Отбор в настройках компоновки отображается в стандартной панели настроек списка и доступен для редактирования. Для жёстких служебных ограничений используйте параметры, для пользовательских — отбор.

Нужно ли вручную обновлять список после установки параметра?

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

Параметр есть в запросе, но не виден в коллекции Параметры. Почему?

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