|
v7: Не работает (?) функция СтрДлина | ☑ | ||
---|---|---|---|---|
0
PiotrLoginov
09.01.13
✎
07:55
|
Здравствуйте всем. Мне надо номера (реквизит НомерДок) вида ААА-N превратить в номера вида БББ-00000N. Т.е. в результате ноли должны увеличивать длину номера до 10 символов, например номер ААА-777 должен превратиться в БББ-000777
Уже всю голову сломал. Почему-то СтрДлина упорно возвращает значение 6 в таком коде: Кол_воНолей = 6 - СтрДлина(Сред(НомерДок,5))); // в итоге получается всегда 0 :-( Рез = ""; Сч = 0; Пока Сч < Кол_воНолей Цикл Рез = Рез + "0"; Сч = Сч + 1; КонецЦикла; Значение = "БББ-" + Рез + Сред(Источник.НомерДок,5); Помогите пожалуйста. Сижу часами из-за такой ерунды. |
|||
1
rphosts
09.01.13
✎
07:57
|
а что реально у тебя в переменной НомерДок? Не что должно быть а что фактически есть?
|
|||
2
PiotrLoginov
09.01.13
✎
07:58
|
номера по порядку
ААА-1 ААА-2 ААА-3 и так далее |
|||
3
1Сергей
09.01.13
✎
08:00
|
у НомерДок длина всегда одинаковая. Если она равна 11, то твоё выражение "6 - СтрДлина(Сред(НомерДок,5)))" всегда вернёт ноль
|
|||
4
Морозов Александр
09.01.13
✎
08:00
|
скобок чет сного
|
|||
5
Морозов Александр
09.01.13
✎
08:00
|
*много
|
|||
6
chelentano
09.01.13
✎
08:01
|
(2) СтрДлина(Сред("ААА-1",5))) и будет 0, чё хочешь то?
|
|||
7
rphosts
09.01.13
✎
08:01
|
(2) нужно было сначало над номерДок применить СокрЛП()
|
|||
8
PiotrLoginov
09.01.13
✎
08:02
|
у меня в базе длина НомерДок равна пяти
потом когда нумерация увеличивается на порядок, равна шести. и так далее (4) да, одну скобку сейчас лишнюю написал. опечатался |
|||
9
1Сергей
09.01.13
✎
08:05
|
(8) Значение = "БББ-" + Формат(0+Сред(НомерДок,5),"Ч(0)6");
|
|||
10
Doomer
09.01.13
✎
08:07
|
А в отладчике что показывает?
|
|||
11
1Сергей
09.01.13
✎
08:10
|
(9) + проверил только что. даже преобразование к числу не обязательно:
Значение = "БББ-" + Формат(Сред(НомерДок,5),"Ч(0)6"); |
|||
12
PiotrLoginov
09.01.13
✎
08:10
|
еще раз. есть номера:
ААА-1 ААА-2 ААА-3 ААА-4 ААА-5 ААА-6 ААА-7 ААА-8 ААА-9 ААА-10 ААА-11 и так далее. Надо превратить в БББ-000001 БББ-000002 БББ-000003 БББ-000004 БББ-000005 БББ-000006 БББ-000007 БББ-000008 БББ-000009 БББ-000010 БББ-000011 и так далее Написал код: Кол_воНолей = 6 - СтрДлина(Сред(НомерДок,5)); // в итоге получается всегда 0 , хотя Сред(НомерДок,5) исправно отрезает "ААА-" Рез = ""; Сч = 0; Пока Сч < Кол_воНолей Цикл Рез = Рез + "0"; Сч = Сч + 1; КонецЦикла; Значение = "БББ-" + Рез + Сред(Источник.НомерДок,5); (9) пробую. (10) показывает, что Сред(НомерДок,5) = цифре , т.е. то, что надо, а СтрДлина(Сред(НомерДок,5)) всегда равно шести |
|||
13
PiotrLoginov
09.01.13
✎
08:12
|
(9) попробовал. Это то, что нужно. просто здорово. Спасибо огромное, я тут уже не знал, куды бечь.
|
|||
14
1Сергей
09.01.13
✎
08:12
|
(12) если "СтрДлина(Сред(НомерДок,5)) всегда равно шести", то твои слова "у меня в базе длина НомерДок равна пяти" - ложь
|
|||
15
alkov
09.01.13
✎
08:13
|
Перечитай (7). Твои ААА-1 в реальности "ААА-1 ". Ибо фиксированная длина строки
|
|||
16
PiotrLoginov
09.01.13
✎
08:15
|
(14) ей-бо не вру, см. (12)
(15) , да в итоге всегда получалось "ААА-1 " Так и не понял, если честно, почему не сработало СтрДлина |
|||
17
1Сергей
09.01.13
✎
08:16
|
(16) потому, что длина НомерДок задаётся в конфигураторе. И она постоянна. Чтобы отрезать лишние пробелы, см (7)
|
|||
18
alkov
09.01.13
✎
08:17
|
(16) Потому что СтрДлина("1 ") не равно 1
|
|||
19
alkov
09.01.13
✎
08:17
|
(16) А СтрДлина("ААА-1 ") не равно 5
|
|||
20
PiotrLoginov
09.01.13
✎
08:18
|
Понял. Теперь понял. И понял, почему предлагали (7)
|
|||
21
PiotrLoginov
09.01.13
✎
08:19
|
Лишние пробелы, блин. Причем ведь знаю, что в этой базе с пробелами беда. И уже отрезал их раньше в аналогичных ситуациях...
Всем огромное спасибо, особенно 1Сергей |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |