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