Files
2022-10-05 23:05:00 +03:00

3453 lines
271 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8"?>
<Rights xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://v8.1c.ru/8.2/roles" xsi:type="Rights">
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Constant.ИспользоватьШаблоныСообщений</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ШаблоныСообщенийПрисоединенныеФайлы</name>
<right>
<name>Read</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("ВладелецФайла")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","",
"",
"",
"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ",
"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>Insert</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("ВладелецФайла")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","",
"",
"",
"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ",
"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>Update</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("ВладелецФайла")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщенийПрисоединенныеФайлы", "","",
"",
"",
"Пользователи", "Т.ВладелецФайла.Автор", "ИЛИ",
"Условие","НЕ ЕСТЬNULL(Т.ВладелецФайла.ТолькоДляАвтора, Истина)", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>InteractiveInsert</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>InteractiveSetDeletionMark</name>
<value>true</value>
</right>
<right>
<name>InteractiveClearDeletionMark</name>
<value>true</value>
</right>
<right>
<name>InputByString</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ШаблоныСообщений</name>
<right>
<name>Read</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","",
"",
"",
"Пользователи", "Т.Автор", "ИЛИ",
"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>Insert</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","",
"",
"",
"Пользователи", "Т.Автор", "ИЛИ",
"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>Update</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный( "Справочник.ШаблоныСообщений", "","",
"",
"",
"Пользователи", "Т.Автор", "ИЛИ",
"Условие","НЕ Т.ТолькоДляАвтора", "", "", "", "", "","", "", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","")
#КонецЕсли</condition>
</restrictionByCondition>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>InteractiveInsert</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>InteractiveSetDeletionMark</name>
<value>true</value>
</right>
<right>
<name>InteractiveClearDeletionMark</name>
<value>true</value>
</right>
<right>
<name>InputByString</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ОтправитьПисьмо</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ОтправитьSMS</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИспользоватьОтправкуSMSВШаблонахСообщений</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляОбъекта(ПолеОбъекта)</name>
<condition>// ДляОбъекта(ПолеОбъекта = "")
// Шаблон используется для ограничения элементов справочников, документов и
// других списков объектов по полю Ссылка, а также элементов зависимых списков
// объектов и записей регистров через поле объекта-владельца.
//
// Параметры:
// ПолеОбъекта - имя поля, содержащего ссылку на объект, от которого зависит элемент списка.
// Значение "" (по умолчанию) то же, что имя поля "Ссылка".
//
#Если &amp;СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда
// Информационная база заблокирована для обновления.
ГДЕ ЛОЖЬ
#ИначеЕсли Не СтрСодержит(&amp;ВерсииШаблоновОграниченияДоступа, ",ДляОбъекта9,") #Тогда
Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 9 шаблона ограничения доступа ДляОбъекта. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли &amp;СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда
// У пользователя отключены все виды доступа или
// ограничение на уровне записей не используется.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы + ";") #Тогда
// У пользователя отключено ограничение для текущей таблицы.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;ВерсииШаблоновОграниченияДоступа, ",ТребуетсяПерезапуститьСеанс,") #Тогда
Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли #ИмяТекущегоПраваДоступа &lt;&gt; "Чтение" #Тогда
// Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ";0") #Тогда
ГДЕ ЛОЖЬ
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ";1") #Тогда
Ошибка: Внешние пользователи отключены.
#ИначеЕсли Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;")
И Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта со значением параметра "#ПолеОбъекта". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#Иначе
ТекущаяТаблица ГДЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК КлючиДоступаНаборовГруппДоступа
ПО
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
КлючиДоступаНаборовГруппДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
#Иначе
КлючиДоступаНаборовГруппДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
#КонецЕсли
И КлючиДоступаНаборовГруппДоступа.НаборГруппДоступа = &amp;РазрешенныйНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК КлючиДоступаРазрешенногоНабораГруппДоступа
ПО
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
КлючиДоступаРазрешенногоНабораГруппДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
#Иначе
КлючиДоступаРазрешенногоНабораГруппДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
#КонецЕсли
И КлючиДоступаРазрешенногоНабораГруппДоступа.НаборГруппДоступа = &amp;РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаПользователей
ПО
КлючиДоступаПользователей.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
И КлючиДоступаПользователей.Пользователь = &amp;РазрешенныйПользователь
#Иначе
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаПользователей
ПО
КлючиДоступаПользователей.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
И КлючиДоступаПользователей.ВнешнийПользователь = &amp;РазрешенныйПользователь
#КонецЕсли
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;+") #Тогда
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаНаборовГруппПользователей
ПО
КлючиДоступаНаборовГруппПользователей.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей
И КлючиДоступаНаборовГруппПользователей.Пользователь = &amp;РазрешенныйНаборГруппПользователей
#Иначе
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаНаборовГруппПользователей
ПО
КлючиДоступаНаборовГруппПользователей.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей
И КлючиДоступаНаборовГруппПользователей.ВнешнийПользователь = &amp;РазрешенныйНаборГруппПользователей
#КонецЕсли
#КонецЕсли
ГДЕ
#Если "#ПолеОбъекта" = ""
Или СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;;-")
Или СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*;-")
Или СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;;-")
Или СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;+;-") #Тогда
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка
#Иначе
КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта
#КонецЕсли
И (
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
НЕ КлючиДоступаНаборовГруппДоступа.КлючДоступа ЕСТЬ NULL
#Иначе
ЛОЖЬ
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":#ПолеОбъекта;*") #Тогда
ИЛИ НЕ КлючиДоступаРазрешенногоНабораГруппДоступа.КлючДоступа ЕСТЬ NULL
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
ИЛИ НЕ КлючиДоступаПользователей.КлючДоступа ЕСТЬ NULL
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;+") #Тогда
ИЛИ НЕ КлючиДоступаНаборовГруппПользователей.КлючДоступа ЕСТЬ NULL
#КонецЕсли
)
)
#Если Не СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, #ИмяТекущейТаблицы + ":Пропустить;")
И ( СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";УточнитьДляВсех;")
Или СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, #ИмяТекущейТаблицы + ":Уточнить;") ) #Тогда
#Если Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":#ПолеОбъекта;") #Тогда
И ИСТИНА В (ИСТИНА
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";31;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";30;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";29;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";28;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";27;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";26;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";25;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";24;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";23;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";22;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";21;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";20;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";19;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";18;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";17;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";16;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";15;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";14;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";13;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";12;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";11;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";10;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";09;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";08;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";07;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";06;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";05;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";04;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";03;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";02;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";01;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";00;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
)
#Иначе
И ИСТИНА В (ИСТИНА
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";31^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";30^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";29^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";28^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";27^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";26^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";25^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";24^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";23^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";22^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";21^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";20^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";19^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";18^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";17^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";16^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";15^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";14^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";13^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";12^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";11^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";10^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";09^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";08^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";07^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";06^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";05^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";04^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";03^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";02^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";01^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
#Если СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";00^;") #Тогда ,ИСТИНА #Иначе ,ЛОЖЬ #КонецЕсли
)
#КонецЕсли
#КонецЕсли
#КонецЕсли</condition>
</restrictionTemplate>
<restrictionTemplate>
<name>ПоЗначениямРасширенный</name>
<condition>// ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В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) содержит строку условия на языке запросов, например
// "Т.Автор = &amp;АвторизованныйПользователь",
// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы.
// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения",
// выполняется проверка наличия права на таблицу значения Т.П(n).
// Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору",
// выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n).
// П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация",
// кроме случая В(n) = "Условие" (или "").
// О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")".
// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но
// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального.
// Шаблон имеет структуру:
// &lt;Общая часть условий&gt; &lt;Условие по группе параметров 1&gt; И/ИЛИ &lt;Условие по группе параметров 2&gt; И/ИЛИ ... &lt;Условие по группе параметров(n)&gt;
// Пример:
// ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "",
// "",
// "",
// "Организации","Т.Организация","И(",
// "Склады","Т.СкладОтправитель","ИЛИ",
// "Склады","Т.СкладПолучатель",")", "","","", ...)
#Если &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется = "" #Тогда // Информационная база заблокирована для обновления.
ГДЕ ЛОЖЬ
#ИначеЕсли Не СтрСодержит(&amp;ВерсииШаблоновОграниченияДоступа, ",ПоЗначениямРасширенный18,") #Тогда
Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 18 шаблона ограничения доступа ПоЗначениямРасширенный. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#Иначе
// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или
"#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "")
Или #ИмяТекущегоПраваДоступа &lt;&gt; "Чтение" И "#Параметр(2)" = "Чтение"
Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" &lt;&gt; "Чтение" И "#Параметр(2)" &lt;&gt; "" #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверноеПраво: #Параметр(2)
#КонецЕсли
// Проверка правильности параметра ИмяТаблицы.
#Если "#Параметр(1)" &lt;&gt; #ИмяТекущейТаблицы #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверноеИмяТекущейТаблицы: "#Параметр(1)"
#КонецЕсли
// Проверка правильности параметра Модификатор.
#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйМодификатор: #Параметр(3)
#КонецЕсли
// Общая проверка использования ограничений доступа на уровне записей и
// проверка использования хотя бы одного ограничения из указанных видов доступа.
#Если Не
( Истина
И ("#Параметр(6)" = "" И "#Параметр(7)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),"))
И ("#Параметр(9)" = "" И "#Параметр(10)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),"))
И ("#Параметр(12)" = "" И "#Параметр(13)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),"))
И ("#Параметр(15)" = "" И "#Параметр(16)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),"))
И ("#Параметр(18)" = "" И "#Параметр(19)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),"))
И ("#Параметр(21)" = "" И "#Параметр(22)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),"))
И ("#Параметр(24)" = "" И "#Параметр(25)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),"))
И ("#Параметр(27)" = "" И "#Параметр(28)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),"))
И ("#Параметр(30)" = "" И "#Параметр(31)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),"))
И ("#Параметр(33)" = "" И "#Параметр(34)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),"))
И ("#Параметр(36)" = "" И "#Параметр(37)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),"))
И ("#Параметр(39)" = "" И "#Параметр(40)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),"))
И ("#Параметр(42)" = "" И "#Параметр(43)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),"))
И ("#Параметр(45)" = "" И "#Параметр(46)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),"))
И ("#Параметр(48)" = "" И "#Параметр(49)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),"))
И ("#Параметр(51)" = "" И "#Параметр(52)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),"))
) #Тогда
Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов).
// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т".
#Параметр(4)
ГДЕ
ИСТИНА В
( // Проверка права пользователя на текущую таблицу в целом.
// Права на таблицы формируются по составу ролей профиля группы доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
#Если СтрСодержит(&amp;ТаблицыРасширенийСОграничениемДоступа, "|#Параметр(1);") #Тогда
Справочник.ИдентификаторыОбъектовРасширений КАК СвойстваТекущейТаблицы
#Иначе
Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
ПО
СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)"
И ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа
ГДЕ
ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка
И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка
#Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда
И ТаблицыГруппДоступа.ПравоИзменение
#ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда
И ТаблицыГруппДоступа.ПравоДобавление
#КонецЕсли
)
И ГруппыДоступа.Ссылка В
(
ВЫБРАТЬ
ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
ИЗ
Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь
)
ГДЕ
// Безусловная выборка групп в иерархическом объекте метаданных (если нужно).
#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда
Т.ЭтоГруппа ИЛИ
#КонецЕсли
( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей).
#Параметр(5) // [([(][(]...] 0-n открывающихся скобок.
//// Проверка значения поля группы параметров 1.
#Если &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(7) )
#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда
#Параметр(7) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7))
#Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(7)
#Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(7)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(7)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(6)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда
(
ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(7)
#ИначеЕсли "#Параметр(7)" = "Т.Ссылка"
И "#Параметр(6)" &lt;&gt; "Пользователи"
И "#Параметр(6)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(6)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(7)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(7)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 2.
#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(10) )
#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда
#Параметр(10) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10))
#Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10)
#Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(10)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(10)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(9)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда
(
ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(10)
#ИначеЕсли "#Параметр(10)" = "Т.Ссылка"
И "#Параметр(9)" &lt;&gt; "Пользователи"
И "#Параметр(9)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(9)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(10)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(10)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 3.
#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(12)" = "Условие" Или "#Параметр(12)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(13) )
#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда
#Параметр(13) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13))
#Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(12)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(13)
#Если Не "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(13)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(13)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(12)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда
(
ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(13)
#ИначеЕсли "#Параметр(13)" = "Т.Ссылка"
И "#Параметр(12)" &lt;&gt; "Пользователи"
И "#Параметр(12)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(12)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(13)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(13)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 4.
#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(15)" = "Условие" Или "#Параметр(15)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(16) )
#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда
#Параметр(16) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16))
#Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(15)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(16)
#Если Не "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(16)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(16)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(15)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда
(
ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(16)
#ИначеЕсли "#Параметр(16)" = "Т.Ссылка"
И "#Параметр(15)" &lt;&gt; "Пользователи"
И "#Параметр(15)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(15)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(16)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(16)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 5.
#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(18)" = "Условие" Или "#Параметр(18)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(19) )
#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда
#Параметр(19) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19))
#Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(18)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(19)
#Если Не "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(19)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(19)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(18)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда
(
ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(19)
#ИначеЕсли "#Параметр(19)" = "Т.Ссылка"
И "#Параметр(18)" &lt;&gt; "Пользователи"
И "#Параметр(18)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(18)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(19)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(19)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 6.
#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(21)" = "Условие" Или "#Параметр(21)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(22) )
#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда
#Параметр(22) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22))
#Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(21)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(22)
#Если Не "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(22)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(22)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(21)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда
(
ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(22)
#ИначеЕсли "#Параметр(22)" = "Т.Ссылка"
И "#Параметр(21)" &lt;&gt; "Пользователи"
И "#Параметр(21)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(21)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(22)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(22)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 7.
#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(24)" = "Условие" Или "#Параметр(24)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(25) )
#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда
#Параметр(25) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25))
#Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(24)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(25)
#Если Не "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(25)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(25)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(24)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда
(
ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(25)
#ИначеЕсли "#Параметр(25)" = "Т.Ссылка"
И "#Параметр(24)" &lt;&gt; "Пользователи"
И "#Параметр(24)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(24)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(25)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(25)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 8.
#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(27)" = "Условие" Или "#Параметр(27)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(28) )
#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда
#Параметр(28) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28))
#Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(27)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(28)
#Если Не "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(28)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(28)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(27)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда
(
ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(28)
#ИначеЕсли "#Параметр(28)" = "Т.Ссылка"
И "#Параметр(27)" &lt;&gt; "Пользователи"
И "#Параметр(27)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(27)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(28)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(28)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 9.
#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(30)" = "Условие" Или "#Параметр(30)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(31) )
#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда
#Параметр(31) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31))
#Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(30)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(31)
#Если Не "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(31)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(31)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(30)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда
(
ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(31)
#ИначеЕсли "#Параметр(31)" = "Т.Ссылка"
И "#Параметр(30)" &lt;&gt; "Пользователи"
И "#Параметр(30)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(30)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(31)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(31)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 10.
#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(33)" = "Условие" Или "#Параметр(33)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(34) )
#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда
#Параметр(34) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34))
#Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(33)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(34)
#Если Не "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(34)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(34)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(33)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда
(
ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(34)
#ИначеЕсли "#Параметр(34)" = "Т.Ссылка"
И "#Параметр(33)" &lt;&gt; "Пользователи"
И "#Параметр(33)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(33)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(34)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(34)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 11.
#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(36)" = "Условие" Или "#Параметр(36)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(37) )
#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда
#Параметр(37) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37))
#Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(36)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(37)
#Если Не "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(37)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(37)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(36)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда
(
ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(37)
#ИначеЕсли "#Параметр(37)" = "Т.Ссылка"
И "#Параметр(36)" &lt;&gt; "Пользователи"
И "#Параметр(36)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(36)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(37)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(37)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 12.
#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(39)" = "Условие" Или "#Параметр(39)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(40) )
#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда
#Параметр(40) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40))
#Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(39)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(40)
#Если Не "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(40)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(40)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(39)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда
(
ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(40)
#ИначеЕсли "#Параметр(40)" = "Т.Ссылка"
И "#Параметр(39)" &lt;&gt; "Пользователи"
И "#Параметр(39)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(39)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(40)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(40)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 13.
#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(42)" = "Условие" Или "#Параметр(42)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(43) )
#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда
#Параметр(43) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43))
#Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(42)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(43)
#Если Не "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(43)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(43)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(42)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда
(
ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(43)
#ИначеЕсли "#Параметр(43)" = "Т.Ссылка"
И "#Параметр(42)" &lt;&gt; "Пользователи"
И "#Параметр(42)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(42)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(43)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(43)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 14.
#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(45)" = "Условие" Или "#Параметр(45)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(46) )
#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда
#Параметр(46) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46))
#Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(45)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(46)
#Если Не "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(46)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(46)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(45)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда
(
ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(46)
#ИначеЕсли "#Параметр(46)" = "Т.Ссылка"
И "#Параметр(45)" &lt;&gt; "Пользователи"
И "#Параметр(45)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(45)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(46)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(46)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 15.
#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(48)" = "Условие" Или "#Параметр(48)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(49) )
#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда
#Параметр(49) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49))
#Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(48)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(49)
#Если Не "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(49)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(49)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(48)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда
(
ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(49)
#ИначеЕсли "#Параметр(49)" = "Т.Ссылка"
И "#Параметр(48)" &lt;&gt; "Пользователи"
И "#Параметр(48)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(48)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(49)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(49)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
//// Проверка значения поля группы параметров 16.
#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(51)" = "Условие" Или "#Параметр(51)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(52) )
#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда
#Параметр(52) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52))
#Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(51)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(52)
#Если Не "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(52)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = #Параметр(52)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(51)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда
(
ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = #Параметр(52)
#ИначеЕсли "#Параметр(52)" = "Т.Ссылка"
И "#Параметр(51)" &lt;&gt; "Пользователи"
И "#Параметр(51)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(51)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = #Параметр(52)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = #Параметр(52)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
#Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.
)
)
#КонецЕсли
#КонецЕсли // Информационная база заблокирована для обновления.</condition>
</restrictionTemplate>
</Rights>