Наверно, каждый сталкивался с проблема настройки фильтраторов, особенно, при использования модуля Канцелярия. В этой статье хочу немного детальнее раскрыть механизмы настройки фильтраторов по записям справочников и описать некоторые особенности.
Фильтраторы можно настроить в компонентах «Пользователи» и «Группы пользователей». Приоритетным является настройка компоненты «Пользователи». После настройки нужно перезапустить проводник DIRECTUM для того, чтобы фильтратор по записям заработал.
При первоначальном использовании фильтраторов обычно возникает вопрос: откуда берутся реквизиты для фильтрации справочников?
Задавать признак фильтрации справочника по определенному реквизиту необходимо в соответствующей записи справочника компоненты «Типы справочников», на закладке Реквизиты в столбце «Фильтратор».
Справочник может не появиться в фильтраторе по следующим причинам:
Разберемся с двумя верхними полями окна настройки фильтратора: «Записи фильтратора» и «Ограничения использования записей фильтратора».
В списке «Записи фильтратора» - перечислены все возможные значения реквизита-фильтратора.
В списке «Ограничения использования записей фильтратора» - заданы ограничения, рассмотрим все возможные случаи этих органичений.
Значения «Нет доступа» и «Доступ разрешен» - задают ограничения доступности к записи справочника содержащей определенное значение реквизита-фильтратор. Еще есть значение «По умолчанию», т.е. когда значение реквизита-фильтратора находится в колонке «Записи фильтратора».
Со значением «По умолчанию» все очень интересно, оно может как разрешать доступ, так и запрещать.
Изначально, при настройке фильтратора в компоненте «Пользователи» значение по умолчанию подразумевает, то что ограничение по данному значению реквизита-фильтратора будет браться из фильтратора настроенного в компоненте «Группы пользователей». Если же пользователь не входит в группу, в фильтраторе которой можно настроить ограничение по нужной записи, то возможны 2 варианта.
Есть еще одна хитрая особенность настройки фильтраторов по записям, рассмотрим ее на примере. Есть пользователь, который входит в две группы («тестовая» и «тест канц»). Каждой группе выданы права только на 1 справочник. В каждом из справочников используется поле подразделение.
Настроим фильтратор по записям для одной из групп на справочник РКК. Для другой группы фильтратор по подразделения настраивать не будем, в итоге увидим следующую картину:
Как видно по скриншоту тестовый справочник отфильтрован по фильтраторам, которые настраивались совершенно в другой группе, для другого справочника. Для того, чтобы наш справочник не фильтровался по фильтраторам из другой группы нужно для него явно указать ограничение использования фильтратора:
Описанная особенность связана с тем, что все настройки фильтраторов берутся из двух таблиц MBUserCompRecR, MBUserCompRecExR (подробную информацию про эти таблицы можно получить из справки).
Разберемся немного детальнее, что же происходит при сохранении фильтратора и открытии справочника фильтруемого по записям.
При настройке фильтратора происходит следующее:
1.Заполняется таблицы:
MBUserCompRec - фильтры по записям при доступе к компонентам.
MBUserCompRecEx - компоненты, не использующие фильтры по записям при ограничении доступа.
2.Непосредственно при сохранении фильтратора в БД срабатывает хранимая процедура MBCreateUserRecR, которая заполняется таблицы:
MBUserCompRecR - содержит полный список прав доступа по записям (в таблице перечислены только те записи, на которые у пользователя есть права). Обратим внимание на то, что в таблицу помимо фильтратора для группы вносится фильтратор для пользователя, именно по нему и происходит проверка при открытии справочника.
MBUserCompRecExR - содержит полный список компонент, не использующий права доступа по записям.
На картинке пользователь test1 (ИД=580) входит в 2 группы: «тест канц» (желтая, ИД=584) и «тестовая» (зеленая, ИД=581) и видно, что его права доступа к записям по фильтраторам к компоненте «Подразделения» (ComponentID=20) объединяются в общий список полных прав пользователя в таблице MBUserCompRecR.
Непосредственно при открытии справочника с настроенным реквизитом-фильтратором выполняется:
1.Проверка типа прав доступа на компоненту из MBUserCompR
2.Идет получение списка записей реквизита-фильтратора, присутсвующего в открываемом справочнике, на которые у пользователя есть права (таблица MBUSerCompRecR)
3.Проверка наличия открываемого справочника в списке компонент, не использующих права доступа по записям (таблица MBUserCompRecExR).
Если справочник не найден в этой таблице, то он открывается с данными полученными из таблицы MBUSerCompRecR (пункт 2). Другими словами при открытии справочника билдер проверяет только явные права пользователя (фиолетовый список).
На этом, пожалуй, стоит закончить описание настройки механизма фильтрации. Надеюсь, этот материал и информация из справки поможет Вам разобраться со своими фильтраторами:)
А если в фильтруемом справочнике указать два реквизита фильтратора с одним типом справочника, что будет?
Супер материал! Спасибо
Ещё полезной кому-то может показаться ссылка на справку http://club.directum.ru/webhelp/list.aspx?ra_ogranichenie_prav_po_zapisjam_user.htm.
Авторизуйтесь, чтобы написать комментарий