Имя: Пароль:
1C
1С v8
Отбор по текущему пользователю
0 deskut
 
20.02.26
10:20
Имеется форма (управляемая) с динамическим списком. Один из реквизитов списка - Автор (тип - СправочникСсылка.Авторы). Также есть параметр сеанса ТекущийПользователь.
Надо сделать отбор: Автор = &ТекущийПользователь, чтобы пользователь видел только строки, которые имеют к нему отношение.

По ряду причин ограничивать на уровне прав доступа я не могу (а было бы легко - "ГДЕ Автор.Наименование = &ТекущийПользователь"), поэтому надо делать именно отбор.

Итак, открываю настройки списка, прописываю условие:

ГДЕ
    ... .Автор.Наименование = &ТекущийПользователь

На выходе - пустые записи. Что не так?
Пробовал разные варианты - и в запросе это прописывать, и в обычных настройках списка в отборе (т.е. без пометки "Произвольный запрос").
1 Волшебник
 
20.02.26
10:21
слева строка, справа ссылка
2 deskut
 
20.02.26
10:21
"На выходе - пустые записи" - я имел ввиду, что ничего не выводится в списке.
3 deskut
 
20.02.26
10:22
(1) Понимаю. Только вот как это устранить?..
4 deskut
 
20.02.26
10:31
(1) Наоборот ведь. Слева ссылка, справа строка.
5 Мультук
 
гуру
20.02.26
10:33
(0)

== Цитирую
Надо сделать отбор:

Автор = &ТекущийПользователь


Но отбор делаем совсем другой

Автор.Наименование = &ТекущийПользователь


Где логика ?

>> справа строка

Всё зависит от того, что вы суете в &ТекущийПользователь
6 deskut
 
20.02.26
10:33
(5) Первое - визуально. Второе - уже в коде. Большой разницы не вижу, все равно не работает.
7 unenu
 
20.02.26
10:40
20 лет назад привычна "кормить тролля" имела практический смысл.

сейчас обязанность "кормить бота" разрушает эстетическое восприятие мира.

что тут можно советовать?
8 deskut
 
20.02.26
10:41
(5) &ТекущийПользователь - строка.
9 Fish
 
гуру
20.02.26
10:44
(8) Покажи, как задаёшь параметр.
10 deskut
 
20.02.26
10:46
(9) Модуль сеанса:

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
    
    Если НЕ ИменаПараметровСеанса = Неопределено Тогда
        ПараметрыСеанса.ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
    КонецЕсли;
    
КонецПроцедуры
11 Somebody
 
20.02.26
10:47
(8) криво это, сказали же. ссылку надо передавать
12 Мультук
 
гуру
20.02.26
11:02
(10)

Всё два вопроса

1) Это типовая конфа ?
2) Код типовой или это вы улучшили ?

(9) -> (10)

Хехе. :-)
13 deskut
 
20.02.26
11:05
(12) Конфигурация самописная. Всё с нуля.
14 RVN
 
20.02.26
12:25
(10) Эт Вы прям с козырей зашли.
А тип параметра сеанса у Вас какой?
15 deskut
 
20.02.26
12:32
(14) Строка(100)
16 RVN
 
20.02.26
12:40
Посмотрите в отладчике:
а точно ли эти 2 ваши строки равны?
17 deskut
 
20.02.26
13:40
Попытаюсь поподробнее объяснить. Хожу где-то возле решения, но что-то не получается.

Открываю форму, в столбце её реквизитов кликаю на реквизит "Список", в окне свойств возле "Настройка списка" нажимаю "Открыть".
Появляется такое окно: https://file.printskrin.ru/2026/02/20/imageff3ff9db5de6e6c6.png

Ставим условие отбора - "Равно".
Левое значение: Автор.Наименование - это Строка.
Правое значение: ТекущийПользователь. Но как его вписать? Это параметр сеанса.
18 deskut
 
20.02.26
13:43
Думаю, есть вкладка Параметры - его надо наверно туда вписать. А вот как его туда получить?
19 2S
 
20.02.26
13:47
(0) Если я верно понял, то Вам нужно что-то типа этого?

&НаСервере
Процедура расшПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    Если <Условие> Тогда  
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Автор",<значение>,ВидСравненияКомпоновкиДанных.Равно,,Истина);
    Иначе
        ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Автор");
    КонецЕсли;    
    
КонецПроцедуры
20 deskut
 
20.02.26
13:51
Да, ну только без условия, а всегда. Хотелось бы это прямо в те настройки отбора забить.
Я правильно понимаю план действий?
1. Создать параметр ТекущийПользователь на соответствующей вкладке.
2. Кодом при открытии формы присваивать значение параметру (но как?).
3. А уже параметр этот подставляется в условие сравнения в настройках отбора списка.
21 deskut
 
20.02.26
13:55
Прописал условие отбора:
Автор.Наименование Равно ПараметрыДанных.ТекущийПользователь.
Параметр этот, соответственно, добавил на вкладке параметров. А как бы туда передавать  параметр сеанса? Как-то кодом при открытии формы?
22 2S
 
20.02.26
13:57
(20) Ты бот?
/stop нфхуй

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Автор",<значение>,ВидСравненияКомпоновкиДанных.Равно,,Истина);

где <значение> - твой параметр сеанса. Но ты, походу, не понимаешь разницу между ссылкой и строкой, как выше коллеги писали.

(21) "Автор.Наименование Равно ПараметрыДанных.ТекущийПользователь."
за такое бить ногами. Работайте со ссылками.
23 Chameleon1980
 
20.02.26
13:56
(20) сиди я сам открою
24 Мультук
 
гуру
20.02.26
14:08
(21)

Имхо. Вам нужны курсы по программированию в 1С

И (Или) изучение хоть какой-нибудь типовой конфигурации.

Вы усиленно плаваете в терминах.
25 deskut
 
20.02.26
14:09
(22) Да не бот я.
Этот метод не прокатывает, так как нет БСП.
Ну пусть будет не ТекущийПользователь, а ФамилияТекущегоПользователя.
26 2S
 
20.02.26
14:14
(25) Ну тогда в самом ДС определяйте условие или при открытии переопределяйте запрос ДС с условием.
Если упорно сравниваете со строками, то хотя бы обрамите в СокрЛП()
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой