Как ограничить доступ к некоторым реквизитам документа для определённой роли исполнителя?

1. Svet_Serg 08.04.19 16:11 Сейчас в теме
Документооборот 8 КОРП, платформа 8.3.
Как ограничить доступ к некоторым реквизитам документа для определённой роли исполнителя?

Почитала форум, сделала так, но не работает конечно же.

Если РольДоступна ("НачальникОтделаСбыта") Тогда
	Элементы.Элемент1.Видимость = Ложь;
 	Элементы.Элемент2.Видимость = Ложь;
	иначе
	Элементы.Элемент1.Видимость = Истина;
	Элементы.Элемент2.Видимость = Истина;
КонецЕсли;
Найденные решения
3. melenaspb 208 08.04.19 16:23 Сейчас в теме
Роль_НачальникОтделаСбыта = Справочники.РолиИсполнителей.НайтиПоНаименованию("Начальник отдела сбыта"); 

Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ 
|	ИсполнителиРолейИДелегаты.ИсполнительДелегат 
|ИЗ 
|	РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты 
|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК РолиИсполнителей 
|	ПО ИсполнителиРолейИДелегаты.РольПользователь.Владелец = РолиИсполнителей.Ссылка 
|	И (ИсполнителиРолейИДелегаты.РольПользователь.Владелец =&РолиПользователя) 
|ГДЕ 
|	ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ИсполнительДелегат" ; 
Запрос.УстановитьПараметр("ИсполнительДелегат",Пользователь); //Тут Пользователь - для кого проверяем доступ
Запрос.УстановитьПараметр("РолиПользователя",Роль_НачальникОтделаСбыта ); 

РезультатЗапроса = Запрос.Выполнить(); 
Если РезультатЗапроса.Пустой() тогда //Роли исполнителя нет
 Элементы.Элемент1.Видимость = Ложь;
  Элементы.Элемент2.Видимость = Ложь;
Иначе 
  Элементы.Элемент1.Видимость = Истина;
   Элементы.Элемент2.Видимость = Истина;
КонецЕсли;
Показать
oleg-x; CyberBob; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Eternal_student799 08.04.19 16:17 Сейчас в теме
12. Svet_Serg 08.04.19 16:39 Сейчас в теме
4. Eternal_student799 08.04.19 16:23 Сейчас в теме
(1) Если РольДоступна("НачальникОтделаСбыта") Тогда
ЭлементыФормы.ТвойРеквизит.Доступность(Видимость) = Истина;
Иначе
ЭлементыФормы.ТвойРеквизит.Доступность(Видимость) = Ложь;
КонецЕсли;

Надо только через отладчик смотреть, тогда всё станет понятно
5. melenaspb 208 08.04.19 16:25 Сейчас в теме
(4) Про Документооборот вопрос был и про роли исполнителя, РольДоступна тут не подходит.
7. Eternal_student799 08.04.19 16:30 Сейчас в теме
(5) я с документооборотом не работал, но по правам и ролям сталкивался много...и не обязательно всё это дело пихать в запрос....
3. melenaspb 208 08.04.19 16:23 Сейчас в теме
Роль_НачальникОтделаСбыта = Справочники.РолиИсполнителей.НайтиПоНаименованию("Начальник отдела сбыта"); 

Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ 
|	ИсполнителиРолейИДелегаты.ИсполнительДелегат 
|ИЗ 
|	РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты 
|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК РолиИсполнителей 
|	ПО ИсполнителиРолейИДелегаты.РольПользователь.Владелец = РолиИсполнителей.Ссылка 
|	И (ИсполнителиРолейИДелегаты.РольПользователь.Владелец =&РолиПользователя) 
|ГДЕ 
|	ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ИсполнительДелегат" ; 
Запрос.УстановитьПараметр("ИсполнительДелегат",Пользователь); //Тут Пользователь - для кого проверяем доступ
Запрос.УстановитьПараметр("РолиПользователя",Роль_НачальникОтделаСбыта ); 

РезультатЗапроса = Запрос.Выполнить(); 
Если РезультатЗапроса.Пустой() тогда //Роли исполнителя нет
 Элементы.Элемент1.Видимость = Ложь;
  Элементы.Элемент2.Видимость = Ложь;
Иначе 
  Элементы.Элемент1.Видимость = Истина;
   Элементы.Элемент2.Видимость = Истина;
КонецЕсли;
Показать
oleg-x; CyberBob; +2 Ответить
19. Svet_Serg 09.04.19 14:36 Сейчас в теме
(3)
//Тут Пользователь - для кого проверяем доступ


Т.е. уникальный код пользователя?
20. melenaspb 208 09.04.19 14:59 Сейчас в теме
(19) Нет, ссылка на справочник Пользователи. Скорее всего текущий пользователь ( ПользователиКлиентСервер.ТекущийПользователь() )
6. oleg-x 27 08.04.19 16:25 Сейчас в теме
Код в целом правильный, если имена корректные. Проблема может быть в другом, видимость/доступность элементов определяется типовым кодом и тут надо выполнять Ваш код, после типового, если до, то просто видимость переопределяется типовым кодом.
UPD не внимательно прочитал, в документообороте, действительно все сложно с ролями.
8. melenaspb 208 08.04.19 16:31 Сейчас в теме
Если и проверять роль доступна - то только на права администратора, чтобы админ видел все.

Если Не РольДоступна("ПолныеПрава") тогда
     тут проверяем уже роли исполнителя и ограничиваем видимость/доступность
КонецЕсли;
9. Healer 1 08.04.19 16:32 Сейчас в теме
Вместо "РольДоступна()" одинэсами уже давно рекомендуется использовать "ПравоДоступно()" :-)
10. Healer 1 08.04.19 16:35 Сейчас в теме
А вообще ограничение к реквизитам следует делать через функциональную опцию, привязанную к константе, доступ к которой ограничен ролями или что-то в таком духе.
11. Healer 1 08.04.19 16:38 Сейчас в теме
Вотакуот делать не надо: "Роль_НачальникОтделаСбыта = Справочники.РолиИсполнителей.НайтиПоНаименованию("Начальник отдела сбыта"); ". Если очень хочется такое наколбасить, можно предопределённым элементом роль сделать и обращаться через точку. А вообще в коде условия по конкретным значениям справочника ставить очень не комильфо.
14. Svet_Serg 09.04.19 09:16 Сейчас в теме
(11)
Если очень хочется такое наколбасить, можно предопределённым элементом роль сделать и обращаться через точку.

Это 7 ролей в итоге.

Всем спасибо за участие.
Подумали и решили, проще скрыть реквизиты в настройках формы этих пользователей и запретить им менять настройки форм.
Чтобы конфигуратор сильно не колхозить.
23. Healer 1 16.04.19 10:13 Сейчас в теме
13. alalexmix 25 08.04.19 18:16 Сейчас в теме
Можно, например, доработать на ограничение реквизиты в самой роли, если позволяет платформа
15. vnagapov 09.04.19 11:02 Сейчас в теме
Если вам необходимо ограничение доступа, то возможно использовать стандартный функционал "Настройка доступности по состоянию". Делайте запрет для всех состояний для определенной роли. В конфигураторе ничего менять не надо.
16. Svet_Serg 09.04.19 11:42 Сейчас в теме
(15) не вариант совсем.
Документ имеет несколько реквизитов. Эти реквизиты, по ходу рассмотрения документа, заполняют адресаты.

Например, реквизит 1 заполняет адресат 1, далее реквизит 2 заполняет адресат 2. Причем адресат 2 не должен иметь возможности редактировать реквизит 1. В стандартных настройках доступа дополнительных реквизитов нет возможности ограничить доступ к реквизиту по роли или пользователю. Поэтому приходится извращаться.
17. vnagapov 09.04.19 14:09 Сейчас в теме
(16) В шапке вашей просьбы нигде не указано, что все реализовано через дополнительные реквизиты. При стандартных реквизитах все работает замечательно.
18. Svet_Serg 09.04.19 14:15 Сейчас в теме
(17) работает, не спорю :) Но в данном случает мне не подходит. Даже для стандартных реквизитов. Т.к. документ на согласовании может находиться у 4 человек (у 4 ролей) одновременно и у каждого из реквизитов свой доступ для каждой роли. Всё сложно)
21. vnagapov 10.04.19 09:31 Сейчас в теме
(18) У дополнительных реквизитов есть условия "видимости/доступности" по значению реквизитов объекта. Если у вас предмет процесса "заполняемый", то возможно использовать этот механизм.
22. Svet_Serg 10.04.19 09:39 Сейчас в теме
(21)всё пробовала, это не то, что мне нужно. Встроенного функционала недостаточно для нужд нашего предприятия, к сожалению :(
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот