Всем привет. Есть http-сервис. Некорректно отрабатывает простой код.
Доступен = Ложь;
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
Если ТекущаяСтрока.Клиент = Клиент Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
Показать
Две одинаковые ссылки на один и тот же элемент справочника. И они не равны. В чем прикол?
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))
Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
// этот код, почемуто иногда не срабатвыает. Какой то глюк.
// https://forum.infostart.ru/forum9/topic278663/#message2800678
// ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
// решим переделать по сравнению уидов строк.
// Старый код.
//ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("Клиент", Клиент);
//НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
//
//Возврат НайденныеСтроки.Количество() > 0;
Доступен = Ложь;
УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
КонецФункции
(11)Можно предложить попробовать на другой версии платформы.
Еще можно предложить написать на линию консультации и на партнерский форум, если есть доступ.
(13)Этот код выполняет HTTP-сервис. И желательно написать так, чтобы не привязываться к версиям и ошибкам платформы. )) Понимаю, что тяжело. )))) Если ошибка будет повторяться, то буду эксперементировать)) Спасибо.
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Значит, код правильный (срабатывает), а глючит платформа.
Если не удастся решить проблему подбором платформы, то можно попытаться обойти ее - например, сравнивать не ссылки, а уникальные идентификаторы, желательно преобразовать их в строку.
В-общем, сравнивать простые типы данных, а не агрегатные.
(8) Забавно, думал что такого быть не может, а вот, коллега столкнулся, релиз 8.3.25.1374.
В в контектсе веб-сервиса создается документ. Не работает элементарно ОбщегоНазначения.ЗначениеРеквизитаОбъекта() в типовом коде заполнения документа. Не работает потому что ЗначениеРеквизитаОбъекта() вызывает ЗначенияРеквизитовОбъектов(), которая возвращает соответствие, и ЗначениеРеквизитаОбъекта() не может в этом соответствии найти ссылку.
Кстати, ЗначениеВСтрокуВнутр() совпадают тоже.
(16) Я бы думал в сторону того, что сеанс http-сервиса - не совсем полноценный сеанс, там может быть не все параметры сеанса инициализированны. Возможно, это как-то связано с разделением данных, что опять же, в сторону сеанса.
И еще вопрос - как в переменную "Клиент" передаются данные? Может там словоблудие полное.
Если через ПолучитьОбъект(Чего_то_Там).Ссылка, то ошибка исключается.
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))
Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
// этот код, почемуто иногда не срабатвыает. Какой то глюк.
// https://forum.infostart.ru/forum9/topic278663/#message2800678
// ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
// решим переделать по сравнению уидов строк.
// Старый код.
//ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("Клиент", Клиент);
//НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
//
//Возврат НайденныеСтроки.Количество() > 0;
Доступен = Ложь;
УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
КонецФункции