![]() | [1] [2] |
Некорректное преобразование строки в число при импорте их Excel Некорректное преобразование строки в число при импорте из Excel Ячейка = ВходExcel.Cells(НомерСтр, 5); ЗначЯч= "" + СокрЛП(Ячейка.Text);//длина Длина=Число(ЗначЯч); Сообщить("Длина: "+ ЗначЯч + "/" + Длина); ЗначЯч - число в текстовом формате, в 1С передается Длина - переменная, в которую передается преобразованное явным образом из текстового формата число, иногда оказывается равным 0 (Иногда - то есть обычно все работает корректно. Но иногда - описываемый случай. Не понятно) |
пример Сообщить("Длина: "+ ЗначЯч + "/" + Длина) когда Длина = 0 в студию... |
[url]http://my-files.ru/fsxerw[/url] xls-файл с описанной ошибкой. Колонка Длина |
[quote=user1C;43196596] пример Сообщить("Длина: "+ ЗначЯч + "/" + Длина) когда Длина = 0 в студию... [/quote] Я отправил файл с описанной ошибкой. [url]http://my-files.ru/fsxerw[/url] |
[quote=Skeave;43196614] [url]http://my-files.ru/fsxerw[/url] xls-файл с описанной ошибкой. Колонка Длина [/quote] Если колонку длина заполнить вручную или скопировав значения из колонки Ширина, ошибка пропадает. Разве не чудеса? |
В числе есть символ(160)? |
поставь точку останова в Длина=Число(ЗначЯч); и внимательно посмотри на ЗначЯч. м.б. оно выглядит как "1 200" |
(2,3) копипаст из окна сообщений сюда... |
[quote=user1C;43196700] (2,3) копипаст из окна сообщений сюда... [/quote] Длина: 25/25 Длина: 608 /608 Длина: 540/0 Длина: 960/0 Первые две строчки - это я вписал значения вручную. Они, как я и рассказывал сразу, преобразуются корректно |
Длина: 960/0 - между ":" и "960" - Два пробела |
[quote=user1C;43196700] (2,3) копипаст из окна сообщений сюда... [/quote] Вот, что я сделал. Обработка с текстом и результатом, в котором хотелось бы разобраться. Откройте в обработке xls файл, ссылку на котрый я дал выше, и убедитесь в справедливости того, про что я рассказал [url]http://my-files.ru/7iq8la[/url] |
[quote=Begemot;43196777] Длина: 960/0 - между ":" и "960" - Два пробела [/quote] Откуда там могут взяться пробелы, когда используется СокрЛП? Один пробел. Потому что - Сообщить("Длина: "+ ЗначЯч + "/" + Длина); |
СокрЛП(Ячейка.Text) = " 719" Число(СтрЗаменить(ЗначЯч,Симв(160),"")) = 719 ЗначЯч = " 719" |
[quote=Skeave;43196826]Откуда там могут взяться пробелы, когда используется СокрЛП[/quote] СокрЛП(Ячейка.Text) = " 719" Что видно между первой скобкой и цифрой 7???? Пробелы бывают разные. Делай как в 12. |
(0) Открой для себя [b].value[/b] |
(11) оттуда... формируйте xls прально и все будет корректно там в xls везде идет неразрывный пробел перед числами (код 160) |
[quote=VZ;43196897] (0) Открой для себя .value [/quote] Value первоначально и было. Посоветовали попробовать Text. С Value та же ошибка |
[quote=user1C;43196903] (11) оттуда... формируйте xls прально и все будет корректно там в xls везде идет неразрывный пробел перед числами (код 160) [/quote] Что значит формируйте ПРАВИЛЬНО? И что за "неразрывный пробел"? Разве СокрЛП() не должен убирать всякого рода пробелы? |
[quote=Skeave;43196934]И что за "неразрывный пробел"? [/quote] [url]https://yandex.ru/yandsearch?&clid=2186623&text=%22%D0%BD%D0%B5%D1%80%D0%B0%D0%B7%D1%80%D1%8B%D0%B2%D0%BD%D1%8B%D0%B9%20%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%22&lr=39[/url] [quote=Skeave;43196934] Разве СокрЛП() не должен убирать всякого рода пробелы? [/quote] Уже ж на пальцах показали. |
(17) "[em]Разве СокрЛП() не должен убирать всякого рода пробелы?[/em]" Нет для затравочки: ... стр = "_"; Для к=1 По СтрДлина(ЗначЯч) Цикл стр = стр + КодСимв(Сред(ЗначЯч,к,1)) + "_"; КонецЦикла; Сообщить("Длина: "+ ЗначЯч + "/" + Длина+" коды "+стр); дальше в жкк и гугель... |
[quote=user1C;43196968] (17) "Разве СокрЛП() не должен убирать всякого рода пробелы?" Нет для затравочки: ... стр = "_"; Для к=1 По СтрДлина(ЗначЯч) Цикл стр = стр + КодСимв(Сред(ЗначЯч,к,1)) + "_"; КонецЦикла; Сообщить("Длина: "+ ЗначЯч + "/" + Длина+" коды "+стр); дальше в жкк и гугель... [/quote] Воспользовался советом Число(СтрЗаменить(ЗначЯч,Симв(160),"")) А почему и при использовании в Excel формата ячеек Числовой, то же этот самый "неразрывный пробел" себя проявлял? Пробел - это разве не аттрибут тектсового представления? |
Сокрлп например прекрасно убирает разделитель строк по концам строки |
господя... желтая страна этих самых валюе + локализация + разделитель тысяч + точность на экране... |
[quote=Helen1986;43197072] господя... желтая страна этих самых валюе + локализация + разделитель тысяч + точность на экране... [/quote] не ругайтесь, пишите понятно. value - приводило к той же самой ошибке, что и text |
[quote=Чучундер;43197021] Сокрлп например прекрасно убирает разделитель строк по концам строки [/quote] О чем вы? СокрЛП я использовал и этого оказывалось недостаточно |
22-Helen1986 > Разделитель триад, прошу прощение за занудство ;) А про "локализацию" -вовремя. Тут (сабж) в чем непонимание: в механизме обмена через СОМ-соединение. И в том, что это соединение вовсе не обязано знать о тонкостях внутренних форматов разных утилит. И о цвете страны тоже ;) |
(25) совершенно верно, разделитель не тысяч, а триад |
23-Skeave > Если какой-то болван загнал в ячейку заместо числа текст, визуально не отличимый от [em]отображения[/em] числа, то при чем здесь "1С"? Та же самая беда приключится, если будешь читать не 1С, а, к примеру, WSH. |
(20) формат ячеек эхеля это аля функция формат() одноэса - представление значения... если образно) |
[quote=VZ;43197167] 23-Skeave > Если какой-то болван загнал в ячейку заместо числа текст, визуально не отличимый от отображения числа, то при чем здесь "1С"? Та же самая беда приключится, если будешь читать не 1С, а, к примеру, WSH. [/quote] СокрЛП() - убирает пробелы спереди и сзади значения. Согласно документации 1С. Для того эта функция и предназначена. Чтоб использовать ее в случаях "визуально не отличимых..". То, что она убирает не все пробелы, а только их часть - конечно, это ошибка 1С. |
29-Skeave > Во-первых, СокрЛП убирает только первые и оконечные пробелы. Во-вторых, не трогает пробелы внутри текста. И наконец, разделитель триад - [b]не[/b] пробел. |
[quote=VZ;43197219]СокрЛП убирает только первые и оконечные пробел[/quote] Так ведь речь и идет именно о первых и последних пробелах. Разделитель триад - т.н. "неразрывный пробел" - это все-таки пробел, как следует из его названия. И здесь - никаких триад никто не делил. |
Кстати. Как думаете, как пользователи вообще умудрились использовать эти самые "неразрывные.."? "Shift+пробел" нужно специально нажать, чтоб получилась эта фигня. Вряд ли в обсуждаемом случае можно вести речь о сознательной злонамеренности. Непонятно. Как эти пробелы могли получиться "случайно"? |
(32) например, копипастом с сайта... там этисамые   часто обитают)) |
32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это [b]разные[/b] символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя. |
[quote=VZ;43197374] 32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя. [/quote] А кто говорит, что это одинаковые символы? Вы продолжаете спорить сам с собой. Конечно, разные. Но и то и другое - пробелы. Которые, согласно документации, должны удалятся функцией СокрЛП(). Поскольку конкретизации "такие то пробелы удаляются, а такие то нет" в этой самой документации нет. Почитайте сами. Ctrl+F1. Либо в более полной, чем хелп программы, документации. Нигде не сказано, что есть разновидность пробелов, которые не удаляются. |
[quote=VZ;43197374] 32-Skeave > Нет, не специально:в Excel отображение настраивается. По дефолту - как в установках Windows (потому и не рекомендуется винигред из по разному локализованных ПО). И потому Excel не рекомендован для обмена. Нигде в типовых решениях он не используется. Но разрешен для особо упёртых: легче дать, чем отговорить. P.S. "пробел" и "неразрывный пробел" - это разные символы. Так же "молоко" от коровы, и "молоко" от негашеной извести, хоть и выглядит одинаково, все-таки отличаются по вкусу. Предлагаю поверить не проверяя. [/quote] Это бланк загрузки в документ Реализация заказываемых товаров и их размеров. Заполняемый менеджерами компании покупателя. Вряд ли "с сайта" |
называйте не пробелом, а просто невидимым символом ) что тут спорить, такие символы встречаются и надо просто это принять как снег, дождь, солнце |
[quote=Skeave;43197492] Это бланк загрузки в документ Реализация заказываемых товаров и их размеров. Заполняемый менеджерами компании покупателя. [/quote] 1С 7.7 "не понимает" некоторые дурацкие символы. Например, пресловутый "длинный дефис", который так нужен был банкам в извещении о взносе наличных. И этот твой дурацкий неразрывный пробел тоже. Можно "очищать" текст поиском первого символа-цифры, Пока СтрДлина(ЗначЯч)>0 Цикл Если Найти(Лев(ЗначЯч,1),"0123456789")=0 Тогда ЗначЯч=Сред(ЗначЯч,2); Иначе Длина=0+ЗначЯч; Прервать; КонецЕсли; КонецЦикла; или удалением конкретного символа ЗначЯч=СтрЗаменить(ЗначЯч,Симв(160),""); , но лучше - найти паразита, который в настройках Excel установил этот символ в качестве разделителя триад и прибить ... |
Да о чем разговор... Аффтар еще с датами не сталкивался ;) Все, кто связывался с "обменом 1С с Excel-ем" отлично знают о ненадежности этой связки. Усугубленной тем, что ввод в Excel осуществляется ручками. Без каких-либо формальных соглашений. Где вместо нулевого значения вполне можно словить знак <-> ("прочерк" по мнению барышни). Короче говоря, "обмен 1С с Excel" неизбежно обрастает кучей вспомогательных функций типа [em]ОпределитьТипЗначения(выражение)[/em], [em]ПривестиИзПредставленияКНормальномуВиду()[/em] и т.п. |
Текущее время: 23:14. Часовой пояс GMT +3. | [1] [2] |