ВАЖНО! Для того, чтобы штатный механизм ограничений доступа к контрагентам работал, надо поставить галочку в константах "Ограничение прав доступа на уровне записей".
Что именно делает обработка. Алгоритм следующий:
-
При открытии обработка в правом окне формирует список пользователей, у которых отсутствуют полные права на базу (потому что тем, у кого полные права назначение разрешений не требуется). Список сортируется по имени пользователя и менять порядок и состав строк запрещено, дальше будет понятно почему...
-
По тем пользователям, у которых проставите галочки, будет создана строка вида: Имя1;Имя2;Имя3 ... и т.д. Если в имени пользователя несколько слов, то берется первое. По этой строке ищется группа доступа к контрагентам, по совпадению наименования. Если такой нет - создается новая.
-
Для каждого пользователя из отмеченных галочками ищется "группа пользователей", в которую он входит. По приоритету берется группа в которой он один в качестве участников, ну а если такой нет, то по увеличению кол-ва членов группы. Например, если нужно начальнику отдела дать права на контрагентов какого-то менеджера, то достаточно начальника добавить в группу которая привязана к этому менеджеру. Если найденных групп с текущим пользователем вообще не найдено, то она создается.
-
Дальше пишутся настройки в регистры "НазначениеВидовОбъектовДоступа" и "НастройкиПравДоступаПользователей", с видом доступа "Контрагенты" и найденными/созданными группами "доступа" и "пользователей". Права на запись элементов разрешается.
-
После всего этого обработка присваивает группу доступа контрагентам из левого списка.
Минус в том, что в типовой конфигурации длина наименования у этого справочника всего 25 символов, и наша строка может получиться больше. В таком случае программа проверит, если наша строка больше, то создается новая группа, с названием Имя1;Имя2;Им... Вообще по опыту редко случается необходимость назначить права к контрагенту больше чем двум, максимум трем пользователям одновременно, поэтому если увеличить длину наименования справочника до 150 этого за глаза должно хватить.
Следует заметить, что если у вас был назначен доступ Менеджеру1 на какую-то папку или контрагента, и вы хотите дать разрешение на этого контрагента/папку Менеджеру2, то в обработке надо поставить галочки на ОБОИХ этих пользователей. Иначе будет создана новая группа доступа, она запишется в контрагента и Менеджер1 уже не увидит этого контрагента. Т.е. в правом окне надо ВСЕГДА проставлять ВСЕХ пользователей которые должны видеть контрагентов, указанных слева.
Код открыт, тестировалась на версиях УТ с 10.3.5.1 по 10.3.14.5.
На всякий случай добавил галочку "Всегда создавать новую группу доступа", это для тех у кого имена пользователей в базе содержат пробелы, например ФИО написано полностью. Т.к. берется первое слово из имени пользователя, то возможны "перехлесты" прав, например 2 человека с фамилией "Иванов" и им надо выдать разные права, если галочку не поставить, то программа найдет группу доступа 1-го и даст второму права на нее.
Вообще имена в базе лучше хранить в виде "ФамилияИО" без пробелов, а в полном наименовании писать что хочется, тогда проблемы с совпадениями будут крайне редко.