Работа с неактуальными (недействительными) объектами

#std638

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Методическая рекомендация (полезный совет)

1. Данная рекомендация действует для ситуаций, когда какой-либо объект информационной базы перестает быть актуальным – навсегда или на время (сотрудник увольняется или уходит в декретный отпуск, подразделение расформируется и т.д.). При этом удалять этот объект из базы недопустимо, чтобы не нарушать ссылочную целостность: на него должны ссылаться другие ранее созданные объекты. Например, объект типа Файл должен содержать в поле Автор ссылку на уволившегося сотрудника и после его увольнения.

2. Для запрета выбора неактуальных объектов с помощью автоподбора и быстрого выбора в полях ввода следует выбрать один из двух подходов к реализации (2.1 или 2.2). Проиллюстрируем их далее на примере пользователей информационной системы, учет которых ведется в справочнике Пользователи.

Для учета неактуальных пользователей у справочника Пользователи добавлен реквизит Недействителен (Булево), по умолчанию Ложь.

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

2.1.1. В модуле менеджера справочника Пользователи реализуются обработчики ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы для установки параметров отбора. Пример реализации этих обработчиков для справочника Пользователи:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
 Если Не Параметры.Отбор.Свойство("Недействителен") Тогда
  Параметры.Отбор.Вставить("Недействителен", Ложь);
 КонецЕсли;
КонецПроцедуры

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

2.1.2. Для тех реквизитов, где это поведение нужно изменить (например, нужно выводить всех пользователей или должно работать другое ограничение) следует явно установить свойства «Параметры выбора» и «Связи параметров выбора» с необходимыми в конкретном контексте значениями выбора:

2.2. Если запрет на выбор неактуальных объектов сильно зависит от контекста (сценариев работы), то не следует его устанавливать по умолчанию.

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

4. Для отображения неактуальных объектов в списках рекомендуется использовать элемент стиля ТекстЗапрещеннойЯчейкиЦвет (192,192,192).