|   |   | 
| 
 | Настройка динамического списка, чтобы пользователь видел только свои документы | ☑ | ||
|---|---|---|---|---|
| 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, можете пожалуйста подсказать как это реализовать? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |