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

будет железно и гармонично :)
25 Serg_1960
 
28.01.16
12:16
(кстати) Если по метаданным в коде 11 символов - это вовсе не значит что "реальные" коды справочника будут формироваться длиной в 11 символов. Автонумерация, например, формирует коды/номера с учётом длины поледнего кода/номера.
26 Serg_1960
 
28.01.16
12:17
*последнего
27 Dotoshin
 
28.01.16
13:00
(24) я так и сделал, только не 30 нулей, 11 по длине кода
(25) я проверил длина везде одинаковая, это как раз критерий - если прочитанное из экселя меньше определенной длины, значит нужно дополнить нулями
28 FIXXXL
 
28.01.16
13:22
(27) я делал нечто похожее однажды, строку нулей формировал в цикле, по длине метаданного