Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Видимость подсистем программно

Видимость подсистем программно
Я
   123GO
 
13.12.18 - 06:53
Добрый день. Нужно установить видимость всех объектов в подсистеме, или подсистемы целиком согласно реквизиту текущего пользователя.
Вкратце, Розница 2.2 Управляемые формы:
Если ТекущийПользователь.Магазин входит в СписокРазрешенныхМагазинов, то подсистема видна, если нет - скрыта (ну или по реквизиту Если Магазин.Разрешено = Истина).
Через функциональные опции не получается, константа одна не всех. Роли тоже не подходят - в магазинах есть админы, которые могут сами установить нужную роль. Вот сейчас пытаюсь через ограничение на уровне записей (RLS)..
Никто не сталкивался с такими задачами?
 
 
   123GO
 
1 - 13.12.18 - 06:57
Вообще, если все объекты не будут доступны в подсистеме, подсистема не должна показываться. Значит, все сводится к тому, что:
Вася и Петя имеют одинаковый набор ролей. Нужно, чтобы Вася не то, чтобы не видел списка документов Поступлений, а вообще не знал, что такой вид документа существует
   youalex
 
2 - 13.12.18 - 07:00
(0) УстановитьПараметрыФункциональныхОпцийИнтерфейса() - не пробовал?
   123GO
 
3 - 13.12.18 - 07:13
(2) Нет, есть пример?
   youalex
 
4 - 13.12.18 - 07:17
(3) примера нет
   lucbak
 
5 - 13.12.18 - 07:23
(0) Создаешь функциональные опции (ФО) аналогично подсистемам,далее создаешь регистр сведений где измерение "Пользователь" а ресурсы это твои подсистемы "булево". У ФО хранение - ссылка на реквизит регистра сведений.
Далее при начале работы системы (2)
УстановитьПараметрыФункциональныхОпцийИнтерфейса(Новый Структура("ПользовательПодсистемы", НастройкиПользователяСервер.ТекущийПользователь()))
   123GO
 
6 - 13.12.18 - 08:35
(5) А можно установить параметр ФО не по пользователю, а по магазину пользователя?
   lucbak
 
7 - 13.12.18 - 08:39
(6) Это всего лишь пример - ты можешь реализовать как угодно (замени измерение "Пользователь" на "Магазин" и определяй его при начале работы.
   123GO
 
8 - 13.12.18 - 08:44
(7) Так и подумал, не могу никак определить ТекущийМагазин в ПриНачалеРаботыСистемы()
   lucbak
 
9 - 13.12.18 - 08:46
(8) что значит "не могу определить" ?
   123GO
 
10 - 13.12.18 - 08:46
ну то есть получить
 
 Рекламное место пустует
   123GO
 
11 - 13.12.18 - 08:48
Пользователя можно получить из ПользователиКлиентСервер.ТекущийПользователь(), а магазин пока не могу найти. ПараметрыСеанса от туда недоступны
   lucbak
 
12 - 13.12.18 - 08:51
(11) Есть взаимосвязь пользователя и магазина? если есть то укажи у пользователя магазин и уже по нему заполняй ФО
   123GO
 
13 - 13.12.18 - 08:58
(12) Да, есть прям в типовой конфигурации. ПользователиКлиентСервер.ТекущийПользователь() возвращает СправочникСсылка.Пользователи, но через точку .Магазин я не могу обратиться, видимо потому что с клиента..
   123GO
 
14 - 13.12.18 - 09:00
попробовал сейчас, как работает в целом через Измерение Пользователь, сработало 1 раз правильно. Подсистема появилась, попробовал на другом пользователе, подсистема уже не исчезает, всегда видно вне зависимости от ресурса регистра сведений. Наверно у подсистемы нужно отключить видимость по ролям?
   lucbak
 
15 - 13.12.18 - 09:03
(13) Конечно на "клиенте" нельзя через точку работать - делай так Магазин=ОбщегоНазначенияСервер.ЗначениеРеквизитаОбъекта(ПользователиКлиентСервер.ТекущийПользователь(), "Магазин");
   lucbak
 
16 - 13.12.18 - 09:04
(14) А другой пользователь в регистре заведен? Если ДА то все должно работать.
   123GO
 
17 - 13.12.18 - 09:14
Нашел, нужно завести не только ФО но и параметр ФО. Вроде так с Пользователем все работает.
(15) Спасибо, сейчас попробую
   lucbak
 
18 - 13.12.18 - 09:16
(17) разумеется )))
   123GO
 
19 - 13.12.18 - 09:27
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользователиКлиентСервер.ТекущийПользователь(), "Магазин")
{(1,1)}: Переменная не определена (ОбщегоНазначения)
   123GO
 
20 - 13.12.18 - 09:27
Это значит, что я не могу сервер вызывать из Модуля управляемого приложения?
   lucbak
 
21 - 13.12.18 - 09:33
(20) Конечно можешь. Это значит, что у тебя нет  такого модуля.
   123GO
 
22 - 13.12.18 - 09:39
Контекстная подсказка так подсказала)
   runoff_runoff
 
23 - 13.12.18 - 09:42
(21) не, просто на модуле на стоит галочка "Вызов сервера"
   123GO
 
24 - 13.12.18 - 09:43
Выручил ОбщегоНазначенияРТВызовСервера.ЗначениеРеквизитаОбъекта(ПользователиКлиентСервер.ТекущийПользователь(), "Магазин")
   123GO
 
25 - 13.12.18 - 09:46
Все заработало. Спасибо, lucbak)
   123GO
 
26 - 13.12.18 - 09:50
Вот только не понятно как параметр ФО влияет на саму ФО, я нигде не указывал их связь. Но после добавления параметра ФО все заработало
   lucbak
 
27 - 13.12.18 - 10:20
(26) Что значит нигде? а это (5) ;)
   123GO
 
28 - 14.12.18 - 03:20
(27) Ну через УстановитьПараметрыФункциональныхОпцийИнтерфейса() я передаю значение измерения РегистраСведений параметру ФО, а где параметр ФО говорит самой ФО я не понял) Магия
   123GO
 
29 - 14.12.18 - 03:33
(27) А знаете, как установить видимость и доступ согласно той же ФО, но только для объектов? Подсистема скрылась у нужных пользователей, но они все еще могут зайти через Все функции в список документов. И, хоть при создании новых документов у них выходит "Операция недоступна", они могут читать и изменять уже созданные документы теми, у кого доступ есть
   123GO
 
30 - 14.12.18 - 04:08
Сделал так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Отказ = НЕ ПолучитьФункциональнуюОпцию("ап_ВидимостьПодсистемы",Новый Структура("ап_ВидимостьПодсистемы", ОбщегоНазначенияРТВызовСервера.ЗначениеРеквизитаОбъекта(ПользователиКлиентСервер.ТекущийПользователь(), "Магазин")));
КонецПроцедуры
   123GO
 
31 - 14.12.18 - 04:11
(30) В форме списка документа
   lucbak
 
32 - 14.12.18 - 07:25
(29) Можно отключить у пользователей "Все функции".
(31) Через универсальный отчет получат нужные им данные :)
   123GO
 
33 - 14.12.18 - 07:41
(32) Все функции могут дать местные "админы". Отчетом им там особо нечего смотреть, главное чтоб не вводили и не изменяли)
 
 
   lucbak
 
34 - 14.12.18 - 08:31
(30) Вот http://catalog.mista.ru/public/927667/
Просто все функции вызова замени на свои и будет тебе счастье (сможешь настроить как формы списков так и формы объектов - доступность, видимость, заполнение, проверки  т.д.)
   123GO
 
35 - 27.12.18 - 06:26
(34) Беда пришла, откуда не ждали.. Хочу, чтобы все работало в РИБ. При вызове при начале работы системы УстановитьПараметрыФункциональныхОпцийИнтерфейса() нужно получить ПользователиКлиентСервер.ТекущийПользователь(). Модуль получает его из АвторизированныйПользователь(), почему-то возвращается Неопределено..
База закрывается исключением, так и не открывшись.
   123GO
 
36 - 27.12.18 - 06:34
(35) В ПараметрыПриложения в соответствующей структуре АвторизированныйПользователь = Неопределено


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует