К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Некорректное преобразование строки в число при импорте их Excel

Гость
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
Цитата:
Сообщение от user1C Посмотреть сообщение
пример Сообщить("Длина: "+ ЗначЯч + "/" + Длина) когда Длина = 0 в студию...
Я отправил файл с описанной ошибкой. http://my-files.ru/fsxerw
Гость
4 - 08.11.2016 - 14:07
Цитата:
Сообщение от Skeave Посмотреть сообщение
http://my-files.ru/fsxerw xls-файл с описанной ошибкой. Колонка Длина
Если колонку длина заполнить вручную или скопировав значения из колонки Ширина, ошибка пропадает.

Разве не чудеса?
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
Цитата:
Сообщение от user1C Посмотреть сообщение
(2,3) копипаст из окна сообщений сюда...
Длина: 25/25
Длина: 608 /608
Длина:  540/0
Длина:  960/0

Первые две строчки - это я вписал значения вручную. Они, как я и рассказывал сразу, преобразуются корректно
9 - 08.11.2016 - 14:24
Длина: 960/0 - между ":" и "960" - Два пробела
Гость
10 - 08.11.2016 - 14:28
Цитата:
Сообщение от user1C Посмотреть сообщение
(2,3) копипаст из окна сообщений сюда...
Вот, что я сделал. Обработка с текстом и результатом, в котором хотелось бы разобраться. Откройте в обработке xls файл, ссылку на котрый я дал выше, и убедитесь в справедливости того, про что я рассказал

http://my-files.ru/7iq8la
Гость
11 - 08.11.2016 - 14:31
Цитата:
Сообщение от Begemot Посмотреть сообщение
Длина: 960/0 - между ":" и "960" - Два пробела
Откуда там могут взяться пробелы, когда используется СокрЛП?
Один пробел. Потому что - Сообщить("Длина: "+ ЗначЯч + "/" + Длина);
12 - 08.11.2016 - 14:39
СокрЛП(Ячейка.Text) = " 719"
Число(СтрЗаменить(ЗначЯч,Симв(160),"")) = 719

ЗначЯч = " 719"
13 - 08.11.2016 - 14:40
Цитата:
Сообщение от Skeave Посмотреть сообщение
Откуда там могут взяться пробелы, когда используется СокрЛП
СокрЛП(Ячейка.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
Цитата:
Сообщение от VZ Посмотреть сообщение
(0) Открой для себя .value
Value первоначально и было. Посоветовали попробовать Text. С Value та же ошибка
Гость
17 - 08.11.2016 - 14:48
Цитата:
Сообщение от user1C Посмотреть сообщение
(11) оттуда... формируйте xls прально и все будет корректно там в xls везде идет неразрывный пробел перед числами (код 160)

Что значит формируйте ПРАВИЛЬНО? И что за "неразрывный пробел"? Разве СокрЛП() не должен убирать всякого рода пробелы?
18 - 08.11.2016 - 14:51
Цитата:
Сообщение от Skeave Посмотреть сообщение
И что за "неразрывный пробел"?
https://yandex.ru/yandsearch?&clid=2...D0%BB%22&lr=39

Цитата:
Сообщение от Skeave Посмотреть сообщение
Разве СокрЛП() не должен убирать всякого рода пробелы?
Уже ж на пальцах показали.
19 - 08.11.2016 - 14:53
(17)
"Разве СокрЛП() не должен убирать всякого рода пробелы?"
Нет
для затравочки:
...
стр = "_";
Для к=1 По СтрДлина(ЗначЯч) Цикл
стр = стр + КодСимв(Сред(ЗначЯч,к,1)) + "_";
КонецЦикла;
Сообщить("Длина: "+ ЗначЯч + "/" + Длина+" коды "+стр);
дальше в жкк и гугель...
Гость
20 - 08.11.2016 - 15:02
Цитата:
Сообщение от user1C Посмотреть сообщение
(17) "Разве СокрЛП() не должен убирать всякого рода пробелы?" Нет для затравочки: ... стр = "_"; Для к=1 По СтрДлина(ЗначЯч) Цикл стр = стр + КодСимв(Сред(ЗначЯч,к,1)) + "_"; КонецЦикла; Сообщить("Длина: "+ ЗначЯч + "/" + Длина+" коды "+стр); дальше в жкк и гугель...

Воспользовался советом Число(СтрЗаменить(ЗначЯч,Симв(160),""))

А почему и при использовании в Excel формата ячеек Числовой, то же этот самый "неразрывный пробел" себя проявлял? Пробел - это разве не аттрибут тектсового представления?
21 - 08.11.2016 - 15:03
Сокрлп например прекрасно убирает разделитель строк по концам строки
Гость
22 - 08.11.2016 - 15:11
господя... желтая страна этих самых
валюе + локализация + разделитель тысяч + точность на экране...
Гость
23 - 08.11.2016 - 15:12
Цитата:
Сообщение от Helen1986 Посмотреть сообщение
господя... желтая страна этих самых валюе + локализация + разделитель тысяч + точность на экране...
не ругайтесь, пишите понятно. 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
Цитата:
Сообщение от VZ Посмотреть сообщение
23-Skeave > Если какой-то болван загнал в ячейку заместо числа текст, визуально не отличимый от отображения числа, то при чем здесь "1С"? Та же самая беда приключится, если будешь читать не 1С, а, к примеру, WSH.
СокрЛП() - убирает пробелы спереди и сзади значения. Согласно документации 1С. Для того эта функция и предназначена. Чтоб использовать ее в случаях "визуально не отличимых..". То, что она убирает не все пробелы, а только их часть - конечно, это ошибка 1С.
Гость
30 - 08.11.2016 - 15:38
29-Skeave > Во-первых, СокрЛП убирает только первые и оконечные пробелы.
Во-вторых, не трогает пробелы внутри текста.
И наконец, разделитель триад - не пробел.
Гость
31 - 08.11.2016 - 15:40
Цитата:
Сообщение от VZ Посмотреть сообщение
СокрЛП убирает только первые и оконечные пробел
Так ведь речь и идет именно о первых и последних пробелах.
Разделитель триад - т.н. "неразрывный пробел" - это все-таки пробел, как следует из его названия. И здесь - никаких триад никто не делил.
Гость
32 - 08.11.2016 - 15:42
Кстати. Как думаете, как пользователи вообще умудрились использовать эти самые "неразрывные.."? "Shift+пробел" нужно специально нажать, чтоб получилась эта фигня. Вряд ли в обсуждаемом случае можно вести речь о сознательной злонамеренности. Непонятно. Как эти пробелы могли получиться "случайно"?
33 - 08.11.2016 - 15:45
(32)
например, копипастом с сайта... там этисамые &nbsp часто обитают))
Гость
34 - 08.11.2016 - 16:05
32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО).
И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется.
Но разрешен для особо упёртых: легче дать, чем отговорить.
P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя.
Гость
35 - 08.11.2016 - 16:23
Цитата:
Сообщение от VZ Посмотреть сообщение
32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя.
А кто говорит, что это одинаковые символы? Вы продолжаете спорить сам с собой. Конечно, разные. Но и то и другое - пробелы. Которые, согласно документации, должны удалятся функцией СокрЛП(). Поскольку конкретизации "такие то пробелы удаляются, а такие то нет" в этой самой документации нет. Почитайте сами. Ctrl+F1. Либо в более полной, чем хелп программы, документации. Нигде не сказано, что есть разновидность пробелов, которые не удаляются.
Гость
36 - 08.11.2016 - 16:25
Цитата:
Сообщение от VZ Посмотреть сообщение
32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя.
Это бланк загрузки в документ Реализация заказываемых товаров и их размеров. Заполняемый менеджерами компании покупателя. Вряд ли "с сайта"
Гость
37 - 08.11.2016 - 16:34
называйте не пробелом, а просто невидимым символом ) что тут спорить, такие символы встречаются и надо просто это принять как снег, дождь, солнце
Гость
38 - 08.11.2016 - 17:06
Цитата:
Сообщение от Skeave Посмотреть сообщение
Это бланк загрузки в документ Реализация заказываемых товаров и их размеров. Заполняемый менеджерами компании покупателя.
1С 7.7 "не понимает" некоторые дурацкие символы. Например, пресловутый "длинный дефис", который так нужен был банкам в извещении о взносе наличных.
И этот твой дурацкий неразрывный пробел тоже.
Можно "очищать" текст поиском первого символа-цифры,
Пока СтрДлина(ЗначЯч)>0 Цикл
Если Найти(Лев(ЗначЯч,1),"0123456789")=0 Тогда
ЗначЯч=Сред(ЗначЯч,2);
Иначе
Длина=0+ЗначЯч;
Прервать;
КонецЕсли;
КонецЦикла;
или удалением конкретного символа
ЗначЯч=СтрЗаменить(ЗначЯч,Симв(160),"");
, но лучше - найти паразита, который в настройках Excel установил этот символ в качестве разделителя триад и прибить ...
Гость
39 - 08.11.2016 - 17:27
Да о чем разговор... Аффтар еще с датами не сталкивался ;)
Все, кто связывался с "обменом 1С с Excel-ем" отлично знают о ненадежности этой связки. Усугубленной тем, что ввод в Excel осуществляется ручками. Без каких-либо формальных соглашений. Где вместо нулевого значения вполне можно словить знак <-> ("прочерк" по мнению барышни).
Короче говоря, "обмен 1С с Excel" неизбежно обрастает кучей вспомогательных функций типа ОпределитьТипЗначения(выражение), ПривестиИзПредставленияКНормальномуВиду() и т.п.


К списку вопросов






Copyright ©, Все права защищены