Регистрация Правила Главная форума Поиск |
0
- 08.11.2016 - 13:47
|
Некорректное преобразование строки в число при импорте из Excel Ячейка = ВходExcel.Cells(НомерСтр, 5); ЗначЯч= "" + СокрЛП(Ячейка.Text);//длина Длина=Число(ЗначЯч); Сообщить("Длина: "+ ЗначЯч + "/" + Длина); ЗначЯч - число в текстовом формате, в 1С передается Длина - переменная, в которую передается преобразованное явным образом из текстового формата число, иногда оказывается равным 0 (Иногда - то есть обычно все работает корректно. Но иногда - описываемый случай. Не понятно) | | |
1
- 08.11.2016 - 14:04
| пример Сообщить("Длина: "+ ЗначЯч + "/" + Длина) когда Длина = 0 в студию... | | |
2
- 08.11.2016 - 14:05
| http://my-files.ru/fsxerw xls-файл с описанной ошибкой. Колонка Длина | | |
3
- 08.11.2016 - 14:06
| Цитата:
| | |
4
- 08.11.2016 - 14:07
| Цитата:
Разве не чудеса? | | |
5
- 08.11.2016 - 14:09
| В числе есть символ(160)? | | |
6
- 08.11.2016 - 14:11
| поставь точку останова в Длина=Число(ЗначЯч); и внимательно посмотри на ЗначЯч. м.б. оно выглядит как "1 200" | | |
7
- 08.11.2016 - 14:15
|
(2,3) копипаст из окна сообщений сюда... | | |
8
- 08.11.2016 - 14:18
| Длина: 25/25 Длина: 608 /608 Длина: 540/0 Длина: 960/0 Первые две строчки - это я вписал значения вручную. Они, как я и рассказывал сразу, преобразуются корректно | | |
9
- 08.11.2016 - 14:24
| Длина: 960/0 - между ":" и "960" - Два пробела | | |
10
- 08.11.2016 - 14:28
| Вот, что я сделал. Обработка с текстом и результатом, в котором хотелось бы разобраться. Откройте в обработке xls файл, ссылку на котрый я дал выше, и убедитесь в справедливости того, про что я рассказал http://my-files.ru/7iq8la | | |
11
- 08.11.2016 - 14:31
| Откуда там могут взяться пробелы, когда используется СокрЛП? Один пробел. Потому что - Сообщить("Длина: "+ ЗначЯч + "/" + Длина); | | |
12
- 08.11.2016 - 14:39
|
СокрЛП(Ячейка.Text) = " 719" Число(СтрЗаменить(ЗначЯч,Симв(160),"")) = 719 ЗначЯч = " 719" | | |
13
- 08.11.2016 - 14:40
| СокрЛП(Ячейка.Text) = " 719" Что видно между первой скобкой и цифрой 7???? Пробелы бывают разные. Делай как в 12. Отредактировано GariPortman; 08.11.2016 в 14:42. Причина: .... | | |
14
- 08.11.2016 - 14:43
| (0) Открой для себя .value | | |
15
- 08.11.2016 - 14:44
|
(11) оттуда... формируйте xls прально и все будет корректно там в xls везде идет неразрывный пробел перед числами (код 160) | | |
16
- 08.11.2016 - 14:46
| Value первоначально и было. Посоветовали попробовать Text. С Value та же ошибка | | |
17
- 08.11.2016 - 14:48
| Цитата:
Что значит формируйте ПРАВИЛЬНО? И что за "неразрывный пробел"? Разве СокрЛП() не должен убирать всякого рода пробелы? | | |
18
- 08.11.2016 - 14:51
| https://yandex.ru/yandsearch?&clid=2...D0%BB%22&lr=39 Уже ж на пальцах показали. | | |
19
- 08.11.2016 - 14:53
|
(17) "Разве СокрЛП() не должен убирать всякого рода пробелы?" Нет для затравочки: ... стр = "_"; Для к=1 По СтрДлина(ЗначЯч) Цикл стр = стр + КодСимв(Сред(ЗначЯч,к,1)) + "_"; КонецЦикла; Сообщить("Длина: "+ ЗначЯч + "/" + Длина+" коды "+стр); дальше в жкк и гугель... | | |
20
- 08.11.2016 - 15:02
| Цитата:
Воспользовался советом Число(СтрЗаменить(ЗначЯч,Симв(160),"")) А почему и при использовании в Excel формата ячеек Числовой, то же этот самый "неразрывный пробел" себя проявлял? Пробел - это разве не аттрибут тектсового представления? | | |
21
- 08.11.2016 - 15:03
| Сокрлп например прекрасно убирает разделитель строк по концам строки | | |
22
- 08.11.2016 - 15:11
|
господя... желтая страна этих самых валюе + локализация + разделитель тысяч + точность на экране... | | |
23
- 08.11.2016 - 15:12
| не ругайтесь, пишите понятно. value - приводило к той же самой ошибке, что и text | | |
24
- 08.11.2016 - 15:14
| О чем вы? СокрЛП я использовал и этого оказывалось недостаточно | | |
25
- 08.11.2016 - 15:21
|
22-Helen1986 > Разделитель триад, прошу прощение за занудство ;) А про "локализацию" -вовремя. Тут (сабж) в чем непонимание: в механизме обмена через СОМ-соединение. И в том, что это соединение вовсе не обязано знать о тонкостях внутренних форматов разных утилит. И о цвете страны тоже ;) | | |
26
- 08.11.2016 - 15:23
| (25) совершенно верно, разделитель не тысяч, а триад | | |
27
- 08.11.2016 - 15:27
| 23-Skeave > Если какой-то болван загнал в ячейку заместо числа текст, визуально не отличимый от отображения числа, то при чем здесь "1С"? Та же самая беда приключится, если будешь читать не 1С, а, к примеру, WSH. | | |
28
- 08.11.2016 - 15:31
|
(20) формат ячеек эхеля это аля функция формат() одноэса - представление значения... если образно) | | |
29
- 08.11.2016 - 15:32
| СокрЛП() - убирает пробелы спереди и сзади значения. Согласно документации 1С. Для того эта функция и предназначена. Чтоб использовать ее в случаях "визуально не отличимых..". То, что она убирает не все пробелы, а только их часть - конечно, это ошибка 1С. | | |
30
- 08.11.2016 - 15:38
|
29-Skeave > Во-первых, СокрЛП убирает только первые и оконечные пробелы. Во-вторых, не трогает пробелы внутри текста. И наконец, разделитель триад - не пробел. | | |
31
- 08.11.2016 - 15:40
| Так ведь речь и идет именно о первых и последних пробелах. Разделитель триад - т.н. "неразрывный пробел" - это все-таки пробел, как следует из его названия. И здесь - никаких триад никто не делил. | | |
32
- 08.11.2016 - 15:42
| Кстати. Как думаете, как пользователи вообще умудрились использовать эти самые "неразрывные.."? "Shift+пробел" нужно специально нажать, чтоб получилась эта фигня. Вряд ли в обсуждаемом случае можно вести речь о сознательной злонамеренности. Непонятно. Как эти пробелы могли получиться "случайно"? | | |
33
- 08.11.2016 - 15:45
|
(32) например, копипастом с сайта... там этисамые   часто обитают)) | | |
34
- 08.11.2016 - 16:05
|
32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя. | | |
35
- 08.11.2016 - 16:23
| Цитата:
| | |
36
- 08.11.2016 - 16:25
| Цитата:
| | |
37
- 08.11.2016 - 16:34
| называйте не пробелом, а просто невидимым символом ) что тут спорить, такие символы встречаются и надо просто это принять как снег, дождь, солнце | | |
38
- 08.11.2016 - 17:06
| Цитата:
И этот твой дурацкий неразрывный пробел тоже. Можно "очищать" текст поиском первого символа-цифры, Пока СтрДлина(ЗначЯч)>0 Цикл Если Найти(Лев(ЗначЯч,1),"0123456789")=0 Тогда ЗначЯч=Сред(ЗначЯч,2); Иначе Длина=0+ЗначЯч; Прервать; КонецЕсли; КонецЦикла; или удалением конкретного символа ЗначЯч=СтрЗаменить(ЗначЯч,Симв(160),""); , но лучше - найти паразита, который в настройках Excel установил этот символ в качестве разделителя триад и прибить ... | | |
39
- 08.11.2016 - 17:27
|
Да о чем разговор... Аффтар еще с датами не сталкивался ;) Все, кто связывался с "обменом 1С с Excel-ем" отлично знают о ненадежности этой связки. Усугубленной тем, что ввод в Excel осуществляется ручками. Без каких-либо формальных соглашений. Где вместо нулевого значения вполне можно словить знак <-> ("прочерк" по мнению барышни). Короче говоря, "обмен 1С с Excel" неизбежно обрастает кучей вспомогательных функций типа ОпределитьТипЗначения(выражение), ПривестиИзПредставленияКНормальномуВиду() и т.п. | |
| Интернет-форум Краснодарского края и Краснодара |