Дать пользователю права на редактирование константы. УНФ 1.6

Клиент попросил дать одному из пользователей права на изменение константы «Контролировать остатки при проведении».

Добавил новую подсистему, включаемую в командный интерфейс в раздел CRM, т.к. он есть у всех пользователей:

Дал права на эту подсистему всем пользователям (у меня для этого есть роль дор_ДополнительныеПраваВсем, которая назначается всем пользователям).

Сначала я хотел просто включить константу в эту подсистему, чтобы она отображалась как отдельный пункт меню (если у пользователя есть права), но для этого должна стоять галочка «Использовать стандартные команды» у константы. Можно было поставить галочку через расширение. Но мне показалось это неудобным. Как видно, «управляемые» формы опять показали свою негибкость. Вручную константу в интерфейс подсистемы добавить нельзя.

Создал обработку дор_Настройки, которую включил в командный интерфейс новой подсистемы.

В итоге в разделе Сервис у подсистемы CRM появилась команда по открытию этой обработки:

Завел роль дор_МенятьКонтрольОстатков, в которой дал права на редактирование константы:

В форме разместил набор констант, но оказалось, что их нужно инициализировать при открытии:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 
	//Чтобы все константы считались
	УстановитьПривилегированныйРежим(Истина);
	ОО = РеквизитФормыВЗначение("КонстантыНабор");
	ОО.Прочитать();
	ЗначениеВРеквизитФормы(ОО, "КонстантыНабор");
КонецПроцедуры

Мне подсказали, что настройки автоматически считываются только если набор констант — основной реквизит. Но у меня в этой форме будут и другие настройки, я не стал делать набор констант основным реквизитом.

Реализовал, чтобы при изменении значения константы на форме она сразу же записывалась в базу данных:

&НаКлиенте
Процедура НаборКонстантКонтролироватьОстаткиПриПроведенииПриИзменении(Элемент)      
	
	КонстантаЗаписатьНаСервере("КонтролироватьОстаткиПриПроведении");
	
КонецПроцедуры

Процедура КонстантаЗаписатьНаСервере(ИмяКонстанты)
	
	Значение = КонстантыНабор[ИмяКонстанты];
	Константы[ИмяКонстанты].Установить(Значение);
	
КонецПроцедуры

То что я использую набор констант, а не считываю константы из базы, позволяет мне не заботиться о правах доступа.

Если обработку открывает пользователь без прав на редактирование константы, он не может редактировать константу:

А если права есть, то редактировать можно:

Среда: УНФ 1.6.27.167 Объем: 1.5 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. ...:

    {ВнешняяОбработка.дор_Настройки.Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (Прочитать)
    ОО.Прочитать();
    по причине:
    Нарушение прав доступа!

    • Сложно сказать. Похоже, что у вас обработка запускается в безопасном режиме, поэтому УстановитьПривилегированныйРежим игнорируется.
      Попробуйте открыть ее просто из файла, а не из справочника внешних обработок, а в справочнике внешних обработок проверьте режим, не Безопасный ли.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *