Ссылка не равна ссылке

1. pyrkin_vanya 497 17.03.22 21:43 Сейчас в теме
Всем привет. Есть http-сервис. Некорректно отрабатывает простой код.

    Доступен = Ложь;
    
    Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
        
                
        Если ТекущаяСтрока.Клиент = Клиент Тогда
            
            Доступен = Истина;
            Прервать;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Доступен;

Показать



Две одинаковые ссылки на один и тот же элемент справочника. И они не равны. В чем прикол?

Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
21. pyrkin_vanya 497 29.01.25 17:21 Сейчас в теме
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))

Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
    
    // этот код, почемуто иногда не срабатвыает. Какой то глюк.
    // https://forum.infostart.ru/forum9/topic278663/#message2800678
    // ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
    // решим переделать по сравнению уидов строк.
    
    // Старый код.
    //ПараметрыОтбора = Новый Структура;
    //ПараметрыОтбора.Вставить("Клиент", Клиент);
    //НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
    //
    //Возврат НайденныеСтроки.Количество() > 0;
    
    Доступен = Ложь;
    
    УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
    
    Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
        
        УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
        
        Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
            
            Доступен = Истина;
            Прервать;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Доступен;
    
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 17.03.22 22:18 Сейчас в теме
(1)А поиск в таблице тоже не работает?
3. pyrkin_vanya 497 17.03.22 22:29 Сейчас в теме
(2)нет. Сначала сделал через найтистроки. Удивился результату. Решил переписать и тоже самое)
4. Sashares 33 18.03.22 12:34 Сейчас в теме
11. pyrkin_vanya 497 18.03.22 13:14 Сейчас в теме
13. Sashares 33 18.03.22 13:29 Сейчас в теме
(11)Можно предложить попробовать на другой версии платформы.
Еще можно предложить написать на линию консультации и на партнерский форум, если есть доступ.
14. pyrkin_vanya 497 18.03.22 13:32 Сейчас в теме
(13)Этот код выполняет HTTP-сервис. И желательно написать так, чтобы не привязываться к версиям и ошибкам платформы. )) Понимаю, что тяжело. )))) Если ошибка будет повторяться, то буду эксперементировать)) Спасибо.
6. ishelper 18.03.22 12:44 Сейчас в теме
(1)
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Значит, код правильный (срабатывает), а глючит платформа.

Если не удастся решить проблему подбором платформы, то можно попытаться обойти ее - например, сравнивать не ссылки, а уникальные идентификаторы, желательно преобразовать их в строку.

В-общем, сравнивать простые типы данных, а не агрегатные.
12. pyrkin_vanya 497 18.03.22 13:14 Сейчас в теме
(6)уже реализовал именно так. Буду отслеживать.
5. smirnova_a 18.03.22 12:41 Сейчас в теме
очень странно,может кеш почистить?
7. Airlord 18.03.22 12:46 Сейчас в теме
Добрый день! А почему не обращаетесь через ссылку?
ТекущаяСтрока.Клиент.Ссылка = Клиент.Ссылка



Не всегда видится то, что видится.
8. SlavaKron 18.03.22 12:49 Сейчас в теме
(7) ТекущаяСтрока.Клиент и Клиент – и так ссылки, судя по Табло. Я бы еще ЗначениеВСтрокуВнутр сравнил.
10. Airlord 18.03.22 12:56 Сейчас в теме
(8)Ну не всегда. Только в данный момент момент отладки. Кто даст гарантию, что это каждый раз?
16. 1cnik2 16 29.01.25 07:16 Сейчас в теме
(8) Забавно, думал что такого быть не может, а вот, коллега столкнулся, релиз 8.3.25.1374.
В в контектсе веб-сервиса создается документ. Не работает элементарно ОбщегоНазначения.ЗначениеРеквизитаОбъекта() в типовом коде заполнения документа. Не работает потому что ЗначениеРеквизитаОбъекта() вызывает ЗначенияРеквизитовОбъектов(), которая возвращает соответствие, и ЗначениеРеквизитаОбъекта() не может в этом соответствии найти ссылку.
Кстати, ЗначениеВСтрокуВнутр() совпадают тоже.
19. SlavaKron 29.01.25 12:25 Сейчас в теме
(16) Я бы думал в сторону того, что сеанс http-сервиса - не совсем полноценный сеанс, там может быть не все параметры сеанса инициализированны. Возможно, это как-то связано с разделением данных, что опять же, в сторону сеанса.
9. Airlord 18.03.22 12:49 Сейчас в теме
И еще вопрос - как в переменную "Клиент" передаются данные? Может там словоблудие полное.
Если через ПолучитьОбъект(Чего_то_Там).Ссылка, то ошибка исключается.
15. user930087 18.03.22 13:42 Сейчас в теме
а если обратиться через . Ссылка?
17. 1cnik2 16 29.01.25 07:21 Сейчас в теме
Может дело в настройках веб-сервера? @pyrkin_vanya, удалось чтото накопать?
18. 1cnik2 16 29.01.25 07:25 Сейчас в теме
Кстати, @pyrkin_vanya, у вас там случайно не IIS выступал вебсервером?
20. pyrkin_vanya 497 29.01.25 17:16 Сейчас в теме
(18) сейчас уже не вспомню. Но вроде как о вопрос решил тогда. Да, iis был. Попробую поискать код
21. pyrkin_vanya 497 29.01.25 17:21 Сейчас в теме
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))

Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
    
    // этот код, почемуто иногда не срабатвыает. Какой то глюк.
    // https://forum.infostart.ru/forum9/topic278663/#message2800678
    // ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
    // решим переделать по сравнению уидов строк.
    
    // Старый код.
    //ПараметрыОтбора = Новый Структура;
    //ПараметрыОтбора.Вставить("Клиент", Клиент);
    //НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
    //
    //Возврат НайденныеСтроки.Количество() > 0;
    
    Доступен = Ложь;
    
    УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
    
    Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
        
        УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
        
        Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
            
            Доступен = Истина;
            Прервать;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Доступен;
    
КонецФункции
Показать
22. pyrkin_vanya 497 29.01.25 17:22 Сейчас в теме
(18) Помню только что этот вопрос закрылся и больше не всплывал.
23. 1cnik2 16 30.01.25 10:03 Сейчас в теме
(22) благодарю за ответы! @pyrkin_vanya
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот