Как скрыть помеченные на удаление группы справочника в обычных формах 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Разберем первоначальный код, который часто пытаются использовать для решения этой задачи:


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

Проанализируем причину, по которой данный подход не работает для групп. Особенность кроется в архитектуре ядра 1С для обычных форм. При включенном свойстве ИерархическийПросмотр платформа применяет фильтр только к самим элементам, негласно добавляя условие принадлежности именно к элементам. Группы принудительно выводятся ядром для сохранения связности дерева, ведь помеченная на удаление родительская группа вполне может содержать внутри себя непомеченные элементы. В этом случае скрытие группы привело бы к разрыву иерархии.

Посмотрим на проверенные способы, которые действительно помогут решить данную задачу.

Способ 1. Использование объекта "ДеревоЗначений"

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

  1. Удалите с формы табличное поле с типом данных списка справочника.
  2. Добавьте новое табличное поле и назначьте ему тип ДеревоЗначений.
  3. Программно заполните это дерево с помощью прямого запроса к базе данных. В тексте запроса жестко пропишите условие ПометкаУдаления = Ложь как для элементов, так и для групп.
  4. Выгрузите результат выполнения запроса (с использованием итогов по иерархии) в созданное дерево.

Этот метод требует дополнительного программирования (например, обработки двойного клика для открытия формы элемента), но дает вам 100% контроль над отображаемыми строками.

Способ 2. Настройка прав доступа (RLS)

Рассмотрим наиболее корректный с точки зрения платформы способ — ограничение на уровне записей (Record Level Security). Если вы хотите, чтобы удаленные группы бесшовно исчезали из интерфейса, не ломая встроенную иерархию, сделайте следующее:

  1. Перейдите в настройки ролей пользователей.
  2. Настройте шаблоны ограничений доступа к данным (RLS) для нужного справочника.
  3. Пропишите условие, запрещающее чтение записей, у которых установлен флаг пометки удаления.

При таком подходе ядро 1С физически не сможет прочитать эти данные из базы при построении списка, и они не попадут в кэш отображения формы. Иерархическая структура при этом будет выведена корректно.

Способ 3. Переход в режим плоского списка

Если древовидная структура (отображение по папкам) не является строго обязательной для текущего бизнес-процесса, мы можем просто выключить ее. Проанализируем этот вариант:

Когда вы принудительно задаете свойство ИерархическийПросмотр = Ложь (и не возвращаете его обратно в Истина, как это делалось в изначальном коде-костыле), список становится плоским. В режиме плоского списка платформенный отбор работает без ограничений ядра. В таком виде условие по свойству отбора ПометкаУдаления успешно сработает и на элементы, и на группы.

Подведем итог: попытки скрыть группы стандартным отбором в иерархическом списке обычного приложения обречены на неудачу из-за внутренних механизмов 1С. Выбирайте один из рассмотренных обходных путей в зависимости от того, что для вас важнее: сохранение визуального дерева или минимизация написания дополнительного программного кода.

← На главную