// ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). // № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. // Читается так: "ограничение доступа по значениям расширенный". // Параметры: // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Модификатор - изменяет шаблон. // 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 // ПО Т.Ссылка = Т1.Ссылка". // Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы // для проверки их значений, как значений основной таблицы. // Следует помнить, что при размножении строк в результате соединения, достаточно чтобы // всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". // О - Начальные скобки "(". // В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения // производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", // "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно. // Когда В(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) #КонецЕсли // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если Не ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейВключено И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") Или &ВидыДоступаСОтключеннымИспользованием = "Все" И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". #Параметр(4) ГДЕ ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" И ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). #Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. #Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(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)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) #ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда #Параметр(10) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10) #Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(10) #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" И "#Параметр(9)" <> "Пользователи" И "#Параметр(9)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(9)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 3. #Если "#Параметр(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)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(15)" = "Условие" Или "#Параметр(15)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) #ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда #Параметр(16) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(15)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(16) #Если Не "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(16) #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" И "#Параметр(15)" <> "Пользователи" И "#Параметр(15)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(15)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(18)" = "Условие" Или "#Параметр(18)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) #ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда #Параметр(19) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(18)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(19) #Если Не "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(19) #ИначеЕсли "#Параметр(19)" = "Т.Ссылка" И "#Параметр(18)" <> "Пользователи" И "#Параметр(18)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(18)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(21)" = "Условие" Или "#Параметр(21)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) #ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда #Параметр(22) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(21)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(22) #Если Не "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(22) #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" И "#Параметр(21)" <> "Пользователи" И "#Параметр(21)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(21)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(24)" = "Условие" Или "#Параметр(24)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) #ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда #Параметр(25) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(24)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(25) #Если Не "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(25) #ИначеЕсли "#Параметр(25)" = "Т.Ссылка" И "#Параметр(24)" <> "Пользователи" И "#Параметр(24)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(24)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(27)" = "Условие" Или "#Параметр(27)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) #ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда #Параметр(28) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(27)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(28) #Если Не "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(28) #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" И "#Параметр(27)" <> "Пользователи" И "#Параметр(27)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(27)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(30)" = "Условие" Или "#Параметр(30)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) #ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда #Параметр(31) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(30)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(31) #Если Не "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(31) #ИначеЕсли "#Параметр(31)" = "Т.Ссылка" И "#Параметр(30)" <> "Пользователи" И "#Параметр(30)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(30)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(33)" = "Условие" Или "#Параметр(33)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) #ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда #Параметр(34) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(33)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(34) #Если Не "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(34) #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" И "#Параметр(33)" <> "Пользователи" И "#Параметр(33)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(33)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(36)" = "Условие" Или "#Параметр(36)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) #ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда #Параметр(37) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(36)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(37) #Если Не "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(37) #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" И "#Параметр(36)" <> "Пользователи" И "#Параметр(36)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(36)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(39)" = "Условие" Или "#Параметр(39)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) #ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда #Параметр(40) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(39)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(40) #Если Не "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(40) #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" И "#Параметр(39)" <> "Пользователи" И "#Параметр(39)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(39)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(42)" = "Условие" Или "#Параметр(42)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) #ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда #Параметр(43) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(42)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(43) #Если Не "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(43) #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" И "#Параметр(42)" <> "Пользователи" И "#Параметр(42)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(42)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(45)" = "Условие" Или "#Параметр(45)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) #ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда #Параметр(46) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(45)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(46) #Если Не "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(46) #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" И "#Параметр(45)" <> "Пользователи" И "#Параметр(45)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(45)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(48)" = "Условие" Или "#Параметр(48)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) #ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда #Параметр(49) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(48)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(49) #Если Не "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(49) #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" И "#Параметр(48)" <> "Пользователи" И "#Параметр(48)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(48)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(51)" = "Условие" Или "#Параметр(51)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) #ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда #Параметр(52) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(51)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(52) #Если Не "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(52) #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" И "#Параметр(51)" <> "Пользователи" И "#Параметр(51)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(51)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. ) ) #КонецЕсли #КонецЕсли // Информационная база заблокирована для обновления.