Доброго всем дня!
Подскажите пожалуйста как проверить есть ли у пользователя роль в профиле.

```1c
    РольДоступна("Менеджер")
```
не срабатывает пока не поставлю роль через конфигуратор.

```1c
    УправлениеДоступом.ЕстьРоль("Менеджер")
```
 ругается что у пользователя недостаточно прав для работы с базой данных. Хотя смотрю через журнал транзакций доступ ко всем регистрам/справочникам на которые выдает ошибку есть.
Какие еще способы посоветуете?
---
```1c
    Если Не ПравоДоступа("Чтение", Справочник) Тогда
    Предупреждение(НСтр("ru = 'Доступ к данному справочнику закрыт!';"
    + " en = 'Access denied!'"));
    КонецЕсли;
```

Может Вам это нужно, вместо РольДОступна()?
---
А если я оставляю только:
Если ЭтоМенеджер() тогда

то пользователям с полными правами. реквизит блокируется тоже.

тогда эта функция вам не подойдет.
т.к. она начинается с

```1c
    Функция ЕстьРоль(Знач Роль, Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено) Экспорт

    Пользователь = ?(ЗначениеЗаполнено(Пользователь), Пользователь, Пользователи.АвторизованныйПользователь());
    Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда
    Возврат Истина;
    КонецЕсли;
```

Т.е. если будет полноправный пользователь, хоть с "Менеджером", хоть без него , она все равно истину вернет.

Далее, у полноправных пользователей - все равно должна галка "менеджер" сниматься по идее.
А вспомогательные данные после добавления роли обновлял ?
---
два варианта, либо настроить видимость реквизита на форме по ролям (свойства реквизита элемента формы), либо программно "РольДоступна" при открытии формы (доступность, видимость, что угодно)
---
Какие еще способы посоветуете?
какие еще способы могут быть, если роль на самом деле недоступна... вы двумя способами уже проверили, вам говорят что нет роли. Других способов нет и не нужно. Роль доступна сработает, исключительно если в конфигураторе стоит галка на роли. У вас что-то другое.

Изначально, откуда проблема взялась ? В рамках, так сказать, какого процесса вылезла проблема ? Давай всю предысторию
---
Надо запретить менеджеру доступ к реквизита

Дописал в процедуру при открытии:

```1c
    Если (ЭтоМенеджер()) И (НЕ ЭтоАдминистратор()) тогда
    Элементы.Статус.Доступность=Ложь;
    КонецЕсли;
```

Вот в таком варианте ругается на нехватку прав.

```1c
    &НаСервере
    Функция ЭтоМенеджер()
    Возврат УправлениеДоступом.ЕстьРоль("Менеджер")
    КонецФункции

    &НаСервере
    Функция ЭтоАдминистратор()
    Возврат УправлениеДоступом.ЕстьРоль("ПолныеПрава")
    КонецФункции
```

А через РольДоступна() делать не хочу, т.к. менеджеров много и эта галочка постоянно слетает.
---
А почему не сделать новую роль: МенеджерБезДоступаКРеквизиту? Дать её этому менеджеру и не надо ничего проверять.
---
а как такое реализовать?
---
Я так понял, что конфигурацию вы редактируете. В Общие->Роли находите подходящую роль, где меньше всего нужно изменений. Копируете ёё и переименовываете в МенеджерБезДоступаКРеквизиту. Вносите необходимые изменения: запрещаете доступ к реквизитам. В Предприятии создаёте профиль с этой ролью и группу с этим профилем. Включаете нужных менеджеров в эту группу. А из группы с профилем обычный менеджер этих менеджеров исключаете.
---
Вносите необходимые изменения: запрещаете доступ к реквизитам
так в этом и проблема, не могу запретить.
---
Объясните по подробнее. В конфигураторе открываете роль, находите нужный реквизит, снимаете галочку Просмотр, Редактирование в зависимости от того, что требуется.
---
Если (ЭтоМенеджер()) И (НЕ ЭтоАдминистратор()) тогда
Чет с условием как-то неправильно.

Когда у пользователя полные права, то все остальные роли снимаются.

А в функции ЕСТЬРОЛЬ - первым делом проверяются полные права, если они полные - то возвращается истина, если нет - тогда уже проверка на роль. Причем это дело в привелигированном режиме происходит, т.е. должно работать по любому.
должно остаться только проверка на менеджера.

А уверен, что ошибка именно при вызове этофункции общего модуля ? Отладчиком если пройтись, на какой строке гасится ?
---
Галочка постоянно слетает потому что БСП при обновлении прав из профилей заменяет на те роли которые в профиле! Добавбте свою "новую роль" в профиль и используйте "РольДоступна"...
---
Когда делаю вот так:

```1c
    УправлениеДоступом.ЕстьРоль("Менеджер")
```

выдает ошибку, как на скриншоте
В профиле, роли на которые необходимы права к данным справочникам/регистрам отмечены.
---
а роль типовая ? Или вы ее только что добавили ?
---
добавленная роль, без прав. Создавал только для того чтобы ограничить доступ к реквизиту.
А если я оставляю только:

```1c
    Если ЭтоМенеджер() тогда
```

то пользователям с полными правами. реквизит блокируется тоже.
---
А если я оставляю только:
Если ЭтоМенеджер() тогда

то пользователям с полными правами. реквизит блокируется тоже.

тогда эта функция вам не подойдет.
т.к. она начинается с

```1c
    Функция ЕстьРоль(Знач Роль, Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено) Экспорт

    Пользователь = ?(ЗначениеЗаполнено(Пользователь), Пользователь, Пользователи.АвторизованныйПользователь());
    Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда
    Возврат Истина;
    КонецЕсли;
```

Т.е. если будет полноправный пользователь, хоть с "Менеджером", хоть без него , она все равно истину вернет.

Далее, у полноправных пользователей - все равно должна галка "менеджер" сниматься по идее.
А вспомогательные данные после добавления роли обновлял ?
---
```1c
    Если Не ПравоДоступа("Чтение", Справочник) Тогда
    Предупреждение(НСтр("ru = 'Доступ к данному справочнику закрыт!';"
    + " en = 'Access denied!'"));
    КонецЕсли;
```

Может Вам это нужно, вместо РольДОступна()?
---
мне надо заблокировать один реквизит на форме. Его тип "перечисление".
---
мне надо заблокировать один реквизит на форме. Его тип "перечисление".
а конфа какая ?
По идее, для таких мелких настроек - не очень комильфо роли добавлять. В УНФ - есть механизм настройки пользователя, я бы в него добавил.
В ERP - я запилил регистр сведений, для хранения дополнительных констант, и подобные мелкие настройки - просто бы добавил определенную константу со списком пользователей, которые могут пользоваться данным документом
---
УТ 11.4, этот код я пишу в расширение.
Сейчас попробую функцию перекинуть в свое расширение и посмотрю что будет.
---
можно на форме настроить видимость реквизита по ролям...
---
так вот и я думаю как мне наложить условие на роль.
---
два варианта, либо настроить видимость реквизита на форме по ролям (свойства реквизита элемента формы), либо программно "РольДоступна" при открытии формы (доступность, видимость, что угодно)