Доброго всем дня, возникла следующая проблема, идёт разбор XML с помощью следующего кода:

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(АдресФайла);
    РезультатРазборки = Новый Массив;
    ТипПриходныйОрдерXDTO = ФабрикаXDTO.Тип("http://localhost/testXML","table");
    ПоказанияКан = 0;
    Пока ЧтениеXML.Прочитать() Цикл
    Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "messages" Цикл
    ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходныйОрдерXDTO);
    Если ДокументXDTO.count = "1" Тогда
    Если НЕ ДокументXDTO.message.Свойства().Получить("engine_temp") = Неопределено Тогда
    ПоказанияКан = ДокументXDTO.message.can_mileage;
    Если ПервоеСообщение Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Для каждого ТС Из ДокументXDTO.message Цикл
    Если НЕ ТС.Свойства().Получить("engine_temp") = Неопределено Тогда
    ПоказанияКан = ТС.can_mileage;
    Если ПервоеСообщение Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;

    КонецЦикла;

    возврат ПоказанияКан;
```

Получаем значение КАН из тега can_mileage, но иногда обработка цепляет can_mileage в отрицательном значении, вероятно из-за того что оно приходит из запроса первым, 3 недели бьюсь, не могу модифицировать для отсеивания отрицательных значений. Пример Данных из запроса XML в прикреплённом файле.
Заранее благодарю за любую помощь.
---
значит полученный xml не имеет результата и скорее всего с ошибкой(ошибка не в синтаксисе, а возврат ошибки). Проверьте входящий xml.
Конечно нужно от таких ситуаций проверять, что result есть.
---
нужно вернуть первое положительное значение can_mileage?

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(АдресФайла);
    ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    messages = ДокументXDTO.result.items.item.messages.message;
    Для Каждого message Из messages Цикл
    Если Число(message.can_mileage) > 0 Тогда
    Возврат message.can_mileage;
    КонецЕсли;
    КонецЦикла;
    Возврат 0;
```
---
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(АдресФайла);
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
messages = ДокументXDTO.result.items.item.messages.message;
Если messages.Количество() > 0 Тогда
 Для Каждого message Из messages Цикл
     Если Число(message.can_mileage) > 0 Тогда
   Возврат message.can_mileage;
  КонецЕсли;
 КонецЦикла;
КонецЕсли;
Возврат 0; Хм, а как его встроить в обработку, мне нужно чтобы ПоказанияКан = ДокументXDTO.message.can_mileage;
---
ПоказанияКан это тоже что и message.can_mileage в приведенном мной коде.
Я основывался на приведенный код в (0).
---
{Обработка.ЗагрузкаВиалон.МодульОбъекта(203)}: Поле объекта не обнаружено (result)
messages = ДокументXDTO.result.items.item.messages.message;

(12)
---
значит полученный xml не имеет результата и скорее всего с ошибкой(ошибка не в синтаксисе, а возврат ошибки). Проверьте входящий xml.
Конечно нужно от таких ситуаций проверять, что result есть.
---
если в (0) не полный код и нужно в него встроить, тогда так:

```1c
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(АдресФайла);
    РезультатРазборки = Новый Массив;
    ТипПриходныйОрдерXDTO = ФабрикаXDTO.Тип("http://localhost/testXML","table");
    ПоказанияКан = 0;
    Пока ЧтениеXML.Прочитать() Цикл
    Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "messages" Цикл
    ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходныйОрдерXDTO);
    Если ДокументXDTO.count = "1" Тогда
    Если НЕ ДокументXDTO.message.Свойства().Получить("engine_temp") = Неопределено И Число(ДокументXDTO.message.can_mileage) > 0 Тогда
    ПоказанияКан = ДокументXDTO.message.can_mileage;
    Если ПервоеСообщение Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Для каждого ТС Из ДокументXDTO.message Цикл
    Если НЕ ТС.Свойства().Получить("engine_temp") = Неопределено И Число(ДокументXDTO.message.can_mileage) > 0 Тогда
    ПоказанияКан = ТС.can_mileage;
    Если ПервоеСообщение Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;

    КонецЦикла;

    возврат ПоказанияКан;
```

Только учите, что can_mileage это строка. Для получения числа нужно приводить к числу.
---
Заработало, но всё равно берёт отрицательное значение.
---
значит помимо приведенного кода там еще что-то есть.
только по приведенному коду отрицательных чисел быть не должно
---
А елси попробовать перед обработкой почистить Xml от тегов с отрицательными значениями ? Может поможет ? И есть ли идеи как лучше это сделать ?
---
Что то ничего не понятно. В can_mileage у вас? Число? И когда оно отрицательное то?
---
В can_mileage число, показания одометра, если обработка захватывает его то в документ приходит отрицательный пробег.
---
и что нужно чтобы делать если там отрицательное значение?
---
Чтобы он искал следующее, уже положительное значение.
---
попробуйте так:

```1c
    Если НЕ ТС.Свойства().Получить("engine_temp") = Неопределено Тогда
    ПоказанияКан = ТС.Свойства().Получить("ТС.can_mileage");
    Если ПервоеСообщение Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
```
---
Преобразование значения к типу Число не может быть выполнено
---
а в отладчике ТС.Свойства() что показывает?
---
ДокументXDTO.message.can_mileage - число

(8)ТС.Свойства() ничего,
Самая большая проблема что обработку не я писал.