При длительной эксплуатации конфигураций 1С (например, «Управление торговлей 11») в справочниках накапливается множество неактуальных записей. Распространенной практикой является создание специальной папки (например, «Архив» или «Хлам») и перенос неиспользуемых элементов туда. Однако само по себе перемещение в папку не запрещает пользователям выбирать эти элементы при оформлении новых документов. Разберем по шагам практические варианты решения этой задачи, начиная от настройки форм и модуля менеджера до использования штатных возможностей Библиотеки Стандартных Подсистем (БСП).
Если требуется запретить выбор неактуальных элементов по всей системе без редактирования всех форм документов, проанализируем обработчик ОбработкаПолученияДанныхВыбора в модуле менеджера справочника. Данный метод автоматически вызывается платформой при вводе по строке, быстром подборе и формировании выпадающих списков.
Рассмотрим пример реализации в модуле менеджера справочника (например, Справочник.БизнесРегионы):
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
ПапкаХлам = Справочники.БизнесРегионы.НайтиПоНаименованию("Хлам");
Если ЗначениеЗаполнено(ПапкаХлам) Тогда
// Добавляем условие исключения элементов из группы в отбор
ЭлементОтбора = Новый ЭлементОтбораКомпоновкиДанных;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии;
ЭлементОтбора.ПравоеЗначение = ПапкаХлам;
ЭлементОтбора.Использование = Истина;
Параметры.Отбор.Элементы.Добавить(ЭлементОтбора);
КонецЕсли;
КонецПроцедуры
Преимущество метода: отбор применяется глобально во всей конфигурации, включая быстрый ввод по строке во всех полях формы.
Выясним, как настроить ограничение непосредственно в формах справочника. Если у справочника отсутствует отдельная форма выбора, создадим её в конфигураторе или настроим имеющуюся форму списка.
Разберем последовательность действий:
Список с типом ДинамическийСписок.ПриСозданииНаСервере.Рассмотрим пример кода для формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПапкаХлам = Справочники.БизнесРегионы.НайтиПоНаименованию("Хлам");
Если ЗначениеЗаполнено(ПапкаХлам) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии;
ЭлементОтбора.ПравоеЗначение = ПапкаХлам;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Если необходимо ограничить выбор только для конкретного поля документа или справочника, используем свойства метаданных без написания кода.
Отбор.Ссылка, вид сравнения Не в иерархии, и укажем группу, элементы которой нужно скрыть.В современных конфигурациях 1С (включая «1С:Управление торговлей 11») стандартным способом скрытия устаревших данных является использование специального реквизита Недействителен вместо переноса элементов по папкам.
Проанализируем особенности этого подхода:
Обратим внимание, что ограничение выбора в интерфейсных формах не предотвращает проведение документов, если элемент был подставлен через обмен данными или групповую обработку. Для гарантированного запрета рекомендуется дорабатывать проверку в модуле объекта документа в событии ОбработкаПроверкиЗаполнения или ПередЗаписью.