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