Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Группа доступа 1С

Группа доступа 1С
Я
   first_may
 
16.10.18 - 23:48
Добрый вечер.

Конфигурация ЕРП, но это наверное не важно.
Используется ограничение доступа на уровне записей.

При этом есть типовой набор вида доступа, например Организация, Пользователи и тд.

Подскажите пожалуйста, как добавить например справочник статьи движения ДС, что бы можно было ограничивать доступ к записям этого справочника?

В ОпределяемыйТип.ЗначениеДоступа - он составной и в нем я добавил этот справочник. Но когда захожу в предприятие и выбираю в профиле вид доступа, то этого справочника нет.

Где надо прописать, что бы он появился?
 
 
   AlvlSpb
 
1 - 17.10.18 - 00:04
(0) Года два три назад делал похожее в УНФ По ссылке https://my-files.ru/719elr текстовый файл. Писал и сохранил для себя на будущее. Посмотри. В ЕРП конечно модули и процедуры названы по другому, но по аналогии найти и разобраться можно
   rphosts
 
2 - 17.10.18 - 05:06
(0)Покурите тему RLS. Если встроенными возможностями не настраивается в вашем случае курите так-же Расширения.
   Cyberhawk
 
3 - 17.10.18 - 08:35
Документацию по нужной подсистеме БСП на ИТС тебе в помощь
   first_may
 
4 - 17.10.18 - 09:37
(2) да, конечно RLS надо, но что бы до него дойти, необходимо, что бы сам новый справочник появился в виде доступа. А его там нет.
   AlvlSpb
 
5 - 17.10.18 - 10:28
(4) Так в (1) почти инструкция. Пробовал разобраться?
   first_may
 
6 - 21.10.18 - 14:45
(5) Да, большое спасибо. Удалось сделать так, что бы можно было в предприятии настроить ограничение. Теперь дело за тем, что бы прописать где то

//1.В Роли выбрать нужный документ и ставим ограничение на Прочие поля:
#ПоЗначениям("Документ.ЗаданиеНаРаботу", "Чтение" , "", "Сотрудники", "Сотрудник", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   first_may
 
7 - 21.10.18 - 15:18
(5) если надо ограничить например справочник статьи движения ДС, то ограничение надо ставить на справочник?
   AlvlSpb
 
8 - 21.10.18 - 15:32
(7) Да. Естественно
   first_may
 
9 - 21.10.18 - 15:58
(8) то есть
1 делаю роль, например ИспользованиеСтатьиДвиженияДС
2 ее использую в в профиле и назначаю пользователю
3 в самой роли на право чтение и просмотр дожен прописать ограничение

Оно будет такое
#ПоЗначениям("Справочник.СтатьиДвиженияДенежныхСредств", "Чтение" , "", ???", "???", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")



Так?
   AlvlSpb
 
10 - 21.10.18 - 20:19
(9) Не понял. Давай сначала. Что надо ограничить? какой новый вид доступа создал?
 
 Рекламное место пустует
   first_may
 
11 - 23.10.18 - 20:17
(10) справочник статьи движения ДС - его хочу ограничить.

Сделал
1.Определяемый тип "ЗначениеДоступа"
2.Внести изменения в общий модуль "УправлениеДоступомПереопределяемый"
3.Запустить программу с ключом обновления базы 

Все получилось, удалось выбрать в профиле, указать нужные статьи.

Далее понимаю, надо
1 сделать роль
2 написать ограничение

то есть по твоему тексту

//1.В Роли выбрать нужный документ и ставим ограничение на Прочие поля:
#ПоЗначениям("Документ.ЗаданиеНаРаботу", "Чтение" , "", "Сотрудники", "Сотрудник", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   first_may
 
12 - 23.10.18 - 20:29
(10) вот дальше сообразить не могу
   AlvlSpb
 
13 - 23.10.18 - 20:51
(12) Ошибка уже в (11). Не надо создавать новую роль.
Берешь существующие роль/роли который дают допуск к нужному документу или справочнику В ограничение полей пишешь этот шаблон (в твоем примере вместо Сотрудник пишешь имя созданного доступа) Или, если шаблон уже стоит в ограничении, добавляешь свой доступ. Типа
#ПоЗначениям("Документ.ЗаданиеНаРаботу", "Чтение" , "", "Сотрудники", "Сотрудник", "СчетДТ", "СчетДТ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   AlvlSpb
 
14 - 23.10.18 - 20:54
(13) + уточнение
#ПоЗначениям("Документ.ЗаданиеНаРаботу", "Чтение" , "", "Сотрудники", "Сотрудник", "СчетаДт", "СчетДт", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

Где СчетаДт - имя вашего доступа, СчетДт - имя поля на которое накладываем ограничение
   first_may
 
15 - 23.10.18 - 20:55
(13) что бы понять, допустим создаю новую роль, например

ДоступСтатьиДвиженияДС

и тогда
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "?????", "??????", "?????", "?????", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")


вот где ????, что надо?
   AlvlSpb
 
16 - 23.10.18 - 21:06
(15) Почитай расшифровку шаблона (там же в роли) Ну а если конкретика, то
 #ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "ИмяПоляВДоке", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

Если шаблон уже прописан в ограничениях, то просто добавляешь эти же две записи в существующее ограничение
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "Сотрудники", "Сотрудник", "Пользователи", "Пользователь", "ДоступСтатьиДвиженияДС", "ИмяПоляВДоке", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   first_may
 
17 - 23.10.18 - 21:16
(16) спс, завтра попробую..
   first_may
 
18 - 24.10.18 - 20:55
(16) добрый вечер.

не получилось :(, пользователь все равно видит весь справочник.
   first_may
 
19 - 24.10.18 - 21:22
(16) во всех ролях убрал доступ к справочнику, оставил только в своей роли, в которой прописал на чтение
<Прочие поля> 
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   AlvlSpb
 
20 - 24.10.18 - 21:25
(18) В РЛС как, впрочем, вообще в ограничениях, действует правило: Если есть две роли и более разрешающих что-то (например, чтение какого-то справочника), то запрет действует ТОЛЬКО когда запрещено во ВСЕХ ролях. Если хотя бы в одной разрешено - разрешено во всех
   AlvlSpb
 
21 - 24.10.18 - 21:32
(19) <Прочие поля> 
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

НЕТ. ты так и не понял шаблон. Еще раз - читай комментарии к шаблону в конфигурации.
 Перевожу шаблон на обычный язык:
ПоЗначениям - Ограничение на значение поля
Справочник.СтатьиДвиженияДС - ограничение накладывается на справочник СтатьиДвиженияДС
Чтение - ограничиваем право на Чтение
Пустое значение - модификатор - просто пропускаем
ДоступСтатьиДвиженияДС - Название доступа ( то что будем настраивать в группе: Разрешено все кроме или Запрещено все кроме и т.п.)
????? А ГДЕ ПОЛЕ на которое накладываем ограничение?
У формы элемента справочника СтаьиДвиженияДС наверное есть поле что-то типа СтатьяДС (куда собственно подтягивается эта статья и которое мы и хотим ограничить для пользователя)
Т.е. правильный шаблон:
 #ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "СтатьяДС", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   AlvlSpb
 
22 - 24.10.18 - 21:41
Вообще, надо ограничить доступ к определенным статьям самого справочника или все же к каким-то документам куда подтягивается реквизит с типом СправочникСсылка.СтатьиДС?
   first_may
 
23 - 24.10.18 - 21:44
(22) сначало надо, что бы пользователь открыл этот справочник и видел те записи, которые ему можно видеть через настройку групп доступа
   first_may
 
24 - 24.10.18 - 21:46
я вижу, что есть справочник Склады и он используется в ограничении.. вот и пытаюсь скопировать
   first_may
 
25 - 24.10.18 - 21:50
(22) вот что есть сейчас https://yadi.sk/i/TyO_9_S0-ullxQ

то есть пользователь может только читать и просматривать.. но он видит весь справочник.. все элементы..
   first_may
 
26 - 24.10.18 - 21:53
пользователь входит в группу, у которой настроено ограничение
https://yadi.sk/i/MwtfdMXmHsMG7A
   first_may
 
27 - 24.10.18 - 22:07
   first_may
 
28 - 24.10.18 - 22:08
   first_may
 
29 - 24.10.18 - 22:10
(21) Т.е. правильный шаблон:
 #ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "СтатьяДС", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")


а в шаблоне #ПоЗначениям что должно быть?
   AlvlSpb
 
30 - 24.10.18 - 22:13
(29) Что значит "в шаблоне #ПоЗначениям что должно быть?
≡   »" ваш код это же и есть шаблон по значениям.
Только для самого справочника вот так:
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "", "ДоступСтатьиДвиженияДС", "Ссылка", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   AlvlSpb
 
31 - 24.10.18 - 22:16
(30) Если более скрупулезно, то надо еще включить модификатор для групп (а вдруг захотите ограничить целую группу)
#ПоЗначениям("Справочник.СтатьиДвиженияДС", "Чтение" , "НеОграничиватьДоступКГруппам", "ДоступСтатьиДвиженияДС", "Ссылка", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
   first_may
 
32 - 24.10.18 - 22:33
(31) так и сделал https://yadi.sk/i/cA5D92lm0ZULPg

то есть этого достаточно?
   first_may
 
33 - 24.10.18 - 22:45
#ПоЗначениям - вот тут надо что то наверное написать
 
 
   AlvlSpb
 
34 - 24.10.18 - 22:54
(33) Этого достаточно в данной роли. Надо найти ВСЕ роли где указан доступ к этому справочнику и сделать то же самое
   first_may
 
35 - 24.10.18 - 23:04
(34) а у пользователя именно эта роль и все.
   AlvlSpb
 
36 - 24.10.18 - 23:08
(35) Странно что только одна роль, оооочень странно. Ну так делай для этой роли и проверяй работу
   first_may
 
37 - 24.10.18 - 23:36
смотрю справочник Склады, доступ к нему настроено через роль ЧтениеНормативноСправочнойИнформации и в ней написано
#ПоЗначениям( "Справочник.Склады","Чтение","НеОграничиватьДоступКГруппам",

"Склады","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )


а далее смотрю шаблон ограничений ПоЗначениям и тут много чего написано

// ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ...,  В(n), П(n)).

// № параметра:      1, 2,           3,  4, 5,  6, 7, ..., 2+n*2,3+n*2.
// Читается так: "ограничение доступа по значениям".

// Параметры:
//     Таблица   - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг".

//     Модификатор - изменяет шаблон.
//                 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает

//                  безусловно выбирать группы иерархического справочника. 
//                 Других модификаторов в этой версии шаблона не предусмотрено.

//     В(n)      - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения
//                  производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц",

//                  чем использовать несколько блоков параметров, с одним и тем же именем поля.
//                  Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения",

//                  "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно.
//                 Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например

//                  "Т.Автор = &АвторизованныйПользователь",
//                  "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы.

//                 Когда В(n) = "ПравоЧтения" Или "ПравоИзменения",
//                  выполняется проверка наличия права на таблицу значения Т.П(n).

//                 Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору",
//                  выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n).

//     П(n)      - Поле проверяемого значения, кроме случая В(n) = "Условие" (или "").
//  Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но

// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального.
//  Шаблон имеет структуру:

//     <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)>
//  Пример:

//      ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "", "",
//      "Организации","Организация",

//      "Поставщики","Контрагент", "","", ...)

#Если &ОграничениеДоступаНаУровнеЗаписейВключено = "" #Тогда// Информационная база заблокирована для обновления.

    ГДЕ ЛОЖЬ
#Иначе


// Проверка правильности параметра Право.

#Если Не ("#Параметр(2)" = "Чтение"    Или "#Параметр(2)" = "Добавление" Или

          "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление"   Или "#Параметр(2)" = "")

      Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)"  = "Чтение"

      Или #ИмяТекущегоПраваДоступа  = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда

    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.

    НеверноеПраво: #Параметр(2)

#КонецЕсли


// Проверка правильности параметра ИмяТаблицы.

#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда

    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.

    НеверноеИмяТекущейТаблицы: "#Параметр(1)"

#КонецЕсли


// Проверка правильности параметра Модификатор.

#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда

    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.

    НеверныйМодификатор: #Параметр(3)

#КонецЕсли


// Общая проверка использования ограничений доступа на уровне записей и

// проверка использования хотя бы одного ограничения из указанных видов доступа.
#Если Не

     (  Истина
      И ("#Параметр(4)" = "" И "#Параметр(5)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),"))

      И ("#Параметр(6)" = "" И "#Параметр(7)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),"))

      И ("#Параметр(8)" = "" И "#Параметр(9)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),"))

      И ("#Параметр(10)" = "" И "#Параметр(11)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),"))

      И ("#Параметр(12)" = "" И "#Параметр(13)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),"))

      И ("#Параметр(14)" = "" И "#Параметр(15)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),"))

      И ("#Параметр(16)" = "" И "#Параметр(17)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),"))

      И ("#Параметр(18)" = "" И "#Параметр(19)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),"))

      И ("#Параметр(20)" = "" И "#Параметр(21)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),"))

      И ("#Параметр(22)" = "" И "#Параметр(23)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),"))

      И ("#Параметр(24)" = "" И "#Параметр(25)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),"))

      И ("#Параметр(26)" = "" И "#Параметр(27)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),"))

      И ("#Параметр(28)" = "" И "#Параметр(29)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),"))

      И ("#Параметр(30)" = "" И "#Параметр(31)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),"))

      И ("#Параметр(32)" = "" И "#Параметр(33)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),"))

      И ("#Параметр(34)" = "" И "#Параметр(35)" = ""

         Или Не &ОграничениеДоступаНаУровнеЗаписейВключено
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")

         Или &ВидыДоступаСОтключеннымИспользованием = "Все"
           И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),")

         Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),"))

     ) #Тогда


Т ГДЕ// Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов).


ИСТИНА В
(  // Проверка права пользователя на текущую таблицу в целом.

    // Права на таблицы формируются по составу ролей профиля группы доступа.

    ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
    ИЗ
        Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
        ПО
              СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)"

            И ИСТИНА В
              (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ
                    РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа
                    ГДЕ
                          ТаблицыГруппДоступа.Таблица       = СвойстваТекущейТаблицы.Ссылка
                        И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка
                    #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда

                        И ТаблицыГруппДоступа.Изменение
                    #КонецЕсли

              )
            И ГруппыДоступа.Ссылка В
              (
                ВЫБРАТЬ
                    ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
                ИЗ
                    Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                    ПО
                          СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь
                        И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь
              )
    ГДЕ

// Безусловная выборка групп в иерархическом объекте метаданных (если нужно).

#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда

    Т.ЭтоГруппа ИЛИ
#КонецЕсли


  (// Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей).


//// Проверка значения поля группы параметров 1.

#Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(4)" = "Условие" Или "#Параметр(4)" = "") #Тогда

    // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.

    ( #Параметр(5) )

#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда

      Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО

    И ИСТИНА В
     (  // Проверка права пользователя на таблицу Значения, установленного в поле.

        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))

        #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда

            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли

     )
#ИначеЕсли "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(4)" = "ПравоИзмененияПоИдентификатору" #Тогда

      ИСТИНА В
     (  // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.

        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(5)

        #Если Не "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" #Тогда

            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли

     )
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда

    ИСТИНА// Группа параметров отключена.

#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда

    
     (
        ИСТИНА В// Проверка, что пользователю или какой-нибудь группе пользователя право разрешено

            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = Т.#Параметр(5)

                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
                #Иначе

                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда

                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе

                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
                #КонецЕсли

                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
         И НЕ ЛОЖЬ В// Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = Т.#Параметр(5)

                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
                #Иначе

                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
     )
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда

    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.

    #Если СтрСодержит("#Параметр(4)", ",") #Тогда

        НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден"

    #Иначе

        НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено"

    #КонецЕсли

#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"

         И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда

    
     (
            ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО

            И
        #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,")        И СтрСодержит(",#Параметр(4),", ",Пользователи,"))

          Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда

            НЕ
            (
            НЕ ИСТИНА В
                (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
                ГДЕ
                      ГруппыЗначенийДоступа.ЗначениеДоступа       = Т.#Параметр(5)

                    И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
                )
            И НЕ
        #Иначе

            (
        #КонецЕсли

            ВЫБОР
            КОГДА ИСТИНА В
                (
        #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда

                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = Т.#Параметр(5)

        #ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка"

                 И "#Параметр(4)" <> "Пользователи"

                 И "#Параметр(4)" <> "ВнешниеПользователи" #Тогда

            #Если СтрСодержит("#Параметр(4)", ",") #Тогда

                // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.

                НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"

            #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда

                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = Т.ГруппаДоступа
            #Иначе// Значения доступа, для которых можно указать несколько групп значений доступа.

                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений

                ПО
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
                    И ГруппыЗначений.Ссылка    = Т.#Параметр(5)

            #КонецЕсли

        #Иначе

                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
                ПО
                      Значения.ГруппаДоступа         = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа       = ГруппыЗначений.ГруппаЗначенийДоступа
                    И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5)

        #КонецЕсли

                )
            ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
            КОНЕЦ
            =
            ВЫБОР
            КОГДА ИСТИНА В
                (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
                ГДЕ
                      ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
                    И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5))

                    И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
                )
            ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
            КОНЕЦ
            )
     )
#Иначе
    ИСТИНА
#КонецЕсли
//// Проверка значения поля группы параметров 2.

#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда

    // Группа параметров не используется.

#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда

    // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.

    И ( #Параметр(7) )

#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда

    И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО

    И ИСТИНА В
     (  // Проверка права пользователя на таблицу Значения, установленного в поле.

        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7))

        #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда

            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли

     )
#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда

      ИСТИНА В
     (  // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.

        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(7)

        #Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда

            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли

     )
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда

    // Группа параметров отключена.

#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда
    И
     (
        ИСТИНА В// Проверка, что пользователю или какой-нибудь группе пользователя право разрешено

            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = Т.#Параметр(7)

                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
                #Иначе

                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда

                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе

                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
                #КонецЕсли

                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
         И НЕ ЛОЖЬ В// Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = Т.#Параметр(7)

                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда

                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
                #Иначе

                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = Н
   first_may
 
38 - 24.10.18 - 23:36
я про это и говорю, что надо мне такое же писать?
   AlvlSpb
 
39 - 24.10.18 - 23:42
(38) НИЧЕГО не надо писать! Все уже написал! Это и есть шаблон. Если упрощенно: Выполняется текст шаблона (то что ты скопировал и опубликовал), а то что пишешь в ограничениях - это параметры и условия запросов что в шаблоне
   AlvlSpb
 
40 - 24.10.18 - 23:54
(39) + к (38) для понимания
#ПоЗначениям - это и есть Команда на выполнение шаблона. Т.е. вместо #ПоЗначениям подставляется текст шаблона (запросы), а дальше (то что после #ПоЗначениям) идут параметры этих запросов. Например #Параметр(1) в тексте шаблона заменяется на Справочник.СтатьиДвиженияДС а #Параметр(5) - на Ссылка
   AlvlSpb
 
41 - 24.10.18 - 23:59
(38) Тьфу! Кажется понял. В этой роли нет шаблона на закладке Шаблоны?
   first_may
 
42 - 25.10.18 - 07:03
(41) да да :)
   AlvlSpb
 
43 - 25.10.18 - 19:25
(42) да. Тогда скопируй туда шаблон полностью.
   first_may
 
44 - 14.11.18 - 19:47
(43) для справочника получилось ограничить вот так

(43) для справочника получилось ограничить вот так
СтатьиДвиженияДенежныхСредств ГДЕ СтатьиДвиженияДенежныхСредств.Ссылка В
            (ВЫБРАТЬ
                СтатьиДвиженияДенежныхСредств.Ссылка КАК Ссылка
            ИЗ
                Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств
            ГДЕ
                СтатьиДвиженияДенежныхСредств.ЭтоГруппа = ИСТИНА
        
            ОБЪЕДИНИТЬ ВСЕ
        
            ВЫБРАТЬ
                ГруппыДоступаЗначенияДоступа.ЗначениеДоступа
            ИЗ
                Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
            ГДЕ
                ГруппыДоступаЗначенияДоступа.Ссылка В
                    (ВЫБРАТЬ
                        ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
                    ИЗ
                        Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
                    ГДЕ
                        ГруппыДоступаПользователи.Пользователь = &АвторизованныйПользователь
                        И ГруппыДоступаПользователи.Ссылка.Профиль В
                            (ВЫБРАТЬ
                                ПрофилиГруппДоступаРоли.Ссылка КАК Профиль
                            ИЗ
                                Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
                            ГДЕ
                                ПрофилиГруппДоступаРоли.Роль.Имя = "мояРольДоступСтатьиДвиженияДС")))
   first_may
 
45 - 14.11.18 - 19:47
А вот как добавить запрос, что бы пользователь не видел и документы, в которых используется статья, которую он не видит?
   palsergeich
 
46 - 14.11.18 - 21:14
(45) Нужно делать ограничение доступа уже на саму таблицу документов.
Но вот тут уже надо аккуратно.
Если у одного человека будет 2 и более роли с РЛС на одну таблицу - это очень плохо для производительности
   palsergeich
 
47 - 14.11.18 - 21:15
+ глянуть надо в профайлер на план и подумать об индексе, если таблица документов большая - будут проблемы
   first_may
 
48 - 14.11.18 - 21:48
(47) ой, про скорость пока рано :), хотя бы принцип понять.

Например статья движения ДС используется в платежном поручении. Тогда как надо делать?
   palsergeich
 
49 - 14.11.18 - 21:55
(48) Аналогично справочнику
ТаблицаДокумента ГДЕ ТаблицаДокумента.ИмяРеквизита В и тд
 
 Рекламное место пустует
   first_may
 
50 - 15.11.18 - 14:30
(49) то есть, в ту роль, которую я сделал мояРольДоступСтатьиДвиженияДС, добавить доступ документа платежном поручения, а затем в нем для права Чтения сделать похожий запрос, как и для справочника .

Так?
   palsergeich
 
51 - 15.11.18 - 15:00
(50) Да


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует