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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При настройке прав пользователей в программе 1С:Управление торговлей 11 часто возникает задача скрыть от менеджеров по продажам данные по сделкам и валовой прибыли их коллег. Типовая попытка решить задачу «в лоб» — включить ограничение на уровне записей (RLS) и в профиле группы доступа для вида доступа Пользователи установить значение «Все запрещены, кроме текущего» — не дает ожидаемого результата: менеджер продолжает видеть отчеты по валовой прибыли и продажам других сотрудников. Разберем детально, почему так происходит и какие существуют практические способы решения этой задачи.

Почему вид доступа «Пользователи» не ограничивает отчеты по продажам

Проанализируем архитектуру подсистемы управления доступом Библиотеки стандартных подсистем (БСП), используемой в УТ 11. Вид доступа Пользователи по умолчанию предназначен исключительно для персональных задач, бизнес-процессов, настроек и внутренних документов. Он не транслируется на финансовые и складские регистры накопления.

Отчет по валовой прибыли строится по данным регистра накопления РегистрНакопления.ВыручкаИСебестоимостьПродаж. В типовых шаблонах ролей на чтение этого регистра ограничение накладывается только по следующим разрезам:

  1. Организации
  2. ГруппыПартнеров (Группы доступа партнеров)
  3. Подразделения

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

Решение 1. Ограничение через группы доступа партнеров

Рассмотрим основной типовой механизм, заложенный разработчиками 1С для разделения клиентской базы между менеджерами:

  1. В разделе НСИ и администрирование — Настройки пользователей и прав — Группы доступа включим ограничение на уровне записей.
  2. Создадим для каждого менеджера отдельную группу доступа партнеров (например, «Клиенты Иванова», «Клиенты Петровой»).
  3. В карточках соответствующих партнеров укажем нужную группу доступа.
  4. В профиле доступа менеджера укажем разрешенной только его группу партнеров.
  5. Выполним регламентное задание Заполнение данных для ограничения доступа.

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

Решение 2. Разграничение продаж через подразделения компании

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

  1. В справочнике Структура предприятия создадим отдельные подразделения под каждого менеджера или локальные торговые группы.
  2. В документах реализации и заказах клиентов жестко зафиксируем подстановку подразделения ответственного менеджера.
  3. В профилях групп доступа настроим ограничение по виду доступа Подразделения.

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

Решение 3. Изменение шаблона RLS и обновление метаданных доступа

Если требуется жестко ограничить чтение регистра выручки именно по реквизиту Менеджер, разберем доработку роли на чтение регистра накопления ВыручкаИСебестоимостьПродаж (рекомендуется выполнять в расширении конфигурации).

Посмотрим на стандартное условие шаблона RLS:


#ПоЗначениямРасширенный(
    "РегистрНакопления.ВыручкаИСебестоимостьПродаж","Чтение","",
    "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК Т1 ПО Т.АналитикаУчетаПоПартнерам = Т1.КлючАналитики", "",
    "Организации","Т1.Организация","И",
    "ГруппыПартнеров","Т1.Партнер","И",
    "Подразделения","Т.Подразделение","",
    "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "",""
)

Заменим его условием с добавлением вида доступа Пользователи по полю Т.Менеджер:


#ПоЗначениямРасширенный(
    "РегистрНакопления.ВыручкаИСебестоимостьПродаж","Чтение","",
    "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК Т1 ПО Т.АналитикаУчетаПоПартнерам = Т1.КлючАналитики", "",
    "Организации","Т1.Организация","И",
    "ГруппыПартнеров","Т1.Партнер","И",
    "Подразделения","Т.Подразделение","И",
    "Пользователи", "Т.Менеджер","","",
    "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "",""
)

После изменения параметров доступа в конфигурации или расширении необходимо принудительно обновить кэш и служебные структуры доступа БСП с помощью программного вызова:


&НаСервереБезКонтекста
Процедура ОбновитьВидыДоступаНаСервере()
    УстановитьПривилегированныйРежим(Истина);
    Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, Ложь);
    УправлениеДоступомСлужебный.ОбновитьОписаниеСвойствВидовДоступа();
    УправлениеДоступом.ОбновитьРазрешенныеЗначенияПриИзмененииИспользованияВидовДоступа();
    УправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа();
КонецПроцедуры

Решение 4. Ограничение на уровне настроек варианта отчета или кодом

Если вмешательство в RLS нежелательно из-за риска снижения производительности базы, применим ограничение на уровне схемы компоновки данных (СКД):

  1. В пользовательском режиме создадим отдельный вариант отчета «Валовая прибыль (для менеджера)».
  2. В настройках СКД установим отбор: Менеджер Равно Авто / Текущий пользователь.
  3. В свойствах элемента пользовательских настроек установим признак «Запретить редактирование» (сделать элемент недоступным для изменения).
  4. Через подсистему «Варианты отчетов» откроем менеджерам доступ только к этому фиксированному варианту, закрыв доступ к типовому.

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


&НаСервере
Функция ПолучитьТекущегоПользователя() Экспорт
    ИдПользователя = ПользователиИнформационнойБазы.ТекущийПользователь.УникальныйИдентификатор;
    ПользовательСсылка = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдПользователя);
    
    Если ПользовательСсылка = Справочники.Пользователи.ПустаяСсылка() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат ПользовательСсылка;
КонецФункции

Ограничение видимости почты и взаимодействий

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

  1. Тип учетной записи почты: в справочнике Учетные записи электронной почты запись менеджера должна иметь статус «Персональная» с указанием конкретного владельца, а не «Общая».
  2. Предмет взаимодействия: если письмо привязано к общему партнеру, права на взаимодействие будут наследоваться от этого партнера. Разграничить переписку внутри одного общего партнера без изоляции самих учетных записей или сделок невозможно.
← На главную