1. Добавила в конфигурацию справочник ГруппыДоступаБанковскихСчетов и создала там реквизит ГруппаДоступа ссылочного типа на этот же справочник (делала это, т.к. в комментариях к статье было (пробовала и без него - ничего)) (скрин1)
2. В справочнике БанковскиеСчета добавила реквизит ГруппаДоступа с ссылкой на новый справочник (скрин 2)
3. В определяемый тип ЗначенияДоступа и ЗначениеДоступаСГруппамиЗначенийДоступаОбъект (без второго типа обновление ругалось) включил ссылки на БанковскиеСчета и ГруппыДоступаБанковскихСчетов.
4.В подписке на событие "ОбновитьГруппыЗначенийДоступа" поставила галку на БанковскиеСчета.
5. В общем модуле УправлениеДоступомПереопределяемый внесла такой код (выделен множеством +):
Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
ЗарплатаКадры.УправлениеДоступомЗаполнитьСвойстваВидаДоступа(ВидыДоступа);
// ++++++++++++++++++++Наша вставка
ВидДоступа = ВидыДоступа.Добавить();
ВидДоступа.Имя = "ГруппыБанковскихСчетов"; // имя вида доступа (используется в ролях для RLS)
ВидДоступа.Представление = НСтр("ru = 'Группы банковских счетов'");
ВидДоступа.ТипЗначений = Тип("СправочникСсылка.БанковскиеСчета"); // критерий ограничения доступа
ВидДоступа.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыДоступаБанковскихСчетов"); // средство ограничения доступа
// ---------------------------------------Наша вставка
УправлениеДоступомБП.ЗаполнитьВидыДоступа(ВидыДоступа);
// бит_Финанс Изменение кода. Начало. 09.02.2015{{
бит_ПраваДоступаОсновной.ЗаполнитьСвойстваВидовДоступа(ВидыДоступа);
// бит_Финанс Изменение кода. Конец. 09.02.2015}}
РегламентированнаяОтчетность.ПриЗаполненииВидовДоступа(ВидыДоступа);
//bt_04_0971_suyy_191217_N
бит_стр_ОМТС_Сервер.УправлениеДоступомЗаполнитьСвойстваВидаДоступа(ВидыДоступа);
//bt_04_0971_suyy_191217_K
КонецПроцедуры
Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт
ЗарплатаКадры.УправлениеДоступомЗаполнитьИспользованиеВидаДоступа(ВидДоступа, Использование);
// +++++++++++++++++++++++Наша вставка
Если ВидДоступа = "ГруппыБанковскихСчетов" Тогда
Использование = Истина;
КонецЕсли;
// ---------------------------------------------Наша вставка
//bt_04_0971_suyy_191217_N
бит_стр_ОМТС_Сервер.УправлениеДоступомЗаполнитьИспользованиеВидаДоступа(ВидДоступа, Использование);
//bt_04_0971_suyy_191217_K
КонецПроцедуры
Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
Описание = "";
// +++++++++++++++++++++++++++Наша вставка
// указание прав объектов метаданных, на которые распространяется RLS
Описание = Описание + "
|Справочник.БанковскиеСчета.Чтение.ГруппыБанковскихСчетов
|Справочник.БанковскиеСчета.Изменение.ГруппыБанковскихСчетов
|";
// ---------------------------------------------------Наша вставка
УправлениеДоступомБП.ЗаполнитьВидыОграниченийПравОбъектовМетаданных(Описание);
РегламентированнаяОтчетность.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание);
ЭлектронноеВзаимодействие.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание);
//bt_04_0971_suyy_191217_N
бит_стр_ОМТС_Сервер.ЗаполнитьВидыОграниченийПравОбъектовМетаданных(Описание);
//bt_04_0971_suyy_191217_K
КонецПроцедуры
Показать
Дальше в режиме предприятия запускаю внешнюю обработку Обновление вспомогательных данных обновляю (БСП так понимаю?). Появляется новый вид доступа.
6. В новом справочнике создаю объект, называю его Пенза, делаю владельцем наш счет Яковлев. (скрин 3).
7.Настраиваю новый профиль test с ограничением "все РАЗРЕШИТЬ, кроме..." добавляю ограничение Пенза.
8. Создаю нового пользователя (тест4) с минимальным набором ролей. Во всех ролях, кроме одной, выключаю чтение справочника БанковскиеСчета.
В одной роли, которая и осуществляет только доступ к справочнику, пишу такое ограничение:
Не знаю надо ли, но могу кинуть шаблон (ПоЗначениям) который использовался.
Захожу под пользователем, лезу в банковские счета иии... ничего не убралось. БК Яковлев всё так же висит.
Настраиваю профиль "все ЗАПРЕТИТЬ, кроме..." и также свою Пензу оставляю.
Перезахожу под пользователем иии... убирается воообще ВСЁ. Что за хрень такая творится?
Крайне важно: При добавлении новых ролей с установками ограничений по шаблонам обязательно включить эти новые роли в подсистемы, которые будут доступны пользователям. Без включения новых ролей в доступные пользователю подсистемы RLS не будет выдавать ошибок, но списки будут пусты. Если подсистемы на замке, то через настройку поддержки конфигурации их необходимо их открыть.
(20) правой кнопкой щелкаем на роли и там два пути
Опция:
поиск ссылок на объект с флагом
Свойства
остальные флаги сбросить
Опция:
дополнительно
глаза смотрим в какие подсистемы попадает роль.
Если роль не включена в подсистемы и в ней есть ограничения по шаблонам РЛС, то это
косяк. Включайте роль в подсистему.
Причем, забавно. что ограничение на чтение будет работать и без включения в подсистемы,
а вот для "просмотр" не будет работать.
Это сродни тому, как СКД не показывает данные если на добавленной таблице стоит только
галка "чтение" и нет галки "просмотр".
(1) В общем, я попробовал создать ограничение доступа к банковским счетам, аналогичное Вашему, но в демо-базе БСП. Следовал описанию на ИТС для БСП 3.0.2, дорабатывал конфигурацию и параллельно писал инструкцию. Инструкция получилась плохо структурированной и объемной, прошу прощения за это. Некоторые пункты, возможно, избыточны.
Но в итоге результат удовлетворительный. Итак.
1. Добавить новый справочник "ГруппыДоступаБанковскихСчетов". Добавить в справочник реквизит:
- Имя: ГруппаДоступа
- Тип: СправочникСсылка.ГруппыДоступаБанковскихСчетов
2. Добавить в справочник "БанковскиеСчета" новый реквизит:
- Имя: ГруппаДоступа
- Тип: СправочникСсылка.ГруппыДоступаБанковскихСчетов
3. В обработчике "ПриЧтенииНаСервере" формы элемента обоих справочников добавить код:
Аналогично дать права на "Изменение" и "Добавление" с таким же ограничением доступа, заменив "Чтение" на "Изменение" и "Добавление" соответственно.
Дать также права на "Просмотр" и "Ввод по строке" справочника, "Интерактивное добавление", "Редактирование" и пр.
11. Добавить в модуль менеджера обоих справочников код:
12. Включить в состав определяемого типа "ВладелецЗначенийКлючейДоступа":
- СправочникСсылка.БанковскиеСчета
- СправочникСсылка.ГруппыДоступаБанковскихСчетов
13. Включить в состав определяемого типа "ВладелецЗначенийКлючейДоступаОбъект":
- СправочникОбъект.БанковскиеСчета
- СправочникОбъект.ГруппыДоступаБанковскихСчетов
14. В процедуре "ПриЗаполненииВидовОграниченийПравОбъектовМетаданных" общего модуля "УправлениеДоступомПереопределяемый" добавить код:
Описание = Описание + "
|Справочник.БанковскиеСчета.Добавление.ГруппыБанковскихСчетов
|Справочник.БанковскиеСчета.Изменение.ГруппыБанковскихСчетов
|Справочник.БанковскиеСчета.Чтение.ГруппыБанковскихСчетов
|Справочник.ГруппыДоступаБанковскихСчетов.Чтение.ГруппыБанковскихСчетов
|";
15. Обновить конфигурацию информационной базы. Запустить обновление вспомогательных данных информационной базы одним из способов:
- запустить базу с ключом "/CЗапуститьОбновлениеИнформационнойБазы".
- воспользоваться обработкой "ОбновлениеВспомогательныхДанных.epf"
(25) Этот пункт нужен для того, чтобы заблокировать элемент, когда есть права на чтение, но нет прав на изменение. Если не выполните его, ничего страшного не должно случиться. Просто кнопка "Записать", например, будет доступна для нажатия. При этом записать все равное не получится, появится сообщение об ошибке.
Но да, для выполнения пункта форму нужно добавить.
(26) так, я тут с правами накосячила (ещё до Вашей инструкции), разбираться долго, а копию снять новую пока нет возможности. Сегодня вряд ли дам ответ, но как что - сразу отпишусь)
(23) Всё делала по Вашей инструкции (на чистейшей копии), кроме эл-та форм в справочнике ГруппыДоступаБанковскихСчетов и новую роль не создавала.
Использовала уже существующую роль ДобавлениеИзменениеБанковскихСчетов, но естественно подредактировала как написано.
Там были шаблоны "ПоЗначению" и "ДляОбъекта(ПолеОбъекта)" - их я никак не меняла.
Обновила с обработкой, создала пользователя, минимизировала ему права.
В справочник Банковские счета не входит, такая ошибка:
В справочник Группы доступа банковских счетов входит нормально, без ошибок.
От чего могла возникнуть данная ошибка? Где недоработала?
Upd. ошибка возникает при "все разрешены кроме", щас попробую на "все запрещены"
Upd2. ошибка не ушла. Возможно дала слишком мало прав. Ибо у меня даже при входе в систему ругается, что "недостаточно прав для работы с таблицей Организации." Вот и тут посомтрю в общем. Из дома уже.
// ДляОбъекта(ПолеОбъекта = "")
// Шаблон используется для ограничения элементов справочников, документов и
// других списков объектов по полю Ссылка, а также элементов зависимых списков
// объектов и записей регистров через поле объекта-владельца.
//
// Параметры:
// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка.
// Значение "" (по умолчанию) то же, что имя поля "Ссылка".
//
#Если &СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда
// Информационная база заблокирована для обновления.
ГДЕ ЛОЖЬ
#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта3,")
И Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта3ТребуетсяПерезапуститьСеанс,") #Тогда
Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 1 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли &СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда
// У пользователя отключены все виды доступа или
// ограничение на уровне записей не используется.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы) #Тогда
// У пользователя отключено ограничение для текущей таблицы.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта3ТребуетсяПерезапуститьСеанс,") #Тогда
Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли #ИмяТекущегоПраваДоступа <> "Чтение" #Тогда
// Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
ТекущаяТаблица ГДЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа
#Иначе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа
#КонецЕсли
ПО
#Если "#ПолеОбъекта" = "" #Тогда
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка
#Иначе
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта
#КонецЕсли
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппДоступа
#Иначе
И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
И РазрешенныеКлючиДоступа.ВнешнийПользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;+") #Тогда
, &РазрешенныйНаборГруппПользователей
#КонецЕсли
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
, &РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
)
)
#ИначеЕсли СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
ТекущаяТаблица ГДЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа
ПО
#Если "#ПолеОбъекта" = "" #Тогда
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка
#Иначе
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта
#КонецЕсли
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
#Иначе
И РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
#КонецЕсли
И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
, &РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
)
)
#ИначеЕсли СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
ТекущаяТаблица ГДЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
ГДЕ
#Если "#ПолеОбъекта" = "" #Тогда
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка
#Иначе
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта
#КонецЕсли
И (
ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ИЗ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа
#Иначе
ИЗ РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа
#КонецЕсли
ГДЕ
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппДоступа
#Иначе
РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
И РазрешенныеКлючиДоступа.ВнешнийПользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;+") #Тогда
, &РазрешенныйНаборГруппПользователей
#КонецЕсли
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
, &РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
)
)
ИЛИ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа
ГДЕ
#Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
#Иначе
РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
#КонецЕсли
И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа
#Если СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*+")
Или СтрСодержит(&СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
, &РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
)
)
)
)
#Иначе
Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#КонецЕсли
(34)дала все права на 2 справочника:
организации и контрагенты (всё в той же роли) - все разрешить Кроме - показывает все, все запрещены Кроме - не показывает ничего.
(23) в общем намучалась я с этим, но в целом всё получилось. Спасибо Вам огромное. Что помогло мне, чего не было в Вашей инструкции: на форму элемента справочника Банковские счета добавил реквизит ГруппаДоступа с видом Объект-ГруппаДоступа. В самой программе указал группу доступа на нужном мне счете (и естественно в спр. ГруппыДоступаБанковскихСчетов) И всё сработало. Остальное всё как у Вас.
// ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)).
// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2.
// Читается так: "ограничение доступа по значениям".
// Параметры:
// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг".
// Модификатор - изменяет шаблон.
// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает
// безусловно выбирать группы иерархического справочника.
// Других модификаторов в этой версии шаблона не предусмотрено.
// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения
// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц",
// чем использовать несколько блоков параметров, с одним и тем же именем поля.
// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения",
// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно.
// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например
// "Т.Автор = &АвторизованныйПользователь",
// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы.
// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения",
// выполняется проверка наличия права на таблицу значения Т.П(n).
// Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору",
// выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n).
// П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или "").
// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но
// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального.
// Шаблон имеет структуру:
// <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)>
// Пример:
// ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "", "",
// "Организации","Организация",
// "Поставщики","Контрагент", "","", ...)
#Если &ОграничениеДоступаНаУровнеЗаписейВключено = "" #Тогда // Информационная база заблокирована для обновления.
ГДЕ ЛОЖЬ
#Иначе
// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или
"#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "")
Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение"
Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверноеПраво: #Параметр(2)
#КонецЕсли
// Проверка правильности параметра ИмяТаблицы.
#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверноеИмяТекущейТаблицы: "#Параметр(1)"
#КонецЕсли
// Проверка правильности параметра Модификатор.
#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйМодификатор: #Параметр(3)
#КонецЕсли
// Общая проверка использования ограничений доступа на уровне записей и
// проверка использования хотя бы одного ограничения из указанных видов доступа.
#Если Не
( Истина
И ("#Параметр(4)" = "" И "#Параметр(5)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),"))
И ("#Параметр(6)" = "" И "#Параметр(7)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),"))
И ("#Параметр(8)" = "" И "#Параметр(9)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),"))
И ("#Параметр(10)" = "" И "#Параметр(11)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),"))
И ("#Параметр(12)" = "" И "#Параметр(13)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),"))
И ("#Параметр(14)" = "" И "#Параметр(15)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),"))
И ("#Параметр(16)" = "" И "#Параметр(17)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),"))
И ("#Параметр(18)" = "" И "#Параметр(19)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),"))
И ("#Параметр(20)" = "" И "#Параметр(21)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),"))
И ("#Параметр(22)" = "" И "#Параметр(23)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),"))
И ("#Параметр(24)" = "" И "#Параметр(25)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),"))
И ("#Параметр(26)" = "" И "#Параметр(27)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),"))
И ("#Параметр(28)" = "" И "#Параметр(29)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),"))
И ("#Параметр(30)" = "" И "#Параметр(31)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),"))
И ("#Параметр(32)" = "" И "#Параметр(33)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),"))
И ("#Параметр(34)" = "" И "#Параметр(35)" = ""
Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),"))
) #Тогда
Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов).
ИСТИНА В
( // Проверка права пользователя на текущую таблицу в целом.
// Права на таблицы формируются по составу ролей профиля группы доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
ПО
СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)"
И ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа
ГДЕ
ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка
И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка
#Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда
И ТаблицыГруппДоступа.Изменение
#ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда
И ТаблицыГруппДоступа.Добавление
#КонецЕсли
)
И ГруппыДоступа.Ссылка В
(
ВЫБРАТЬ
ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
ИЗ
Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь
)
ГДЕ
// Безусловная выборка групп в иерархическом объекте метаданных (если нужно).
#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда
Т.ЭтоГруппа ИЛИ
#КонецЕсли
( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей).
//// Проверка значения поля группы параметров 1.
#Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(4)" = "Условие" Или "#Параметр(4)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(5) )
#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда
Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))
#Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(4)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(5)
#Если Не "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(5)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(5)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(4)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда
(
ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(5)
#ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка"
И "#Параметр(4)" <> "Пользователи"
И "#Параметр(4)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(4)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(5)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 2.
#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(7) )
#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда
И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7))
#Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(7)
#Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(7)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(7)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(6)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(7)
#ИначеЕсли "Т.#Параметр(7)" = "Т.Ссылка"
И "#Параметр(6)" <> "Пользователи"
И "#Параметр(6)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(6)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(7)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 3.
#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(8)" = "Условие" Или "#Параметр(8)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(9) )
#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда
И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9))
#Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(8)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(9)
#Если Не "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(9)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(9)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(8)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(9)
#ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка"
И "#Параметр(8)" <> "Пользователи"
И "#Параметр(8)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(8)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(9)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 4.
#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(10)" = "Условие" Или "#Параметр(10)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(11) )
#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда
И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11))
#Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(10)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(11)
#Если Не "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(11)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(11)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(10)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(11)
#ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка"
И "#Параметр(10)" <> "Пользователи"
И "#Параметр(10)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(10)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(11)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 5.
#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(12)" = "Условие" Или "#Параметр(12)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(13) )
#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда
И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13))
#Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(12)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(13)
#Если Не "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(13)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(13)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(12)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(13)
#ИначеЕсли "Т.#Параметр(13)" = "Т.Ссылка"
И "#Параметр(12)" <> "Пользователи"
И "#Параметр(12)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(12)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(13)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 6.
#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(14)" = "Условие" Или "#Параметр(14)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(15) )
#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда
И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15))
#Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(14)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(15)
#Если Не "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.Изменение
#КонецЕсли
)
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(15)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(15)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(14)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,"))
Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(15)
#ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка"
И "#Параметр(14)" <> "Пользователи"
И "#Параметр(14)" <> "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(14)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(14)"
Добрый день. Подскажите пожалуйста, а пробовали ли добавить РЛС на объекты, которые добавлены в расширение? Сделал, Сабж (РЛС) в котором описываю свои муки и пути решения, может чем-то сможете помочь?