Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 22:58

Сложное разграничение доступа к документу!

Автор |R|U|D|E|N, 05 мая 2011, 11:31

0 Пользователей и 1 гость просматривают эту тему.

|R|U|D|E|N

Добрый день. Интиресную задачу поставили передо мной. Вот только решить ее не знаю как)

У меня есть документ ВнутреннеПеремещение и две роли: Администратор и РядовойСотрудник. Хотя фактически пользователей больше...
У Администратора есть все права. У РядовогоПользователя есть возможность Изменять, Редактировать и Проводить документ.

Задача: Как сделать, что бы РядовойПользователь не мог интерактивно изменять уже проведенный документ а мог лишь установить один флажек и сохранить документ?

Специфика такая. В уже проведенном документе, иногда, РядовомуПользователю необходимо установить флажек и сохранить документ(не проводить его!) именно для этого в свойствах УправляемойФормы документа снят фажек ПроводитьПриИзминении! В такой ситуации РядовойПользователь может кроме установки нужного флажка изменить содержимое других реквизитов документа и сохранить его. Проведен документ естественно не будет, но этого нельзя допустить.

Спасибо за любые предложения!

|R|U|D|E|N

Пока, что вижу решение данной задачи следующим способом:

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

но как выполнить такое на уровне Ролей а не Пользователей не знаю?
Может есть еще какие то варианты?

valerasv

Самый простой вариант по хэлпу

РольДоступна (IsInRole)

Синтаксис:
РольДоступна(<Роль>)

Параметры:
<Роль> (обязательный)
Тип: Строка, ОбъектМетаданных: Роль. Название роли как она задана в конфигураторе или объект описания метаданного роли.
Возвращаемое значение:
Тип: Булево. Истина - роль доступна текущему пользователю; Ложь - в противном случае.

Описание:
Определяет доступность указанной роли текущему пользователю.

Пример:
Если Не РольДоступна("Менеджер") Тогда
    Сообщить("Просмотр заявок от покупателей не разрешен!");
КонецЕсли;

|R|U|D|E|N

Спасибо valerasv. Очень к стати. Проверил, работает.

Получается, теперь Если документ проведен и у пользователя нет роли Администратора то делать все реквизиты формы Доступность = Ложь делая документ для РядовогоПользователя рид онли.

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

valerasv

В настройках Роли у нужного документа снять галочку "Интерактивное изменение проведенных".
Там же можно сделать и другие настройки для установки/отмены действий с документом для данной роли,
и программировать ничего не придется.....

|R|U|D|E|N

Дело в том, что при выключенном "Интерактивное изменение проведенных" у меня не удается выполнить процедуру Печать и ВывестиНаОсновании...
может я что то не так делаю?

cska-fanat-kz

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

|R|U|D|E|N

Мужчины valerasv, sergejK74, cska-fanat-kz спасибо Вам огромное за отличные примеры! Вы как всегда мне здорово помогли!
Оказывается вариантов масса) и можно дать волю фонтазии)

Тема закрыта.

|R|U|D|E|N

Поспешил с закрытием темы)

Если я делаю так
Для Каждого Элемент из ЭтаФорма.Элементы Цикл
Элемент.Видимость = Ложь;
       //КонецЦикла;

|R|U|D|E|N

Простите за предидущее сообщение

Если делаю так:

Для Каждого Элемент из ЭтаФорма.Элементы Цикл
Элемент.Доступность = Ложь;
КонецЦикла;
Элементы.Отработан.Доступность = Истина;


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

Поэтому я делаю так:

Для Каждого Элемент из ЭтаФорма.Элементы Цикл
Элемент.ТолькоПросмотр = Истина;
КонецЦикла;
Элементы.Отработан.ТолькоПросмотр = Ложь;


В результате, вываливается ошибка о не возможности найти такое свойство у некоторых элементов. Я так понемаю, что не все элемены формы имеют свойство ТолькоПросмотр. А как можно это проверить и обойти в цикле?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск