Имя: Пароль:
1C
1С v8
Группа доступа 1С
0 first_may
 
16.10.18
23:48
Добрый вечер.

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

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

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

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

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

//1.В Роли выбрать нужный документ и ставим ограничение на Прочие поля:

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

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


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

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

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

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

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

//1.В Роли выбрать нужный документ и ставим ограничение на Прочие поля:

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

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

и тогда

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

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

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

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

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

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

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

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

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