Files
SSL/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights
T
2022-08-25 16:05:00 +03:00

3417 lines
283 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>InformationRegister.ДополнительныеСведения</name>
<right>
<name>Read</name>
<value>true</value>
<restrictionByCondition>
<condition>#Если &amp;ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийДополнительныеСведения", "Свойство", "", "", "", "")
#Иначе
#ПоЗначениям( "РегистрСведений.ДополнительныеСведения", "","",
"ДополнительныеСведения", "Свойство",
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","")
#КонецЕсли</condition>
</restrictionByCondition>
</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>CommonCommand.ДополнительныеСведенияКоманднаяПанель</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.РедактированиеДополнительныхСведений</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5)</name>
<condition>// ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "")
// Шаблон используется для ограничения групп записей регистров.
//
// Параметры:
// Регистр - имя предопределенного элемента справочника Идентификаторы объектов метаданных или справочника
// Идентификаторы объектов расширений в формате: имя справочника с точкой и полное имя таблицы
// без точки, например, ИдентификаторыОбъектовМетаданных.РегистрНакопленияОстаткиНаСкладах;
// - имя отдельного регистра ключей в формате КлючиДоступаКРегистру&lt;ОстатокИмени&gt;,
// например, КлючиДоступаКРегиструОстаткиНаСкладах.
// Поле1 - имя первого поля (измерения, ресурса, реквизита), которое будет соединяться с полем Поле1
// регистра сведений КлючиДоступаКРегистр*
// Поле2 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру.
// ...
// Поле5 - аналогично предыдущему параметру, если используется в ограничении доступа к регистру.
#Если &amp;СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда
// Информационная база заблокирована для обновления.
ГДЕ ЛОЖЬ
#ИначеЕсли Не СтрСодержит(&amp;ВерсииШаблоновОграниченияДоступа, ",ДляРегистра9,") #Тогда
Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 9 шаблона ограничения доступа ДляРегистра. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли &amp;СпискиСОтключеннымОграничениемЧтения = "Все" #Тогда
// У пользователя отключены все виды доступа или
// ограничение на уровне записей не используется.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;СпискиСОтключеннымОграничениемЧтения, #ИмяТекущейТаблицы + ";") #Тогда
// У пользователя отключено ограничение для текущей таблицы.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;ВерсииШаблоновОграниченияДоступа, ",ТребуетсяПерезапуститьСеанс,") #Тогда
Ошибка: Версия программы обновлена, требуется перезапустить сеанс. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#ИначеЕсли #ИмяТекущегоПраваДоступа &lt;&gt; "Чтение" #Тогда
// Проверка прав Добавление, Изменение, Удаление выполняется ПередЗаписью / ПриЗаписи.
ГДЕ ИСТИНА
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ";0") #Тогда
ГДЕ ЛОЖЬ
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ";1") #Тогда
Ошибка: Внешние пользователи отключены.
#ИначеЕсли Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;")
И Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
Ошибка: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляРегистра со значениями параметров "#Регистр", "#Поле1", "#Поле2", "#Поле3", "#Поле4", "#Поле5". Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.
#Иначе
ТекущаяТаблица ГДЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда
ИЗ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам
#Иначе
ИЗ РегистрСведений.#Регистр КАК КлючиДоступаКРегистрам
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК КлючиДоступаНаборовГруппДоступа
ПО
КлючиДоступаНаборовГруппДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаНаборовГруппДоступа.НаборГруппДоступа = &amp;РазрешенныйНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;*") #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК КлючиДоступаРазрешенногоНабораГруппДоступа
ПО
КлючиДоступаРазрешенногоНабораГруппДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаРазрешенногоНабораГруппДоступа.НаборГруппДоступа = &amp;РазрешенныйПустойНаборГруппДоступа
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаПользователей
ПО
КлючиДоступаПользователей.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаПользователей.Пользователь = &amp;РазрешенныйПользователь
#Иначе
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаПользователей
ПО
КлючиДоступаПользователей.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаПользователей.ВнешнийПользователь = &amp;РазрешенныйПользователь
#КонецЕсли
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;+") #Тогда
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаНаборовГруппПользователей
ПО
КлючиДоступаНаборовГруппПользователей.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаНаборовГруппПользователей.Пользователь = &amp;РазрешенныйНаборГруппПользователей
#Иначе
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаВнешнихПользователей КАК КлючиДоступаНаборовГруппПользователей
ПО
КлючиДоступаНаборовГруппПользователей.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа
И КлючиДоступаНаборовГруппПользователей.ВнешнийПользователь = &amp;РазрешенныйНаборГруппПользователей
#КонецЕсли
#КонецЕсли
ГДЕ
#Если Не СтрСодержит("#Регистр", "КлючиДоступаКРегистру") #Тогда
КлючиДоступаКРегистрам.Регистр = Значение(Справочник.#Регистр)
#Иначе
ИСТИНА
#КонецЕсли
И
(
КлючиДоступаКРегистрам.ВариантДоступа =
(
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда 0 #Иначе 1 #КонецЕсли
#Если Не СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Версия1=0") #Тогда
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле2=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле3=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле4=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле5=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия1Бит0=1") #Тогда + 64 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия1Бит1=1") #Тогда + 128 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия1Бит2=1") #Тогда + 256 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия1Бит3=1") #Тогда + 512 #КонецЕсли
#КонецЕсли
)
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле1;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле1=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле2=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле2=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле2=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле2=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле3=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле3=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле3=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле4=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле4=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант1Поле5=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2") #Тогда
ИЛИ
КлючиДоступаКРегистрам.ВариантДоступа =
(
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда 0 #Иначе 1 #КонецЕсли
#Если Не СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Версия2=0") #Тогда
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле2=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле3=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле4=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле5=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия2Бит0=1") #Тогда + 64 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия2Бит1=1") #Тогда + 128 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия2Бит2=1") #Тогда + 256 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия2Бит3=1") #Тогда + 512 #КонецЕсли
#КонецЕсли
)
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле1;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле1=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле2=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле2=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле2=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле2=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле3=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле3=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле3=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле4=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле4=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант2Поле5=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5
#КонецЕсли
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3") #Тогда
ИЛИ
КлючиДоступаКРегистрам.ВариантДоступа =
(
#Если &amp;ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда 0 #Иначе 1 #КонецЕсли
#Если Не СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Версия3=0") #Тогда
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле2=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле3=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле4=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле5=Поле") #Тогда + 2 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия3Бит0=1") #Тогда + 64 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия3Бит1=1") #Тогда + 128 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия3Бит2=1") #Тогда + 256 #КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Версия3Бит3=1") #Тогда + 512 #КонецЕсли
#КонецЕсли
)
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле1;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле1
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле1=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле1 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле2=Поле2;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле2
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле2=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле2=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле2=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле2 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле3=Поле3;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле3
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле3=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле3=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле3 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле4=Поле4;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле4
#ИначеЕсли СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле4=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле4 = ТекущаяТаблица.#Поле5
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемПоПолям, #ИмяТекущейТаблицы + ":Вариант3Поле5=Поле5;") #Тогда
И КлючиДоступаКРегистрам.Поле5 = ТекущаяТаблица.#Поле5
#КонецЕсли
#КонецЕсли
)
И (
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
НЕ КлючиДоступаНаборовГруппДоступа.КлючДоступа ЕСТЬ NULL
#Иначе
ЛОЖЬ
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаГруппДоступа, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;*") #Тогда
ИЛИ НЕ КлючиДоступаРазрешенногоНабораГруппДоступа.КлючДоступа ЕСТЬ NULL
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
ИЛИ НЕ КлючиДоступаПользователей.КлючДоступа ЕСТЬ NULL
#КонецЕсли
#Если СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;+") #Тогда
ИЛИ НЕ КлючиДоступаНаборовГруппПользователей.КлючДоступа ЕСТЬ NULL
#КонецЕсли
)
)
#Если Не СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, #ИмяТекущейТаблицы + ":Пропустить;")
И ( СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, ";УточнитьДляВсех;")
Или СтрСодержит(&amp;ОбщиеПараметрыШаблоновОграниченияДоступа, #ИмяТекущейТаблицы + ":Уточнить;") ) #Тогда
#Если Не СтрСодержит(&amp;СпискиСОграничениемЧерезКлючиДоступаПользователей, #ИмяТекущейТаблицы + ":[#Регистр]:#Поле1:#Поле2:#Поле3:#Поле4:#Поле5;") #Тогда
И ИСТИНА В (ИСТИНА
#Если СтрСодержит(&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, В2,П2, ..., В(n), П(n)).
// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2.
// Читается так: "ограничение доступа по значениям".
// Параметры:
// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг".
// Модификатор - изменяет шаблон.
// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает
// безусловно выбирать группы иерархического справочника.
// Других модификаторов в этой версии шаблона не предусмотрено.
// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения
// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц",
// чем использовать несколько блоков параметров, с одним и тем же именем поля.
// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения",
// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно.
// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например
// "Т.Автор = &amp;АвторизованныйПользователь",
// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы.
// Когда В(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)
#КонецЕсли
// Общая проверка использования ограничений доступа на уровне записей и
// проверка использования хотя бы одного ограничения из указанных видов доступа.
#Если Не
( Истина
И ("#Параметр(4)" = "" И "#Параметр(5)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),"))
И ("#Параметр(6)" = "" И "#Параметр(7)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),"))
И ("#Параметр(8)" = "" И "#Параметр(9)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),"))
И ("#Параметр(10)" = "" И "#Параметр(11)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),"))
И ("#Параметр(12)" = "" И "#Параметр(13)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),"))
И ("#Параметр(14)" = "" И "#Параметр(15)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),"))
И ("#Параметр(16)" = "" И "#Параметр(17)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),"))
И ("#Параметр(18)" = "" И "#Параметр(19)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),"))
И ("#Параметр(20)" = "" И "#Параметр(21)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),"))
И ("#Параметр(22)" = "" И "#Параметр(23)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),"))
И ("#Параметр(24)" = "" И "#Параметр(25)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),"))
И ("#Параметр(26)" = "" И "#Параметр(27)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),"))
И ("#Параметр(28)" = "" И "#Параметр(29)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),"))
И ("#Параметр(30)" = "" И "#Параметр(31)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),"))
И ("#Параметр(32)" = "" И "#Параметр(33)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),"))
И ("#Параметр(34)" = "" И "#Параметр(35)" = ""
Или Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется
И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),"))
) #Тогда
Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов).
ИСТИНА В
( // Проверка права пользователя на текущую таблицу в целом.
// Права на таблицы формируются по составу ролей профиля группы доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
#Если СтрСодержит(&amp;ТаблицыРасширенийСОграничениемДоступа, "|#Параметр(1);") #Тогда
Справочник.ИдентификаторыОбъектовРасширений КАК СвойстваТекущейТаблицы
#Иначе
Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
ПО
СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)"
И ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ
РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа
ГДЕ
ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка
И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка
#Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда
И ТаблицыГруппДоступа.ПравоИзменение
#ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда
И ТаблицыГруппДоступа.ПравоДобавление
#КонецЕсли
)
И ГруппыДоступа.Ссылка В
(
ВЫБРАТЬ
ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
ИЗ
Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь
)
ГДЕ
// Безусловная выборка групп в иерархическом объекте метаданных (если нужно).
#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда
Т.ЭтоГруппа ИЛИ
#КонецЕсли
( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей).
//// Проверка значения поля группы параметров 1.
#Если &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(4)" = "Условие" Или "#Параметр(4)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
( #Параметр(5) )
#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда
Т.#Параметр(5) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))
#Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(4)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(5)
#Если Не "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(5)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(5)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(4)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда
(
ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(5)
#ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка"
И "#Параметр(4)" &lt;&gt; "Пользователи"
И "#Параметр(4)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(4)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(5)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 2.
#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &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; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 3.
#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(8)" = "Условие" Или "#Параметр(8)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(9) )
#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда
И Т.#Параметр(9) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9))
#Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(8)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(9)
#Если Не "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(9)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(9)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(8)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(9)
#ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка"
И "#Параметр(8)" &lt;&gt; "Пользователи"
И "#Параметр(8)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(8)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(9)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 4.
#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(10)" = "Условие" Или "#Параметр(10)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(11) )
#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда
И Т.#Параметр(11) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11))
#Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(10)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(11)
#Если Не "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(11)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(11)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(10)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(11)
#ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка"
И "#Параметр(10)" &lt;&gt; "Пользователи"
И "#Параметр(10)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(10)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(11)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 5.
#Если "#Параметр(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; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 6.
#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(14)" = "Условие" Или "#Параметр(14)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(15) )
#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда
И Т.#Параметр(15) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15))
#Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(14)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(15)
#Если Не "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(15)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(15)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(14)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(15)
#ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка"
И "#Параметр(14)" &lt;&gt; "Пользователи"
И "#Параметр(14)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(14)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(15)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 7.
#Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(16)" = "Условие" Или "#Параметр(16)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(17) )
#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда
И Т.#Параметр(17) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17))
#Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(16)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(16)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(17)
#Если Не "#Параметр(16)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(17)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(17)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(16)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(17)
#ИначеЕсли "Т.#Параметр(17)" = "Т.Ссылка"
И "#Параметр(16)" &lt;&gt; "Пользователи"
И "#Параметр(16)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(16)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(17)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 8.
#Если "#Параметр(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; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 9.
#Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(20)" = "Условие" Или "#Параметр(20)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(21) )
#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда
И Т.#Параметр(21) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21))
#Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(20)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(20)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(21)
#Если Не "#Параметр(20)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(21)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(21)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(20)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(21)
#ИначеЕсли "Т.#Параметр(21)" = "Т.Ссылка"
И "#Параметр(20)" &lt;&gt; "Пользователи"
И "#Параметр(20)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(20)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(21)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 10.
#Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(22)" = "Условие" Или "#Параметр(22)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(23) )
#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда
И Т.#Параметр(23) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23))
#Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(22)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(22)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(23)
#Если Не "#Параметр(22)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(23)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(23)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(22)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(23)
#ИначеЕсли "Т.#Параметр(23)" = "Т.Ссылка"
И "#Параметр(22)" &lt;&gt; "Пользователи"
И "#Параметр(22)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(22)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(23)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 11.
#Если "#Параметр(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; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 12.
#Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(26)" = "Условие" Или "#Параметр(26)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(27) )
#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда
И Т.#Параметр(27) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27))
#Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(26)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(26)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(27)
#Если Не "#Параметр(26)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(27)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(27)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(26)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(27)
#ИначеЕсли "Т.#Параметр(27)" = "Т.Ссылка"
И "#Параметр(26)" &lt;&gt; "Пользователи"
И "#Параметр(26)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(26)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(27)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 13.
#Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(28)" = "Условие" Или "#Параметр(28)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(29) )
#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда
И Т.#Параметр(29) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29))
#Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(28)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(28)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(29)
#Если Не "#Параметр(28)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(29)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(29)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(28)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(29)
#ИначеЕсли "Т.#Параметр(29)" = "Т.Ссылка"
И "#Параметр(28)" &lt;&gt; "Пользователи"
И "#Параметр(28)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(28)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(29)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 14.
#Если "#Параметр(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; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 15.
#Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(32)" = "Условие" Или "#Параметр(32)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(33) )
#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда
И Т.#Параметр(33) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33))
#Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(32)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(32)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(33)
#Если Не "#Параметр(32)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(33)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(33)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(32)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(33)
#ИначеЕсли "Т.#Параметр(33)" = "Т.Ссылка"
И "#Параметр(32)" &lt;&gt; "Пользователи"
И "#Параметр(32)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(32)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(33)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
//// Проверка значения поля группы параметров 16.
#Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда
// Группа параметров не используется.
#ИначеЕсли &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(34)" = "Условие" Или "#Параметр(34)" = "") #Тогда
// Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
И ( #Параметр(35) )
#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда
И Т.#Параметр(35) &lt;&gt; НЕОПРЕДЕЛЕНО
И ИСТИНА В
( // Проверка права пользователя на таблицу Значения, установленного в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35))
#Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли "#Параметр(34)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(34)" = "ПравоИзмененияПоИдентификатору" #Тогда
ИСТИНА В
( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
ГДЕ
ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(35)
#Если Не "#Параметр(34)" = "ПравоЧтенияПоИдентификатору" #Тогда
И ТаблицыГруппДоступаПроверкаПрава.ПравоИзменение
#КонецЕсли
)
#ИначеЕсли Не &amp;ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
// Группа параметров отключена.
#ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда
И
(
ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(35)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньРазрешенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
(
ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
ПО
НаследованиеНастроек.Объект = Т.#Параметр(35)
И НастройкиПрав.Объект = НаследованиеНастроек.Родитель
#Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияЧтения
#Иначе
#Если СтрСодержит(&amp;ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
#Иначе
И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
#КонецЕсли
И НаследованиеНастроек.УровеньИспользования &lt; НастройкиПрав.УровеньЗапрещенияИзменения
#КонецЕсли
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
ПО
СоставыГруппПользователей.Пользователь = &amp;АвторизованныйПользователь
И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
)
)
#ИначеЕсли Не СтрСодержит(&amp;ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
#Если СтрСодержит("#Параметр(34)", ",") #Тогда
НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден"
#Иначе
НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено"
#КонецЕсли
#ИначеЕсли &amp;ВидыДоступаСОтключеннымИспользованием &lt;&gt; "Все"
И Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда
И
(
ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
И
#Если (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,"))
Или (Не СтрСодержит(&amp;ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда
НЕ
(
НЕ ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
ГДЕ
ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35)
И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &amp;АвторизованныйПользователь
)
И НЕ
#Иначе
(
#КонецЕсли
ВЫБОР
КОГДА ИСТИНА В
(
#Если СтрСодержит(&amp;ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.#Параметр(35)
#ИначеЕсли "Т.#Параметр(35)" = "Т.Ссылка"
И "#Параметр(34)" &lt;&gt; "Пользователи"
И "#Параметр(34)" &lt;&gt; "ВнешниеПользователи" #Тогда
#Если СтрСодержит("#Параметр(34)", ",") #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
#ИначеЕсли СтрСодержит(&amp;ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ГДЕ
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = Т.ГруппаДоступа
#Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
И ГруппыЗначений.Ссылка = Т.#Параметр(35)
#КонецЕсли
#Иначе
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
ПО
Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа
И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35)
#КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
=
ВЫБОР
КОГДА ИСТИНА В
(
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
ГДЕ
ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35))
И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
)
)
#Иначе
И ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) &lt;&gt; НЕОПРЕДЕЛЕНО
#КонецЕсли
)
)
#КонецЕсли
#КонецЕсли // Информационная база заблокирована для обновления.</condition>
</restrictionTemplate>
</Rights>