|
Настройка динамического списка, чтобы пользователь видел только свои документы | ☑ | ||
---|---|---|---|---|
0
Vladislav2023
18.10.23
✎
07:53
|
Здравствуйте. Подскажите возможность реализации отбора в динамическом списке, чтобы пользователь мог видеть только документы, которые он создал. Конфигурация Бухгалтерия 3.0 (3.0.50.1), платформа 8.3.18.1959.
Создан документ "РеестрОТК", в нём указан реквизит "АвтДок" в "Процедура ПриСозданииНаСервере (Отказ, СтандартнаяОбработка)" в виде: Если РеквизитФормыВЗначение("Объект").ЭтоНовый()тогда Объект.АвтДок = ПараметрыСеанса.ТекущийПользователь; КонецЕсли; И при создании документа автором подставляется текущий пользователь. Как программно можно реализовать отбор? Нужно ли менять сам параметр? П.С.: 1С недавно изучаю, гуглил(варианты не подошли), подскажите можно ли сделать через ПроизвольныйЗапрос? Или в модуле ФормаСписка нужно задать что-то : Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); |
|||
1
Mort
18.10.23
✎
08:39
|
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "АвтДок", Пользователи.АвторизованныйПользователь());
|
|||
2
Vladislav2023
18.10.23
✎
08:57
|
Я Вас правильно понял,что нужно добавить на ФормуСписка в модуль процедуру:
&НаСервере Процедура ПриОткрытииНаСервере() ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "АвтДок", Пользователи.АвторизованныйПользователь()); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПриОткрытииНаСервере(); КонецПроцедуры |
|||
3
Доминошник
18.10.23
✎
10:27
|
(0) Как минимум - надо не забыть сделать возможным хоть кому-то просмотр общего списка данных документов
|
|||
4
Vladislav2023
18.10.23
✎
11:17
|
Просмотр без ограничений будет у админа и бухгалтера.
Я понимаю, для Вас это пустяковая задача, буду благодарен, если можете подробнее указать способ реализовать задачу. |
|||
5
Vladislav2023
18.10.23
✎
11:48
|
Не понимаю нужно ещё где-то указать условие? Документ открывается, с пустым списком, при ручном выборе отбора в приложении пишет что "Невожможно применить фиксированные настройки. Пересекаются элементы отбора."
|
|||
6
Donkey_hot
18.10.23
✎
14:11
|
(0) Вам надо, чтобы он не мог видеть их в этом списке или не имел к ним доступа? Постановщики задач, когда говорят "чтобы он видел только свои", часто имеют в виду второе. Просто надо понимать, что если даже вы отфильтруете данный список, опытный пользователь найдет еще примерно 9000 мест, откуда можно эти документы открыть.
|
|||
7
Vladislav2023
19.10.23
✎
05:38
|
Мне надо, чтобы он не мог видеть их в этом списке.
|
|||
8
Vladislav2023
19.10.23
✎
06:15
|
Нашёл такой способ(надо переделать под себя), но не знаю, ка его применить(поставить в модуль ФормаСписка?):
##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей) ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ ИЛИ (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 КАК ПолеОтбора ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты) И ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Контрагенты И НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты) И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)) И НастройкиПравДоступаПользователей.Запись = ИСТИНА ГДЕ Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(1)) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL) ##КонецЕсли |
|||
9
DJ Anthon
19.10.23
✎
06:16
|
а у тебя используются ограничения на уровне прав доступа?
|
|||
10
Vladislav2023
19.10.23
✎
07:05
|
Да, используются.
|
|||
11
Vladislav2023
19.10.23
✎
08:37
|
Всем спасибо! Задача была решена следующим образом:
Заходим на ФормаСписка создаём событие ПриОткрытии: &НаСервере Процедура ПриОткрытииНаСервере() ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АвтДок"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ЭлементОтбора.Использование = Истина; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементОтбора.ПравоеЗначение = ПараметрыСеанса.ТекущийПользователь; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии() ПриОткрытииНаСервере(); КонецПроцедуры Буду рад, если подскажите альтернативный вариант с использованием: ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "АвтДок", Пользователи.АвторизованныйПользователь()); |
|||
12
Доминошник
19.10.23
✎
10:48
|
(11) И как на этой форме списка бухгалтер или администратор увидит всё?
|
|||
13
Vladislav2023
19.10.23
✎
11:39
|
Добавил условие:
Если РольДоступна("ПолныеПрава") и РольДоступна("Бухгалтер") Тогда Иначе ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АвтДок"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ЭлементОтбора.Использование = Истина; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементОтбора.ПравоеЗначение = ПараметрыСеанса.ТекущийПользователь; КонецЕсли; |
|||
14
bolobol
19.10.23
✎
12:36
|
(13) ИЛИ
|
|||
15
Vladislav2023
19.10.23
✎
13:47
|
Благодарю, за поправку!
|
|||
16
ГдеСобака Зарыта
19.10.23
✎
13:57
|
Вот вместо этого
Если РеквизитФормыВЗначение("Объект").ЭтоНовый()тогда Используй Если Параметры.Ключ.Пустая() Тогда |
|||
17
igork1966
19.10.23
✎
17:48
|
(4) Вы же понимаете что все описанное ограничит только в списке? Через предыдущая версия/активная версия для документов с версиями, расшифровки отчетов, поля в других объектах все равно останется доступ...
|
|||
18
igork1966
19.10.23
✎
17:59
|
(17) + сама по себе идея кривая. К ней много вопросов. Например, что будете делать если человек заболел или уволился? Все, все доки в ответственности главбуха? Он этому обрадуется?
|
|||
19
Donkey_hot
19.10.23
✎
18:14
|
(17) Уже интересовался, ТС заверил, что нужно только в списке. Так, конечно, напрашивается нормально сделанное RLS.
|
|||
20
Vladislav2023
20.10.23
✎
06:03
|
igork1966, согласен, но руководитель отдела уверен, что такой метод правильный.
Буду рад, если подскажите альтернативный вариант с использованием RLS(правильна ли эта мысль?): Включить RLS, в ограничениях роли на данный документ указать ГДЕ Автор = &ТекущийПользователь Donkey_hot, можете пожалуйста подсказать как это реализовать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |