Имя: Пароль:
1C
1С v8
Пользователь не равен сам себе
0 Fannasankh
 
09.12.15
14:04
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
ПользовательТекущий = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ);
Если ПользовательИБ = ПользовательТекущий Тогда
//что-то делаю
КонецЕсли;

Здесь Пользователь в первом случае передаваемый параметр. Выполняю код из-под передаваемого пользователя, вручную сравнивают идентификаторы, они совпадают, а условие выдаёт ложь. В чём может быть дело?
1 Волшебник
 
модератор
09.12.15
14:06
А пользователь находится? может типы не совпадают?
2 vde69
 
09.12.15
14:06
почисть кеш
нажми F7
3 Fannasankh
 
09.12.15
14:07
(1) находится. В отладчике смотрю, визуально всё совпадает.
4 Fannasankh
 
09.12.15
14:07
(2) перезапускать пробовал. А база клиент-серверная.
5 salvator
 
09.12.15
14:08
(3) А не визуально? Типы совпадают?
6 Fannasankh
 
09.12.15
14:13
(5) да. ПользовательИнформационнойБазы. А как они могут не сопадать, если данная функция возвращает или ПользовательИнформационнойБазы или неопределено?
7 Мэс33
 
09.12.15
14:15
(6) Все равно проверьте типы.
8 Fannasankh
 
09.12.15
14:16
(7) так я уже проверил. Совпадают
9 Гёдза
 
09.12.15
14:18
Пользователь.ИдентификаторПользователяИБ
=
ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ
?
10 Fannasankh
 
09.12.15
14:19
(9) Да
11 Мэс33
 
09.12.15
14:19
(8) Так не бывает.
12 Гёдза
 
09.12.15
14:19
Покажи скриншоты отладчика в (0) и (9)
13 Fannasankh
 
09.12.15
14:20
(9) В качестве решения задачи как раз буду использовать данное сравнение, так даже короче получается.

Но всё равно интересно, почему не работает первоначальный вариант.
14 Гёдза
 
09.12.15
14:20
Или в табло выведи эти значения
15 Гёдза
 
09.12.15
14:20
(13) Может еще проще
Пользователь = ПараметрыСеанса.ТекущийПользователь
16 Fannasankh
 
09.12.15
14:20
(12) сейчас. Перепишу как было.
17 Fannasankh
 
09.12.15
14:21
(15)в принципе да.

Но не понятно, почему не работает как я написал
18 Мэс33
 
09.12.15
14:21
(13) И список пользователей из ПользователиИнформационнойБазы покажи.
19 Fannasankh
 
09.12.15
14:31
(18) ну это уже отчасти конфиденциальная информация. Не то что бы прям очень, но всё таки.
20 Мэс33
 
09.12.15
14:32
(19) Проверь, вдруг дубли )).
21 Fannasankh
 
09.12.15
14:32
(18) но одинаковых там нет, я это могу так гарантировать:)
22 salvator
 
09.12.15
14:33
А попробуй получить двух пользователей из идентификатора и сравнить. Че получится?

Типа

УИД1 = Новый УникальныйИдентификатор(Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ));
П1 = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(УИД1);

УИД2 = Новый УникальныйИдентификатор(Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ));
П2 = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(УИД2);

Сообщить(П1=П2);
23 Мэс33
 
09.12.15
14:33
(21) Проверь.
Потому что тут единственная зацепка - ты ищешь в ПользователиИнформационнойБазы, и он возвращает разные значения.
24 Мэс33
 
09.12.15
14:34
(22) да, и это тоже проверь.
25 Fannasankh
 
09.12.15
14:43
26 Fannasankh
 
09.12.15
14:44
Остальное лень выводить, найдено другое решение :) Может потом на досуге.
27 Мэс33
 
09.12.15
14:45
(26) Ты интересный, зашел, попросил помощи. А теперь - "лень выводить".
28 Fannasankh
 
09.12.15
14:46
(27) Ну я попросил помощи, чтобы решить проблему, проблема решена, хоть и немного иначе.
29 Мэс33
 
09.12.15
14:47
(28) Хочется же понять.. косяк все же в данных.
Тебе человек даже код написал. Сложно проверить? (22)
30 Fannasankh
 
09.12.15
14:48
(29) Просто мне этот код переписывать вручную, работаю на другой машине, на другой операционке, и просто так это туда-сюда не копируется.

Через пару минут выложу результат из (22)
31 Мэс33
 
09.12.15
14:49
(30) гуд
32 aleks_default
 
09.12.15
14:52
(31)А что вы расчитываете получить из (22)?
33 Fannasankh
 
09.12.15
14:53
(31) П1 не равно П2. Походу 1С не умеет сравнивать данный тип данных просто. Причем такой результат из-под двух разных пользователей.
34 Fannasankh
 
09.12.15
14:54
Версия платформы 8.2.18.109
35 aleks_default
 
09.12.15
14:55
у него просто админских прав нет
36 Fannasankh
 
09.12.15
14:56
(35) и?
37 singlych
 
09.12.15
14:56
(33) П1=П1 чему равно?
38 Fannasankh
 
09.12.15
14:57
(35) из-под админа тоже самое
39 alexlap
 
09.12.15
15:05
Скорее сравнивает не как сылочные или простые типы.
Как Документ.объект на пример.
40 Мэс33
 
09.12.15
15:05
Сообщить(Пользователь.ИдентификаторПользователяИБ.Ссылка.УникальныйИдентификатор());

Сообщить(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ.Ссылка.УникальныйИдентификатор());

А такое не проканает (моя вольная фантазия)?
41 Fannasankh
 
09.12.15
15:08
(37) равно истина
42 Fannasankh
 
09.12.15
15:10
(40) это как так? У идентификатора нет ссылки
43 Мэс33
 
09.12.15
15:11
(42) Ладно, дома гляну.
Или попробуй без ссылки )
44 Fannasankh
 
09.12.15
15:12
(43) тоже нельзя.
У ИдентификаторПользователяИБ нет реквизитов
45 singlych
 
09.12.15
15:14
(41) Нда, прикольно.
НайтиПоИмени() дает такой же результат.
на 8.3.6.2299 проверял.
46 Fannasankh
 
09.12.15
15:18
(45) в общем Пользователь = ПараметрыСеанса.ТекущийПользователь даёт то, что мне надо
47 Fannasankh
 
09.12.15
15:20
А ещё сюда же в тему. Почему то ПользовательИБ.Роли из под того же пользователя, к которому это относится выдаёт пустой список. А из под другого список ролей.
48 Mikhail Volkov
 
09.12.15
15:40
(0) ПользователиИнформационнойБазы - вроде не те пользователи, а конфигуратора!?
49 Fannasankh
 
09.12.15
15:44
(48) какие не те? не понял вопроса
50 Tateossian
 
09.12.15
15:48
(33) Подтверждаю, тоже самое.
Версия 8.3.6.2152. Надо сравнивать УИДы, получается.
51 Волшебник
 
модератор
09.12.15
15:49
Я же говорил, что типы не совпадают
52 Fannasankh
 
09.12.15
15:55
(50) Или просто пользователей как элементы справочника пользователи
53 Fannasankh
 
09.12.15
15:55
(51) так типы то совпадают
54 Fannasankh
 
09.12.15
15:56
(51) в (25) доказательство
55 Локи-13
 
09.12.15
16:00
Ну как бы а с какого фига они должны быть равны?

Как могут быть равны два объекта?

    а = новый структура("аа","аа");
    б = новый структура("аа","аа");


Равна ли структура "а" структуре "б" ?
56 Волшебник
 
модератор
09.12.15
16:00
(53) чудес не бывает
57 Локи-13
 
09.12.15
16:00
Равны будут только

ПользовательИБ.Имя = ПользовательТекущий.Имя
58 Fannasankh
 
09.12.15
16:01
(55) это не новые структуры. У них одинаковый идентификатор, это один и тот же пользователь. В справочнике пользователи нет дублирующихся элементов. В целях сохранения конфидициальности не могу выложить справочник пользователи
59 Fannasankh
 
09.12.15
16:02
(56) тогда какое объяснение?
60 Локи-13
 
09.12.15
16:02
(58) Это два объекта!

Объекты нельзя сравнивать!
61 Fannasankh
 
09.12.15
16:04
(60) вот это уже больше похоже на правду. Наверно, я это не знал или забыл
62 6tuf
 
09.12.15
16:09
(0) используй

СравнениеЗначений (CompareValues)
Методы:

Сравнить (Compare)

Конструкторы:

По умолчанию

Описание:

Объект для сравнения значений по правилам, совпадающим с правилами сравнения значений в базе:
Элементы, чьи типы не совпадают, сравниваются по коду типа
Элементы простых типов сравниваются по значению
Объекты сравниваются по идентификатору
Моменты времени сравниваются по дате и идентификатору объекта
Элементы остальных типов сравниваются по строковому представлению.


Доступность:

Сервер, толстый клиент, внешнее соединение.
63 Fannasankh
 
09.12.15
16:12
(62) спасибо