Имя: Пароль:
1C
 
Преобразование к типу число не может быть выполнено
,
0 VenSaitto
 
15.06.19
11:21
Всем привет. Платформа 8.3.10.2650
Есть список значений Рез
http://priscree.ru/img/daa17fa6d8b8e2.png
При попытке привести значение к типу число
Число(Рез[0].Значение) вываливается ошибка, невозможно привести к типу число
http://priscree.ru/img/e46286bf35cc36.png
проверяю, Рез[0].Значение = " 1 ", все ок.
http://priscree.ru/img/006b96762968be.png
Число(" 1 ") - так же отрабатывает нормально.
http://priscree.ru/img/a45917b4a6a290.png
Как только Число(Рез[0].Значение) - то ошибка.
Все проверки производил в один момент в отладчике при остановке.
С чем это может быть связано?
Почему не работает?
1 vde69
 
15.06.19
11:26
попытка
а = Число(СокрЛП(Рез[0].Значение))
Исключение
а = 0
КонецПопытки
2 vde69
 
15.06.19
11:29
(1) подсказываю, у тебя пробелы мешают
3 VenSaitto
 
15.06.19
11:30
(1) Это не дает ответ, Рез[0].Значение = " 1 ", почему валится при попытке привести к числу?
Пробелы тоже не причем, ведь Число(" 1 "), спокойно отрабатывает
4 shuhard
 
15.06.19
11:38
(3) переменная совпала по имени с реквизитом
5 VenSaitto
 
15.06.19
11:43
(4) К сожалению, исключено)
6 shuhard
 
15.06.19
11:45
(5) реальный код покажи, нам табло не интересно
7 Фрэнки
 
15.06.19
11:49
мне похожее где-то попадалось. Приходилось ставить явные типы. Проблема в том, что в Число может преобразоваться тип Строка.
А вот остальные типы не проверял. Но в значении из списка значений не установлен явным образом тип Строка.
В этом случае гораздо удобней Список значений заменить на Структура или Массив.

Работать будет или Число(СокрЛП(Рез[0].Значение)) или Число(Строка(Рез[0].Значение))
8 VenSaitto
 
15.06.19
11:52
(7) Не то, не то не отрабатывает.
В список значений, данные попадают из файла.
Как то кодировка файла может влиять на данное дело?
Вот пример, где видно, что Рез[0].Значение отличается по внешнему виду и от " 1 " и от "  1  "
http://priscree.ru/img/e4628502699179.png
9 Фрэнки
 
15.06.19
11:57
Ну коды символов тогда попробуй посмотреть
10 shuhard
 
15.06.19
11:59
(8) что-то мешает убрать пробелы СокрЛП ?
11 VenSaitto
 
15.06.19
12:02
(10) могут попадаться значения типа " 1 2 3 " , СокрЛП не решит проблему
12 vde69
 
15.06.19
12:04
(11) а это  какое значение? неужели 123?
13 vde69
 
15.06.19
12:05
судя по всему у тебя юникод (16 байт на 1 символ)
14 VenSaitto
 
15.06.19
12:05
(9) КодСимвола(Лев(Рез[0].Значение,1))  = 0, когда КодСимвола(" ")
Походу, что кривой пробел, спасибо. Странно, но код работал уже много времени и в один прекрасный момент работать перестал
15 VenSaitto
 
15.06.19
12:05
(12) да, 123
16 VenSaitto
 
15.06.19
12:06
(14) когда КодСимвола(" ") = 32
17 Фрэнки
 
15.06.19
12:09
пробелы из таких строк убирают через СтрЗаменить

з.ы. Но в платформах сейчас какая-то путаница в справке синтакс-помощника на эту функцию
18 vde69
 
15.06.19
12:17
(14) это не пробел кривой, это юникод... читай (13), поставь правильную кодировку при чтении файла и все будет хорошо
19 vde69
 
15.06.19
12:18
20 VenSaitto
 
15.06.19
12:51
(18) ЧтениеТекста(ИмяФайлаРезультата, КодировкаТекста.ANSI) или UTF все равно кодсимвола остается 0, и дальше та же проблема. Как правильно прочитать, чтобы пробел код символа 0 преобразовался в 32?
21 shuhard
 
15.06.19
12:56
(20) выложи кусок файла, без него отсутствует предмет обсуждения
22 xXeNoNx
 
15.06.19
13:00
(1) костыль-style?
23 VenSaitto
 
15.06.19
13:00
24 VenSaitto
 
15.06.19
13:03
Можно конечно так,
Число(СтрЗаменить(Рез[0].Значение,Символ(0),Символ(32)))
Но, есть ли более правильное решение?)
25 vde69
 
15.06.19
13:29
Число(СтрЗаменить(Рез[0].Значение,Символ(0),""))
26 vde69
 
15.06.19
13:31