Имя: Пароль:
 
1C
1С v8
Вопрос к гуру ЗУП 3. Как скрыть от табельщика документ "Данные для расчета зарплаты"?
0 ptiz
 
23.12.21
16:10
Если юзеру назначить профиль "Табельщик", то он видит документ "Данные для расчета зарплаты". А там - суммы премий и т.п.
Как скрыть от табельщика эти данные?
1 Фрэнки
 
23.12.21
16:12
(0) дикие :-)

Зачем в документах для расчета показывать готовые уже рассчитанные суммы...

Ну если очень нужно скрыть, то я бы расширением закрыл и не особо заморачивался со всякими правами и разным подробностями.
2 SleepyHead
 
23.12.21
16:17
(0) Выключить роли ДобавлениеИзменениеДанныхДляРасчетаЗарплаты и ДобавлениеИзменениеДанныхДляРасчетаЗарплатыРасширенная?
3 ptiz
 
23.12.21
16:18
Дополнение: эти документы видны с профилем Кадровик + Табельщик. Отдельно Табельщик - не видны.
(2) Пробую
4 SleepyHead
 
23.12.21
16:19
(3) Возможно, потребуется создать свой профиль, в котором разрешены только нужные права. Но это чревато тем, что придется каждый вид метаданных проверять самостоятельно.
5 ptiz
 
23.12.21
16:20
(1) Расчет "от обратного". Если только шифровать эти данные (загружаются из Екселя) и расшифровывать в формуле вида расчета :)
6 ptiz
 
23.12.21
16:20
(4) Да хоть тушкой, хоть чучелом.
7 SleepyHead
 
23.12.21
16:20
А если назначить профиль "Кадровик без доступа к зарплате" + "Табельщик" ?
8 SleepyHead
 
23.12.21
16:22
Посмотрел стандартное наполнение профилей кадровика, везде добавление и изменение данных для расчета зарплаты выключено. Похоже, у вас профили уже правленные.
9 ptiz
 
23.12.21
16:25
(8) Только типовые смотрю. Взял "Кадровик" + "Табельщик" - есть раздел Зарплата и пункт Данные для расчета. Добавил документ в Избранное.
Оставил только "Кадровик". Через "Избранное" доступ остался. Т.е. на чтение дает всё-таки "Кадровик".
"Кадровик без доступа к зарплате" - нельзя, надо печатать Т-1 и пр. (нужен доступ к окладу).
10 Гений 1С
 
23.12.21
16:36
(0) не забудь еще и отчеты вырубить, а то ушлые через отчеты посмотрят
11 ptiz
 
23.12.21
16:43
(8) В общем, доступ к "Данным для расчета" пропадает, когда выключаю "Добавление и изменение данных для начисления зарплаты расширенная". Но тогда невозможно открыть и кадровый перевод.
Пока всё плохо :(
12 ptiz
 
23.12.21
17:16
Как только добавляю "Просмотр плановых начислений в документах" или "Редактирование плановых начислений в документах" (а им нужно вводит оклады) , то при выключенном "Добавление и изменение данных для начисления зарплаты расширенная" лезет ошибка при открытии формы приема или перемещения:
Не удалось перейти по ссылке "e1cib/data/Документ.ПриемНаРаботу?ref=84cdb42e99d0762f11ec5e6d1a1414e4" по причине: {ОбщийМодуль.ЗарплатаКадрыРасширенный.Модуль(15623)}: Ошибка при установке значения атрибута контекста (Вид).
по причине:
Недопустимое значение
{ОбщийМодуль.ЗарплатаКадрыРасширенный.Модуль(15623)}:            ГруппаПоказатели.Вид = ВидГруппыФормы.ГруппаКолонок;
{ОбщийМодуль.ЗарплатаКадрыРасширенный.Модуль(6559)}:    ВводНачисленийДобавитьЭлементыФормы(Форма, КоличествоПоказателейРасчета, КоличествоОтображаемыхПоказателей, ОписаниеТаблицыВидовРасчета, РежимРаботы, ИмяПВР, Ложь, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
{ОбщийМодуль.ЗарплатаКадрыРасширенный.Модуль(4756)}:    ВводНачисленийДополнитьФорму(Форма, ОписаниеТаблицыВидовРасчета, РежимРаботы, ИмяПВР, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
{Документ.ПриемНаРаботу.Форма.ФормаДокумента.Форма(1898)}:            ЭтотОбъект, ОписаниеТаблицыНачислений(), "Начисления", 3, РегистрацияНачисленийДоступна И ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
{Документ.ПриемНаРаботу.Форма.ФормаДокумента.Форма(1780)}:    ДополнитьФорму(Ложь);
{Документ.ПриемНаРаботу.Форма.ФормаДокумента.Форма(1747)}:    ЗавершитьИнициализациюФормы(ТекущийОбъект);
{Документ.ПриемНаРаботу.Форма.ФормаДокумента.Форма(417)}:    ПриПолученииДанныхНаСервере(ТекущийОбъект);

по причине:
Недопустимое значение

Т.е. он не может форму отрисовать - не хватает прав на какой-то объект. Не могу понять на какой.
13 ptiz
 
23.12.21
17:24
Неужели придется форму прятать?
Кто так ЗУП 3 проектировал, что "Данные для расчета" видны кадровикам? :(
14 Гений 1С
 
23.12.21
18:18
(11) добавь роль для кадрового перевода, гггг.
15 Фрэнки
 
23.12.21
18:47
(13) см (1)

Это самый безболезненный и вполне работоспособный подход. С минимальными трудозатратами саппорта
16 ptiz
 
23.12.21
21:57
(15) Закрыть форму в расширении? Так и придется (как минимум). Но некрасиво.
17 Гений 1С
 
24.12.21
08:28
(16) зато просто
18 Bigbro
 
24.12.21
08:47
(0) в каждой конторе, где более-менее серьезно начинают относиться к вопросам доступа к данным приходится править роли и перенастраивать. иногда это процесс вообще не быстрый учитывая странность пожеланий и объемы метаданных.
у нас на внедрении ЗУП больше 4 месяцев процесс занял, пока ОТИЗ согласовал доступ о ВСЕМ объектам метаданных для каждой роли, которую создали.
да, они сидели и буквально вычитывали эти простыни со справочниками документами и отчетами, и звонили каждые 15 минут а это что а это зачем и это где используется.
но там они были сильно не согласны с типовыми, корпоративные требования к функционалу существенно отличались от подхода 1с.
19 ptiz
 
24.12.21
09:02
(18) И как справляетесь с обновлениями?
20 Фрэнки
 
24.12.21
09:02
(18) угу. Легких путей не ищем : сразу придумываем трудности, а после - пути по их преодолению
21 Фрэнки
 
24.12.21
09:03
(19) известно как : каком к верху
22 Фрэнки
 
24.12.21
09:04
(16) кстати, там в конфе уже прикручены глобальные модули, через которые можно модифицировать минимум процедур в расширении для установки контроля над открываемыми формами
23 El_Duke
 
24.12.21
09:08
(11) "невозможно открыть и кадровый перевод. "

А нафуя но табельщику нужен ?
24 Фрэнки
 
24.12.21
09:12
(23) скорей всего, что он табельщику не нужен, но где-то в потрохах кода права на него отваливаются
25 El_Duke
 
24.12.21
09:15
(24) Ну и чем это мешает табельщику ?
26 SleepyHead
 
24.12.21
09:25
А в итоге табельщики все равно ставят работу тем, кого не было на работе и кто заболел, но пока еще не принес больничный. Может я не прав, конечно, но больший вред наносят только юные эйчарки 90/60/90.
27 ptiz
 
24.12.21
09:27
(25) У нас есть два вида юзеров:
1) кадры (они же вводят табели) - нужны  кадровые документы (в т.ч. видимость оклада), и табели.
2) бухгалтера
Профиль Табельщик открывает подсистему "Зарплата". С какого-то бодуна фирма 1С расположила именно в блоке "Зарплата" документы "Индивидуальный график" и "Табель" - и там же в блоке "Зарплата" они видят документ "Данные для расчета зарплаты". Хотя именно на чтение и изменение права доются ролью "Добавление и изменение данных для начисления зарплаты расширенная", которая относится к профилю "Кадровик".
28 Фрэнки
 
24.12.21
09:28
(25) табельщику это мешает только тем, что без назначенных ему избыточных типовых профилей просто не открываются формы из-за ошибок прав доступа. Он не лезет никуда, кроме того. что ему нужно. Но там где-то внутрях кода есть чтение данных, а прав для чтения нет.
29 ptiz
 
24.12.21
09:28
Логика в открытии этого документа кадровикам есть, т.к. через него можно вводить данные и об учете времени. Но очень плохо, что доступ к нему не регулируется отдельной ролью, которую можно было бы убрать.
30 Мимохожий Однако
 
24.12.21
09:29
ОФФ: За шоколадку или штофик водки информацию получит любой желающий.
31 Мимохожий Однако
 
24.12.21
09:29
(29) Добавь отдельную роль. Что мешает?
32 Фрэнки
 
24.12.21
09:30
(31) Добавить можно. А работать как нужно не будет.
33 ptiz
 
24.12.21
09:31
(31) Гемор с будущими обновлениями. 1С любит добавлять 100500 новых объектов каждый релиз. Проще поправить типовую роль - вырубить там чтение этого документа и сделать отдельную роль, которую дать бухгалтерам раз и навсегда. Но каждый раз при обновлении надо будет не забывать про снятие галочки в типовой роли.
34 Мимохожий Однако
 
24.12.21
09:31
(32) Расшифруй
35 ptiz
 
24.12.21
09:32
А у кадров есть отчет по показателям данных для расчета? Я не нашел. В таком случае проще будет ограничиться расширением.
36 pavlika
 
24.12.21
09:32
(33) Угу, а потом этой типовой роли расширят права.
37 Мимохожий Однако
 
24.12.21
09:33
(33) Если используешь типовые роли не типично, то будь готов к нетипичным обновлениям. Гемора бояться-в лес ходить.
38 Dmitrii
 
24.12.21
09:33
ИМХО, в ЗУП достаточно адекватны подход к вопросу ограничения доступа к з/п.
В 90% случаев проблемы в головах заказчиков, которые почему-то считают, что кадровик доступа к зарплате иметь не должен, но данные об окладе должен вносить именно он.
Надо либо крестик снять, либо трусы придется натянуть.
В конторах, где данные о з/п доступны строго ограниченному количеству людей, кадровые функции в части назначения окладов, формирования некоторых печатных форм, отчётов, данных статистики, которые касаются чисто кадровой службы, придётся передать расчётчикам. Да, это неудобно. Но зато гарантирует реальное ограничение доступа. И, ИМХО, это правильнее, чем городить какой-нибудь отдельный регистр с параметрами плановых и начислений, который был бы доступен и кадровикам и расчетчикам.
39 Мимохожий Однако
 
24.12.21
09:34
(35) Теперь ты вернулся к (1), в котором сразу предложил расширение. Сказка про бычка.
40 pavlika
 
24.12.21
09:35
Я за (1) или пилить свой профиль на основе типовых и своих ролей.
41 Мимохожий Однако
 
24.12.21
09:35
(38) +100500
42 Мимохожий Однако
 
24.12.21
09:35
Нужна голосовалка. Время пришло )
43 2S
 
24.12.21
09:36
(0) присозданиинасервере
Если рольдоступна(сам извращайся) тогда
Болт
Конецесли

В расширение
44 2S
 
24.12.21
09:37
(43) кстати можно создать роли от обратного - по ограничениям.
45 ptiz
 
24.12.21
09:39
Копаю еще один вариант:
- смотрю параметры, которые используются в RLS

Может быть удастся изменить какой-нибудь параметр сеанса, с помощью которого документ этого вида будет исключаться с помощью RLS ?

// ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)).
// № параметра:                 1, 2,           3,                     4, 5,  6, 7, 8,  9,10,11,...,3+n*3,4+n*3,5+n*3.
// Читается так: "ограничение доступа по значениям расширенный".
// Параметры:
//     Таблица   - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг".
//     Модификатор - изменяет шаблон.
//                 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает
//                  безусловно выбирать группы иерархического справочника.
//                 Других модификаторов в этой версии шаблона не предусмотрено.
//     ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например,
//                 "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1
//                  ПО Т.Ссылка = Т1.Ссылка".
//                 Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы
//                  для проверки их значений, как значений основной таблицы.
//                 Следует помнить, что при размножении строк в результате соединения, достаточно чтобы
//                  всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ".
//     О         - Начальные скобки "(".
//     В(n)      - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения
//                  производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц",
//                  чем использовать несколько блоков параметров, с одним и тем же именем поля.
//                  Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения",
//                  "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно.
//                 Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например
//                  "Т.Автор = &АвторизованныйПользователь",
//                  "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы.
//                 Когда В(n) = "ПравоЧтения" Или "ПравоИзменения",
//                  выполняется проверка наличия права на таблицу значения Т.П(n).
//                 Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору",
//                  выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n).
//     П(n)      - Поле проверяемого значения с псевдонимом, например "Т.Организация",
//                 кроме случая В(n) = "Условие" (или "").
//     О(n)      - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")".
//  Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но
// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального.
//  Шаблон имеет структуру:
//     <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 2> И/ИЛИ ... <Условие по группе параметров(n)>
//  Пример:
//      ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "",
//      "",
//      "",
//      "Организации","Т.Организация","И(",
//      "Склады","Т.СкладОтправитель","ИЛИ",
//      "Склады","Т.СкладПолучатель",")", "","","", ...)

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

#ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ПоЗначениямРасширенный17,") #Тогда
    Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 17 шаблона ограничения доступа ПоЗначениямРасширенный. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа.

#Иначе

// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение"    Или "#Параметр(2)" = "Добавление" Или
          "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление"   Или "#Параметр(2)" = "")
      Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)"  = "Чтение"
      Или #ИмяТекущегоПраваДоступа  = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда
    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
    НеверноеПраво: #Параметр(2)
#КонецЕсли

// Проверка правильности параметра ИмяТаблицы.
#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда
    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
    НеверноеИмяТекущейТаблицы: "#Параметр(1)"
#КонецЕсли

// Проверка правильности параметра Модификатор.
#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда
    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
    НеверныйМодификатор: #Параметр(3)
#КонецЕсли

// Общая проверка использования ограничений доступа на уровне записей и
// проверка использования хотя бы одного ограничения из указанных видов доступа.
#Если Не
     (  Истина
      И ("#Параметр(6)" = "" И "#Параметр(7)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),"))
      И ("#Параметр(9)" = "" И "#Параметр(10)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),"))
      И ("#Параметр(12)" = "" И "#Параметр(13)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),"))
      И ("#Параметр(15)" = "" И "#Параметр(16)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),"))
      И ("#Параметр(18)" = "" И "#Параметр(19)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),"))
      И ("#Параметр(21)" = "" И "#Параметр(22)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),"))
      И ("#Параметр(24)" = "" И "#Параметр(25)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),"))
      И ("#Параметр(27)" = "" И "#Параметр(28)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),"))
      И ("#Параметр(30)" = "" И "#Параметр(31)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),"))
      И ("#Параметр(33)" = "" И "#Параметр(34)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),"))
      И ("#Параметр(36)" = "" И "#Параметр(37)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),"))
      И ("#Параметр(39)" = "" И "#Параметр(40)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),"))
      И ("#Параметр(42)" = "" И "#Параметр(43)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),"))
      И ("#Параметр(45)" = "" И "#Параметр(46)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),"))
      И ("#Параметр(48)" = "" И "#Параметр(49)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),"))
      И ("#Параметр(51)" = "" И "#Параметр(52)" = ""
         Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется
           И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),"))
     ) #Тогда

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

// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т".
#Параметр(4)

ГДЕ

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

// Безусловная выборка групп в иерархическом объекте метаданных (если нужно).
#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда
    Т.ЭтоГруппа ИЛИ
#КонецЕсли

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

    #Параметр(5)  // [([(][(]...] 0-n открывающихся скобок.

//// Проверка значения поля группы параметров 1.
#Если &ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда
    // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
    ( #Параметр(7) )
#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда
      #Параметр(7) <> НЕОПРЕДЕЛЕНО
    И ИСТИНА В
     (  // Проверка права пользователя на таблицу Значения, установленного в поле.
        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7))
        #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда
            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли
     )
#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда
      ИСТИНА В
     (  // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(7)
        #Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда
            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли
     )
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
    ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда
    
     (
        ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = #Параметр(7)
                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
                #Иначе
                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
         И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = #Параметр(7)
                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
                #Иначе
                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
     )
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда
    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
    #Если СтрСодержит("#Параметр(6)", ",") #Тогда
        НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден"
    #Иначе
        НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено"
    #КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
         И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда
    
     (
            ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
            И
        #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,")        И СтрСодержит(",#Параметр(6),", ",Пользователи,"))
          Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда
            НЕ
            (
            НЕ ИСТИНА В
                (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
                ГДЕ
                      ГруппыЗначенийДоступа.ЗначениеДоступа       = #Параметр(7)
                    И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
                )
            И НЕ
        #Иначе
            (
        #КонецЕсли
            ВЫБОР
            КОГДА ИСТИНА В
                (
        #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = #Параметр(7)
        #ИначеЕсли "#Параметр(7)" = "Т.Ссылка"
                 И "#Параметр(6)" <> "Пользователи"
                 И "#Параметр(6)" <> "ВнешниеПользователи" #Тогда
            #Если СтрСодержит("#Параметр(6)", ",") #Тогда
                // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
                НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
            #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = Т.ГруппаДоступа
            #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
                ПО
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа
                    И ГруппыЗначений.Ссылка    = #Параметр(7)
            #КонецЕсли
        #Иначе
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
                ПО
                      Значения.ГруппаДоступа         = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа       = ГруппыЗначений.ГруппаЗначенийДоступа
                    И ГруппыЗначений.ЗначениеДоступа = #Параметр(7)
        #КонецЕсли
                )
            ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
            КОНЕЦ
            =
            ВЫБОР
            КОГДА ИСТИНА В
                (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
                ГДЕ
                      ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
                    И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7))
                    И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ
                )
            ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
            КОНЕЦ
            )
     )
#Иначе
    ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
#КонецЕсли

    #Параметр(8)  // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок.

//// Проверка значения поля группы параметров 2.
#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда
    // Группа параметров не используется.
#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда
    // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие.
     ( #Параметр(10) )
#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда
     #Параметр(10) <> НЕОПРЕДЕЛЕНО
    И ИСТИНА В
     (  // Проверка права пользователя на таблицу Значения, установленного в поле.
        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10))
        #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда
            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли
     )
#ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда
      ИСТИНА В
     (  // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле.
        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
        ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава
        ГДЕ
              ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка
            И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10)
        #Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда
            И ТаблицыГруппДоступаПроверкаПрава.Изменение
        #КонецЕсли
     )
#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда
    ИСТИНА // Группа параметров отключена.
#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда
    
     (
        ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = #Параметр(10)
                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения
                #Иначе
                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
         И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено.
            (
            ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ
            ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек
                ПО
                      НаследованиеНастроек.Объект = #Параметр(10)
                    И НастройкиПрав.Объект  = НаследованиеНастроек.Родитель
                #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения
                #Иначе
                  #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда
                    И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка
                  #Иначе
                    И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)
                  #КонецЕсли
                    И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения
                #КонецЕсли
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
                ПО
                      СоставыГруппПользователей.Пользователь        = &АвторизованныйПользователь
                    И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь
            )
     )
#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда
    // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
    #Если СтрСодержит("#Параметр(9)", ",") #Тогда
        НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден"
    #Иначе
        НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено"
    #КонецЕсли
#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все"
         И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда
    
     (
            ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
            И
        #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,")        И СтрСодержит(",#Параметр(9),", ",Пользователи,"))
          Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда
            НЕ
            (
            НЕ ИСТИНА В
                (
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа
                ГДЕ
                      ГруппыЗначенийДоступа.ЗначениеДоступа       = #Параметр(10)
                    И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь
                )
            И НЕ
        #Иначе
            (
        #КонецЕсли
            ВЫБОР
            КОГДА ИСТИНА В
                (
        #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = #Параметр(10)
        #ИначеЕсли "#Параметр(10)" = "Т.Ссылка"
                 И "#Параметр(9)" <> "Пользователи"
                 И "#Параметр(9)" <> "ВнешниеПользователи" #Тогда
            #Если СтрСодержит("#Параметр(9)", ",") #Тогда
                // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
                НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа"
            #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                ГДЕ
                      Значения.ГруппаДоступа   = ГруппыДоступа.Ссылка
                    И Значения.ЗначениеДоступа = Т.ГруппаДоступа
            #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа.
                ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
                ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений
                ПО
                  
46 2S
 
24.12.21
09:39
Плюс описать общий макет , где в строках виды документов с описанием ролей, ограничивающих доступ. Все это обернуть красиво и вуаля
47 Dmitrii
 
24.12.21
09:41
(33) >> каждый раз при обновлении надо будет не забывать про снятие галочки в типовой роли.

Для этого есть переопределяемые общие модули в БСП-шной подсистеме прав и ролей.
В них формируются поставляемые профили. Добавляется одна строчка кода в которой вызываешь свою процедуру. В этой своей процедуре дополняешь поставляемый профиль нужными тебе ролями (можно и нетиповыми) или наоборот убираешь из поставляемого профиля "лишние" роли. Эти общие модули вызываются каждый раз при обновлении конфигурации или принудительно обработкой ОбновлениеВспомогательныхДанных из инструментов разработчика БСП.
Общий модуль УправлениеДоступомПереопределяемый.
Экспортная процедура ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления).

При обновлениях остаётся следить, чтобы доступ к твоим объектам не был включён в новых ролях поставщика. Поставляемые профили вручную редактировать не нужно.
48 ptiz
 
24.12.21
09:45
Вы не поверите, но получилось:
убрал сейчас руками запись из РС РегистрСведений.ТаблицыГруппДоступа по группе доступа кадровика для объекта "Данные для расчета зарплаты (Документ)" - и РЛС "закрыл" кадровику доступ.
49 2S
 
24.12.21
09:46
(48) до след обновления, емнип?
50 ptiz
 
24.12.21
09:47
В общем, через расширение:
1) закрываем форму
2) делаем подписку на этот РС, чтобы по кадровику записи не было
(49) И молимся, чтобы РЛС не менялся
51 ptiz
 
24.12.21
09:51
Ну и РС "Значения разовых показателей расчета зарплаты (для сотрудников)" тоже убрать из РегистрСведений.ТаблицыГруппДоступа
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан