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