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

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 18 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 18 29.01.25 07:21 Сейчас в теме
Может дело в настройках веб-сервера? @pyrkin_vanya, удалось чтото накопать?
18. 1cnik2 18 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 18 30.01.25 10:03 Сейчас в теме
(22) благодарю за ответы! @pyrkin_vanya
Оставьте свое сообщение

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