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

Дополнительное право в плане видов характеристик

Автор helgе, 31 окт 2018, 11:45

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

helgе

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

которая возвращает это самое дополнительное значение права,но как её применить для себя (?),она у меня выходит в ошибкой в общем модуле. Как настроить это самое доп.право "РедактироватьСклад" так чтобы оно делало то,что я задумал (запрещало редактировать поле "склад")??

oleg-x

При открытие формы, пропиши.
Элементы.Склад.ТолькоПросмотр = НЕ УПользователяЕстьПравоРедактироватьСклад();
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

helgе

Цитата: oleg-x от 31 окт 2018, 12:51
При открытие формы, пропиши.
Элементы.Склад.ТолькоПросмотр = НЕ УПользователяЕстьПравоРедактироватьСклад();
Это просто событие в модуле формы? Но надо  именно через доп.право такое сделать,таково задание.
Добавлено: 31 окт 2018, 16:16


Короче решил проблему, делов было на 10 минут, однако у меня всё было как обычно:
В общем модуле УправлениеДопПравамиПользователя создал функцию вот такую:
Функция РедактированиеСклад() Экспорт
РедактироватьСклад=УправлениеПользователями.ПолучитьЗначениеПраваДляТекущегоПользователя(ПланыВидовХарактеристик.ПраваПользователей.РедактироватьСклад,Истина);
  Если РедактироватьСклад.Количество() = 0 Тогда
Возврат Ложь;
ИначеЕсли РедактироватьСклад.Количество() > 1 Тогда
Возврат Истина;
Иначе
Возврат РедактироватьСклад[0].Значение;
КонецЕсли;

Затем при в форме документа в событии ПриОткрытии я добавил вызов этой функции и проверку истина ли функция или нет:
Процедура ПриОткрытии()

Если УправлениеДопПравамиПользователей.РедактированиеСклад() Тогда
  ЭлементыФормы.Склад.ТолькоПросмотр=Истина;
КонецЕсли;
КонецПроцедуры

Работает.

Добавлено: 31 окт 2018, 17:57


Теперь хочу тоже самое, но через запрос к РегиструСведений.

oleg-x

Посмотрите общий модуль управление пользователями, там это реализовано через запрос, просто в параметры функции вы передаете какое право ищите и его значение.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Теги:

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

Рейтинг@Mail.ru

Поиск