Имя: Пароль:
1C
1С v8
Настройка динамического списка, чтобы пользователь видел только свои документы
,
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, можете пожалуйста подсказать как это реализовать?