Имя: Пароль:
1C
1С v8
Сложная ситуация с пробельными символами в 1С.
0 maker1992
 
09.02.18
13:07
Здравствуйте.

Платформа 1С 8.3. Есть код, считывающий данные из Excel-файла.
В ячейке экселя данные - 67104848 (Числовой формат: общий).

Код в 1С:

СокрЛП(ОкноЕксел.Cells(Й, 2).Value));

Выдает результат: 67 104 848.
Но пробелы здесь не являются пробелами. Я сохранил эту строку в блокнот, открыл ХЕКС редактором - этот пробел имеет код а0 - LF - перенос строки.

Мне нужно убрать пробелы, как быть?
1 Малыш Джон
 
09.02.18
13:08
СтрЗаменить
2 Базис
 
naïve
09.02.18
13:08
НБСП или Симв(160) заменяй на "".
3 Lexey_
 
09.02.18
13:10
(0) зачем ХЕКС редактором, есть же КодСимвола()?
4 Rema Dan
 
09.02.18
13:10
(0) СокрЛП(Формат(ОкноЕксел.Cells(Й, 2).Value, "ЧН=; ЧГ="));
5 Ненавижу 1С
 
гуру
09.02.18
13:10
Формат(ОкноЕксел.Cells(Й, 2).Value, "ЧГ=0")
6 бомболюк
 
09.02.18
13:10
перенос строки - это 0x0a
7 maker1992
 
09.02.18
13:12
Сработало:

СтрЗаменить(СокрЛП(ОкноЕксел.Cells(Й, 2).Value), Символы.НПП, "")
8 Fram
 
09.02.18
13:13
(4) СокрЛП это контрольный в голову?
9 Ненавижу 1С
 
гуру
09.02.18
13:14
(0) особенно порадовала функция СокрЛП, примененная к числу
10 Rema Dan
 
09.02.18
13:17
(8) Вполне возможно, что этот же код применяется не только для строчек с числами, но и обычных строчек. Если убрать СокрЛП, то изменится разбор таких строчек.
11 maker1992
 
09.02.18
13:17
(8) Дак она сама приводит число к строке
12 mehfk
 
09.02.18
13:18
(9) Если трудностей нет, их нужно создать, а потом мужественно преодолеть.
13 Скиурус
 
09.02.18
13:26
ОкноЕксел.Cells(Й, 2).Value может приводиться к разным типам (формат ячейки Экселя никак на это свойство не влияет, формат влияет только на отображение в самом Экселе). Это механизм маршаллинга, заложенный в платформе COM, от 1С он никак не зависит. Обычно значения ячеек Экселя приводятся к строке, но могут и к числу. На это может влиять то, что записано в этом столбце в нескольких верхних ячейках.

В данном случае, кстати, значение привелось именно к числу, что мы увидим дальше.

Функция СокрЛП всегда возращает строку, она приводит свой аргумент к строке (такое преобразование в языке 1С определено для любого типа данных). При этом число к строке приводится с учетом разделителя разрядов. В 1С для этого используется символ неразрывного пробела, который отбивает группы по 3 цифры, что ты и наблюдаешь.

Если нужно получить строковое представление числа, то в 1С есть функция формат(). Ее использовать логически правильнее, чем СтрЗаменить Символы.НПП.

Перед отображением чего-либо нестрокового пользователю в 1С обычно используют формат, в котором задают настройки и для числа и для даты и для булевых переменных.

К чему я эту простыню накатал? А х.з., наверное для того, чтобы показать, что в 1С ситуация с пробельными символами вполне нормальная. Примерно такая же, как во всей Вселенной.
14 maker1992
 
09.02.18
13:28
(13) Понял. Спасибо.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.