Имя: Пароль:
1C
1C 7.7
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Сергей