Перерыл полтора интернета, но вменяемой доходчивой инструкции не нашел. Пришлось доходить самому. Итак...
Задача: Требуется ограничить доступный функционал программы в зависимости от пользователя, используя функциональные опции.
Вариант реализации (допустим это самодельная база и все делаем с нуля):
1) Создаем справочник Пользователи.
2) Создаем параметр сеанса ТекущийПользователь (тип справочник Пользователи).
3) ПриНачалеРаботыСистемы получаем список пользователей ИБ и добавляем новых в этот справочник.
4) В модуле сеанса в процедуре УстановкаПараметровСеанса по ИмяПользователя() устанавливаем параметр сеанса ТекущийПользователь
5) Создаем регистр сведений НастройкаФункционала. Измерение Пользователь , ресурсы ПерваяПоловина ( булево) ВтораяПоловина (булево)
6) Создаем 2 функциональных опции . Назовем их ПерваяПоловинаФункционала и ВтораяПоловинаФункционала. Хранение указываем РегистрСведений.НастройкаФункционала.Ресурс.ПерваяПоловина для ФО ПерваяПоловинаФункционала и , соответственно, РегистрСведений.НастройкаФункционала.Ресурс.ВтораяПоловина для для ФО ВтораяПоловинаФункционала. Галку Привелигированный режим при получении снимаем. На закладке состав указываем в наших ФО объекты, на которые они влияют.
7) Создаем Параметр функциональной опции. Назовем его ПараметрДоступногоФункционала. Использование указываем РегистрСведений.НастройкаФункционала.Измерение.Пользователь. Это означает, что по нашему регистру сведений значение галок будет считываться из строки с измерением равным пользователю. Если нужно , чтобы результат зависил от нескольких параметров - делаем несколько параметров функциональных опций и в регистре , соответственно, несколько измерений.
8) И наконец, чтобы все это безобразие взлетело, в модуле приложения в ПередНачаломРаботыСистемы устанавливаем значение функциональных опций
Процедура ПередНачаломРаботыСистемы(Отказ)
// Параметры сеанса на этом этапе недоступны , поэтому придется
// определять пользователя программно
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ПараметрДоступногоФункционала",Администрирование.ПолучитьПользователяПоЛогину());
УстановитьПараметрыФункциональныхОпцийИнтерфейса(СтруктураПараметров);
КонецПроцедуры
где ПолучитьПользователяПоЛогину() по ИмяПользователя() получает ссылку справочника Пользователи.
В итоге получим следующее:
В регистре сведений НастройкаФункционала добавляем записи для каждого пользователя и ставим галки на том функционале который должен быть ему доступен. Когда пользователь входит в программу, он видит только тот функционал, который ему разрешили.