Как настроить динамический список, чтобы пользователь видел только свои документы?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Понимание ограничений метода

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

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

Реализация фильтрации через модуль формы

Разберем по шагам, как добавить программный отбор в ФормаСписка. Мы будем использовать событие ПриОткрытии, чтобы при инициализации формы применять необходимые условия.

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


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

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

Теперь необходимо вызвать эту процедуру из клиентского обработчика:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
КонецПроцедуры

Почему важно проверять роли и параметры?

В приведенном примере мы используем проверку РольДоступна. Это позволяет гибко управлять политикой доступа прямо из кода формы. Если пользователь не обладает расширенными правами, платформа применяет отбор к ДинамическомуСписку.

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

Альтернативный способ установки отбора

Существует также более лаконичный метод с использованием типовых библиотек 1С. Если ваша конфигурация использует БСП (Библиотеку Стандартных Подсистем), можно воспользоваться процедурой ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка:


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

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

Рекомендации по дальнейшей поддержке

При использовании данного подхода не забывайте о возможных организационных изменениях:

  1. Увольнение сотрудников: Если автор документа уволился, документы могут стать «невидимыми» для всех, если не настроить логику передачи прав или делегирования.
  2. Масштабируемость: Если количество пользователей возрастет, возможно, стоит перейти от фильтрации по АвтДок к фильтрации по группам пользователей или подразделениям.
  3. Конфликты настроек: Если вы получаете ошибку «Пересекаются элементы отбора», проверьте настройки самого ДинамическогоСписка в Конфигураторе — возможно, там уже заданы фиксированные настройки, которые конфликтуют с программным кодом.

Надеемся, что это решение поможет вам грамотно настроить работу с документами в вашей системе!

← На главную