Как запретить выбор элементов из архивной папки справочника в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе длительной эксплуатации учетной системы в справочниках накапливается большое количество устаревших или ошибочно созданных записей (номенклатура, бизнес-регионы, контрагенты, партнеры). Удалить их напрямую нельзя, так как на них ссылаются проведенные документы прошлых периодов. Распространенное решение — перенести весь неактуальный массив данных в специальную архивную папку. Однако сразу возникает задача: запретить пользователям выбирать элементы из этой папки в новых документах и формах ввода.

Проанализируем различные способы решения этой задачи в конфигурациях на платформе 1С:Предприятие 8.3 (управляемые формы) — от простых платформенных настроек без программирования до переопределения обработчиков в модуле менеджера и настройки прав доступа (RLS).

Вариант 1. Фильтрация через модуль менеджера (универсальный программный способ)

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

В модуле менеджера справочника (например, Справочник.БизнесРегионы или Справочник.Номенклатура) переопределим процедуру ОбработкаПолученияДанныхВыбора. Это событие отвечает за генерацию выпадающего списка при вводе по строке и быстром подборе.

Посмотрим на пример реализации:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, ПараметрыВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	// Получаем ссылку на архивную папку (можно хранить в предопределенных или константе)
	АрхивнаяПапка = Справочники.БизнесРегионы.НайтиПоНаименованию("Архив");
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50
		|	Спр.Ссылка КАК Ссылка,
		|	Спр.Наименование КАК Представление
		|ИЗ
		|	Справочник.БизнесРегионы КАК Спр
		|ГДЕ
		|	Спр.Наименование ПОДОБНО &СтрокаПоиска + ""%""
		|	И НЕ Спр.Ссылка В ИЕРАРХИИ (&АрхивнаяПапка)
		|	И НЕ Спр.ПометкаУдаления
		|	И НЕ Спр.ЭтоГруппа";
	
	Запрос.УстановитьПараметр("СтрокаПоиска", ПараметрыВыбора.СтрокаПоиска);
	Запрос.УстановитьПараметр("АрхивнаяПапка", АрхивнаяПапка);
	
	ДанныеВыбора = Новый СписокЗначений;
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Представление);
	КонецЦикла;
	
КонецПроцедуры

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

Вариант 2. Настройка параметров выбора в реквизитах (без изменения кода)

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

  1. Откроем в конфигураторе форму документа или свойства реквизита объекта.
  2. В палитре свойств найдем строку Параметры выбора и нажмем кнопку открытия диалога настройки.
  3. Добавим новый параметр отбора:
    1. Имя: Отбор.Ссылка (или Отбор.Родитель);
    2. Вид сравнения: Не в иерархии;
    3. Значение: выбираем созданную архивную группу справочника.
  4. Если требуется запретить выбор самих папок (групп), в свойстве Выбор групп и элементов переключаем значение в Элементы.

Платформа 1С автоматически передаст этот отбор как в форму выбора при нажатии кнопки с многоточием, так и в алгоритм автоподбора при вводе текста.

Вариант 3. Установка фиксированного отбора в динамическом списке формы выбора

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

В модуле формы выбора в событии ПриСозданииНаСервере пропишем установку фиксированного отбора:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	АрхивнаяПапка = Справочники.БизнесРегионы.НайтиПоНаименованию("Архив");
	
	Если ЗначениеЗаполнено(АрхивнаяПапка) Тогда
		ЭлементОтбора = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
		ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии;
		ЭлементОтбора.ПравоеЗначение = АрхивнаяПапка;
		ЭлементОтбора.Использование = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

Вариант 4. Ограничение доступа на уровне записей (RLS)

В типовых конфигурациях (например, «1С:Управление торговлей 11», «1С:ERP») существует возможность разграничения прав по группам доступа номенклатуры или партнеров с использованием RLS.

Рассмотрим, как настроить данный механизм:

  1. Создаем отдельную группу доступа (например, «Архивные позиции»).
  2. В профилях и группах доступа пользователей указываем доступ ко всем группам номенклатуры/справочника, кроме группы «Архивные позиции».
  3. С помощью группового изменения реквизитов присваиваем архивным позициям запрещенную группу доступа.

Важное предостережение: использование RLS полностью скрывает записи из базы данных для пользователей с ограниченными правами. Это означает, что в исторических проведенных документах и аналитических отчетах на месте архивных элементов пользователи увидят надпись <Объект не найден>. Если требуется сохранить читаемость истории, RLS использовать нельзя.

Дополнительные рекомендации по работе с архивными данными

Для комплексного решения задачи очистки справочников рекомендуется учесть следующие нюансы:

  1. Очистка истории выбора: Платформа 1С сохраняет ранее выбранные значения в кэше пользователя. Даже после скрытия папки старый элемент может всплывать в подсказках. Рекомендуется очистить историю выбора через ИсторияВыбора.Очистить() или пользовательское меню.
  2. Добавление префикса в наименование: Добавление префикса вроде [АРХИВ] или zzz_ перемещает элементы в конец списка при алфавитной сортировке и наглядно предупреждает пользователей.
  3. Использование реквизита «Недействителен»: Во многих современных типовых решениях добавлен булевый реквизит Недействителен. При его включении система автоматически скрывает позицию из списков подбора без необходимости переноса по иерархии папок.
← На главную