Всем привет. Есть http-сервис. Некорректно отрабатывает простой код.
Две одинаковые ссылки на один и тот же элемент справочника. И они не равны. В чем прикол?
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Доступен = Ложь;
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
Если ТекущаяСтрока.Клиент = Клиент Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
ПоказатьДве одинаковые ссылки на один и тот же элемент справочника. И они не равны. В чем прикол?
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Прикрепленные файлы:
По теме из базы знаний
- Сравнение любых данных между базами 1С по реквизитам
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- Универсальный обмен данными XML 8.2 и 8.3 (дополненный)
- Неудачный эксперимент переделки типового Версионирования объектов из XML в JSON
- Наконец-то игры на 1С! О новом подходе к интерфейсу
Найденные решения
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))
Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
// этот код, почемуто иногда не срабатвыает. Какой то глюк.
//
// ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
// решим переделать по сравнению уидов строк.
// Старый код.
//ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("Клиент", Клиент);
//НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
//
//Возврат НайденныеСтроки.Количество() > 0;
Доступен = Ложь;
УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
КонецФункции ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Если не удастся решить проблему подбором платформы, то можно попытаться обойти ее - например, сравнивать не ссылки, а уникальные идентификаторы, желательно преобразовать их в строку.
В-общем, сравнивать простые типы данных, а не агрегатные.
Вопрос решается перезапуском службы веб сервера. Но спустя 3-4 подключения, начинается опять.
Значит, код правильный (срабатывает), а глючит платформа.
Если не удастся решить проблему подбором платформы, то можно попытаться обойти ее - например, сравнивать не ссылки, а уникальные идентификаторы, желательно преобразовать их в строку.
В-общем, сравнивать простые типы данных, а не агрегатные.
Добрый день! А почему не обращаетесь через ссылку?
Не всегда видится то, что видится.
ТекущаяСтрока.Клиент.Ссылка = Клиент.Ссылка
Не всегда видится то, что видится.
(8) Забавно, думал что такого быть не может, а вот, коллега столкнулся, релиз 8.3.25.1374.
В в контектсе веб-сервиса создается документ. Не работает элементарно ОбщегоНазначения.ЗначениеРеквизитаОбъекта() в типовом коде заполнения документа. Не работает потому что ЗначениеРеквизитаОбъекта() вызывает ЗначенияРеквизитовОбъектов(), которая возвращает соответствие, и ЗначениеРеквизитаОбъекта() не может в этом соответствии найти ссылку.
Кстати, ЗначениеВСтрокуВнутр() совпадают тоже.
В в контектсе веб-сервиса создается документ. Не работает элементарно ОбщегоНазначения.ЗначениеРеквизитаОбъекта() в типовом коде заполнения документа. Не работает потому что ЗначениеРеквизитаОбъекта() вызывает ЗначенияРеквизитовОбъектов(), которая возвращает соответствие, и ЗначениеРеквизитаОбъекта() не может в этом соответствии найти ссылку.
Кстати, ЗначениеВСтрокуВнутр() совпадают тоже.
(16) Я бы думал в сторону того, что сеанс http-сервиса - не совсем полноценный сеанс, там может быть не все параметры сеанса инициализированны. Возможно, это как-то связано с разделением данных, что опять же, в сторону сеанса.
И еще вопрос - как в переменную "Клиент" передаются данные? Может там словоблудие полное.
Если через ПолучитьОбъект(Чего_то_Там).Ссылка, то ошибка исключается.
Если через ПолучитьОбъект(Чего_то_Там).Ссылка, то ошибка исключается.
(18) ахахах. Я даже комментарий оставил со ссылкой на инфостарт)))
Функция КлиентДоступенПользователюЛичногоКабинета(ПользовательЛичногоКабинета, мКлиент)
// этот код, почемуто иногда не срабатвыает. Какой то глюк.
//
// ссылка иногла не равна ссылке. Приходится перезапускать службу веб сервера.
// решим переделать по сравнению уидов строк.
// Старый код.
//ПараметрыОтбора = Новый Структура;
//ПараметрыОтбора.Вставить("Клиент", Клиент);
//НайденныеСтроки = ПользовательЛичногоКабинета.Клиенты.НайтиСтроки(ПараметрыОтбора);
//
//Возврат НайденныеСтроки.Количество() > 0;
Доступен = Ложь;
УИДКлиентаСтрока = Строка(мКлиент.УникальныйИдентификатор());
Для каждого ТекущаяСтрока Из ПользовательЛичногоКабинета.Клиенты Цикл
УИДКлиентаБазыСтрока = Строка(ТекущаяСтрока.Клиент.УникальныйИдентификатор());
Если ВРег(УИДКлиентаБазыСтрока) = ВРег(УИДКлиентаСтрока) Тогда
Доступен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Доступен;
КонецФункции Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот