Как ограничить доступ пользователя к определенной папке номенклатуры в 1С 7.7?

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Ограничение доступа на уровне записей в платформе 1С:Предприятие 7.7 — это классическая архитектурная задача, требующая комплексного подхода. Поскольку встроенного механизма RLS (Record Level Security) в «семерке» не существует, нам предстоит реализовать логику фильтрации самостоятельно. Давайте разберем, как подойти к этой задаче профессионально, избегая создания РИБ.

Этап 1: Подготовка данных и реквизитов

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

  1. Создайте реквизит ГруппаДоступа (тип — Справочник.ГруппыДоступа).
  2. При заполнении карточек товара или при перемещении элемента в группу, необходимо программно проставлять этот реквизит.
  3. Используйте событие ПриЗаписи() в модуле формы или модуля справочника, чтобы актуализировать этот признак.

Этап 2: Фильтрация в формах списков и подбора

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

В модуле формы списка или формы подбора номенклатуры при открытии (событие ПриОткрытии()) мы должны сформировать список допустимых элементов:


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

Этот метод позволяет скрыть «лишние» товары из общего списка, однако помните: это лишь «защита от дурака». Пользователь с навыками работы с отчетами все равно сможет увидеть запрещенные данные, если отчеты не будут доработаны.

Этап 3: Доработка отчетов и запросов

Чтобы система безопасности работала надежно, необходимо вмешаться в формирование любого запроса к базе данных. Здесь есть два пути:

Путь А: Ручная доработка. Вы создаете глобальную функцию, которая возвращает текстовую строку с условием (фильтром) для запроса. Например: Номенклатура.ГруппаДоступа = :ВыбраннаяГруппа. Каждое обращение к базе данных в отчетах должно принудительно дополняться этим условием в блоке ГДЕ.

Путь Б: Централизованный класс доступа. Создайте специализированный класс или модуль, который будет отвечать за «политику безопасности». Суть в том, чтобы все отчеты обращались к этому классу для получения текста фильтра. Это упрощает поддержку — при изменении логики вам не придется переписывать каждый отчет отдельно.

Этап 4: Радикальные методы защиты

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

Важные рекомендации

При реализации системы ограничения доступа всегда держите в уме следующие принципы:

  1. Нельзя быть «наполовину беременной»: Если вы решили внедрять фильтрацию, она должна работать везде — в документах, в справочниках, в отчетах, в универсальных обработках. Один «дырявый» отчет сведет на нет все усилия по настройке прав.
  2. Учитывайте контекст: Помните, что метод ИспользоватьСписок() работает только в интерактивных формах. Для фоновых заданий или отчетов, запускаемых программно, он бесполезен.
  3. Тестируйте под ограниченным пользователем: Всегда создавайте тестовую учетную запись с ограниченными правами и проверяйте работу системы «от обратного»: может ли пользователь найти то, что ему не положено видеть, через стандартные универсальные отчеты или консоль запросов.

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

← На главную