Как бороться с отсечением лидирующих нулей при загрузке из табличного документа? #763774


#0 by Dotoshin
Есть типовая обработка - Загрузка данных из табличного документа, с помощью которой нужно загрузить цены из экселя. Все работает совершенно замечательно за исключением тех случаев, когда код номенклатуры состоит из числа и лидирующих нулей. Например 00000000255. В этом случае после открытия файла в обработке отображается 255 вместо 00000000255. Естессно цена для этой номенклатуры не загружается. В самом экселе, в ячейке отображается 00000000255, но если открыить ее на редактирование, то отобразится 255. Формат у этой ячейки какой-то нестандартный, вот такой: 00000000000;[Красный]-00000000000. Если указать текстовый формат, то ведущие нули сразу же обрезаются, но если после этого ввести эти нули руками, то - о чудо они сохраняются. На самом деле никакого чуда нет - текстовый формат хранит значение в том виде как оно введено. Собственно в чем вопрос, можно ли как-то преобразовать такие значения в текстовые? Может есть какой-то макрос или еще какой-то способ?
#1 by vde69
формат(,)
#2 by grayshadow
в коде заменить .Value на .Text
#3 by Масянька
+100 Либо - Дополнить(Строка, Чем, Длина).
#4 by Рэйв
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат;
#5 by Serg_1960
Хмм.. прежде чем советовать, хотелось бы узнать что автор может изменить -формат Экселя или "есть типовая обработка"(цы) Если ни то ни другое изменить нельзя - то типовую обработку выгрузить во внешнюю и пририсовать свои бантики и рюшечки.
#6 by Dotoshin
В каком смысле изменить формат Экселя?
#7 by Serg_1960
в смысле внести изменения в файл экселя.
#8 by Serg_1960
или в алгоритм той программы, что его формирует.
#9 by Serg_1960
Если ексель "съедает" нули, то значит использовали "неудобный" для 1С формат ячейки. Почитай, например,
#10 by Dotoshin
Спасибо, очень полезная статья. Теперь осталось придумать как с этой бедой бороться.
#11 by Dotoshin
формат не понимает как нужно форматировать строки, то есть Формат(255,"ЧЦ=11; ЧВН=; ЧГ=") вернет "00000000255", а Формат("255","ЧЦ=11; ЧВН=; ЧГ=") вернет "255" А у меня как раз строка и преобразовывать ее в число нет никакого желания, потому как есть коды с буковками.
#12 by Serg_1960
Хулиганю :) Прав("00000000000" + "255", 11)
#13 by bolobol
А вот вы откуда знаете на этапе разработки - сколько лидирующих нулей имеется?
#14 by grayshadow
если ломать обработку лень, можно еще попытаться в файле нафигачить формат Текстовый и в ячейки вхерачить "00000000255" прямо с кавычками(!!!)
#15 by bolobol
Во все 65 535 строчек предлагаете?
#16 by Serg_1960
Открою тебе большой секрет: мне об этом сообщил автор в и в :)
#17 by cw014
В обработке есть чудо механизм "события". В событии при загрузке этого поля ставь "Формат" и будет тебе счастье
#18 by FIXXXL
тут надо знать длину поля, куда потом пойдет загрузка
#19 by Dotoshin
Да есть такой механизм. В каком событии мне нужно поставить формат, чтобы найти в справочнике номенклатуры позицию с кодом 00000000255, если в табличном документе из которого нужно загрузить, этот код записан как 255?
#20 by Масянька
Ёлки-моталки! Там работы на час (максимум)... Ты же вторые сутки мозг имеешь...
#21 by Dotoshin
+ По коду номенклатуры идет поиск, при загрузке из табличного документа. Ну то есть на вкладке настройка, в колонке режим загрузки, для номенклатуры установлено искать по коду
#22 by Dotoshin
Так я вчера уже все сделал
#23 by Dotoshin
+ ...с помощью кувалды, лома и такой-то матери, а хочется гармонии...
#24 by FIXXXL
прочитай из метаданных длину поля-получателя, накинь слева 30 нулей и возьми ПРАВ от строки на длину поля-получателя будет железно и гармонично :)
#25 by Serg_1960
(кстати) Если по метаданным в коде 11 символов - это вовсе не значит что "реальные" коды справочника будут формироваться длиной в 11 символов. Автонумерация, например, формирует коды/номера с учётом длины поледнего кода/номера.
#26 by Serg_1960
*последнего
#27 by Dotoshin
я так и сделал, только не 30 нулей, 11 по длине кода я проверил длина везде одинаковая, это как раз критерий - если прочитанное из экселя меньше определенной длины, значит нужно дополнить нулями
#28 by FIXXXL
я делал нечто похожее однажды, строку нулей формировал в цикле, по длине метаданного
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С