Итак, настраивал по инструкции //infostart.ru/1c/articles/313468/, спасибо автору. Но, оказалось что сделал немного лишнего, пришлось всё переделывать с начала, т.к. там была задача создать специальный справочник для отбора контрагентов по нему. У меня же задача немного проще - отбор уже имеющихся объектов по имеющемуся справочнику. Однако эта статья базируется на выше указанной, поэтому я буду копировать кое что из неё.
Результатом будет появление вида отбора "Банковские счета" в штатных механизмах RLS. Поехали:
Откроем доступ на изменение к объектам:
Определяемый тип: ЗначениеДоступаСГруппамиЗначенийДоступаОбъект
- Открываем подписку на событие "ОбновитьГруппыЗначенийДоступа", смотрим на какой определяемый тип она ссылается, у меня это "ЗначениеДоступаСГруппамиЗначенийДоступаОбъект". Добавляем в его тип значений справочник "БанковскиеСчетаКонтрагентов". Это для того чтобы процедура создания штатных групп доступа смогла подхватить наш тип отбора.
- Идём в модуль "УправлениеДоступомПереопределяемый" и добавляем код в процедуры:
Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
//...............//
// +Наша вставка
ВидДоступа = ВидыДоступа.Добавить();
ВидДоступа.Имя = "БанковскиеСчета"; // имя вида доступа (используется в ролях для RLS)
ВидДоступа.Представление = НСтр("ru = 'Банковские счета'");
ВидДоступа.ТипЗначений = Тип("СправочникСсылка.БанковскиеСчетаКонтрагентов"); // критерий ограничения доступа
// -Наша вставка
КонецПроцедуры
Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
//...............//
// +Наша вставка
// указание прав объектов метаданных, на которые распространяется RLS
Описание = Описание + "
|Справочник.БанковскиеСчетаКонтрагентов.Чтение.БанковскиеСчетаКонтрагентов
|Справочник.БанковскиеСчетаОрганизаций.Чтение.БанковскиеСчетаОрганизаций
|";
// -Наша вставка
КонецПроцедуры
- Запускаем 1С:Предприятие (можно сразу с параметром "ЗапуститьОбновлениеИнформационнойБазы", чтобы виды доступа создались), смотрим какие роли дают доступ к справочнику "Банковские счета". Я пользовался обработкой //infostart.ru/public/845764/.
- Идём в каждую роль и редактируем ограничение доступа к данным в ней так, чтобы наш новый отбор работал. Штатные отборы используют штатные шаблоны #ПоЗначениям, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный, #ПоНаборамЗначений. Там всё весьма просто, если разобраться. Разобраться очень помогает статья //infostart.ru/1c/articles/995414/, спасибо Дмитрию. У меня получилось так:
Права "ДобавлениеИзменениеИнформацииПоПартнерам", "ЧтениеИнформацииПоПартнерам":
#ПоЗначениямРасширенный( "Справочник.БанковскиеСчетаКонтрагентов","Чтение","",
"ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК Т2
ПО Т2.Родитель = Т.Владелец.Партнер",
"((",
"","ТипЗначения(Т.Владелец) = Тип(Справочник.Контрагенты)","И",
"ГруппыПартнеров","Т2.Партнер",")ИЛИ(",
"","ТипЗначения(Т.Владелец) = Тип(Справочник.ФизическиеЛица)","И(",
"ГруппыФизическихЛиц","Т.Владелец","",
"","",")))И",
"БанковскиеСчета","Т.Ссылка","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" )
Право "СамообслуживаниеВнешнийПользовательИзменениеБанковскихСчетов":
#ПоЗначениямРасширенный( "Справочник.БанковскиеСчетаКонтрагентов","Чтение","",
"ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК Т1 ПО Т1.Владелец = Т.Владелец.Партнер
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК Т3 ПО Т3.ОбъектАвторизации = Т1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК Т2
ПО Т2.Родитель = Т.Владелец.Партнер",
"(",
"ВнешниеПользователи","Т2.Партнер","ИЛИ",
"ВнешниеПользователи", "Т3.Ссылка",")И",
"БанковскиеСчета","Т.Ссылка","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
Право "УдаленныйДоступСтандартныйИнтерфейсOData":
#ПоЗначениям("Справочник.БанковскиеСчетаКонтрагентов","Чтение","",
"БанковскиеСчета","Ссылка",
"","","","","","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
При этом в роли "УдаленныйДоступСтандартныйИнтерфейсOData" отсутствовали шаблоны, поэтому я скопировал туда шаблон "ПоЗначениям" из роли "ПолныеПрава" и создал новое ограничение доступа к данным для "<прочие поля>"
- Запускаем 1С:Предприятие с параметром "ЗапуститьОбновлениеИнформационнойБазы", если ранее параметр не ставили. Если ставили - убираем. Идем НСИ и администрирование -> Администрирование -> Настройка пользователей и прав, выбираем нужный профиль, идём на вкладку "Ограничение доступа", добавляем ограничение по банковским счетам.
- Создаём группу доступа, указываем наш профиль, добавляем туда пользователей и проверяем что доступ к справочнику "Банковские счета" работает корректно.
- Самое нудное и неприятное. Проделываем пункт 4 для каждого объекта, к которому должна быть возможность ограничивать доступ по банковским счетам.
Для выполнения п. 7 планирую написать обработку, которая поможет автоматизировать эту нужную процедуру. Т.к. править роли программно нельзя, предположительно, обработка будет не на 1С и будет работать с базой данных или конфигурационными файлами. С радостью приму советы по этому поводу, всем спасибо!