Имя: Пароль:
1C
1С v8
Как правильно увеличить строковый номер?!
0 mzelensky
 
30.01.12
12:29
Привет!Допустим имеется номер документа (не важно для чего он), напрмиер:

1) "КР-010101П"
или
2) "КР-0101091"
или
3) "100978ВС"
...

При этом длина номера не ограничена и может варьироваться. Синтаксис тоже совершенно различен (буквы и цифры). Нужно новому документу присвоить следующий номер (т.е. получить последний, увеличить на единицу и присвоить). Как это сделать???
1 mzelensky
 
30.01.12
12:30
(0) определить последний не проблема - можно просто запросом выбрать "Максимум" по этому реквизиту. Вопрос как увеличить?
2 Господин ПЖ
 
30.01.12
12:30
за номера 1 и 3 придется бить чем-то тяжелым...

ЗЫ такие номера типовые тоже не переваривают...
3 Rie
 
30.01.12
12:31
(0) Особенно варианты 1 и 3 нравится. Это кто ж такой изврат придумал?
4 mzelensky
 
30.01.12
12:31
(2) это не "Номер документа" это свой реквизит. Просто строковый реквизит документа.
5 acsent
 
30.01.12
12:32
в докуметообороте есть составные номера
6 арах
 
30.01.12
12:32
отсеиваешь буквы , переводишь в число и делаешь +1 :)
7 mzelensky
 
30.01.12
12:32
(2) (3) не важно кто придумал и зачем - это просто примеры и я точно знаю ,что такие будут встречаться. Вопрос - как решить задачу?!
8 арах
 
30.01.12
12:33
кстати так в типовых и сделано
9 mzelensky
 
30.01.12
12:34
(6) а как ты будешь отсеивать буквы в таком:

"Кр-09890\ВС75653\56733" - ???
10 mzelensky
 
30.01.12
12:34
(5) можешь подсказать как там сделано??? у меня нет возможности туда заглянуть.
11 арах
 
30.01.12
12:35
ищешь набор 1234567890 и все
12 арах
 
30.01.12
12:35
короче надо в типовой глянуть я смутно помню
13 Alex S D
 
30.01.12
12:37
(9) и что там сложного? я делал как-то, определял числовые символы справа, эту часть увеличивал
14 арах
 
30.01.12
12:38
вот пример из типовой

Функция УдалитьПользовательскиеПрефиксыИзНомераОбъекта(Знач НомерОбъекта) Экспорт
   
   СтрокаЦифровыхСимволов = "0123456789";
   
   Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
       Префикс     = Лев(НомерОбъекта, 5);
       НомерПолный = Сред(НомерОбъекта, 6);
   Иначе
       Префикс     = Лев(НомерОбъекта, 3);
       НомерПолный = Сред(НомерОбъекта, 4);
   КонецЕсли;
   
   Номер = "";
   
   Для Индекс = 1 По СтрДлина(НомерПолный) Цикл
       
       Символ = Сред(НомерПолный, Индекс, 1);
       
       Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
           
           Номер = Номер + Символ;
           
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Префикс + Номер;
КонецФункции
15 mzelensky
 
30.01.12
12:39
(13) С вариантом №3 в (0) как справится твой алгоритм?!
16 Ненавижу 1С
 
гуру
30.01.12
12:39
какой следующей номер после "АА99999ЖЖ"?
17 Alex S D
 
30.01.12
12:41
(13) выцепляешь "100978", увеличиваешь, потом прибавляешь "ВС"
18 Alex S D
 
30.01.12
12:42
(16)АА1000000ЖЖ
19 Господин ПЖ
 
30.01.12
12:42
(14) осталось подумать чего будет в номерах 1 и 3
20 mzelensky
 
30.01.12
12:43
(16) в том и косяк, что Я этого не знаю...варианта 2
1) АА99999ЖЖ1
2) АА100000ЖЖ
21 Господин ПЖ
 
30.01.12
12:43
(18) а вот хрен...
22 acsent
 
30.01.12
12:44
(10) номер состоит из частей. части задаются вручную. например
префикс + счетчик + суффикс
23 арах
 
30.01.12
12:44
этож кто так извращался с нумерацией?? повесь того за яйца:)
24 mzelensky
 
30.01.12
12:45
(18) ты одним "0" ошибся, кажется
25 Alex S D
 
30.01.12
12:45
(24) неважно)
26 mzelensky
 
30.01.12
12:46
(23) я не говорю. что постоянно будет такая "Ж**А", но хочется сделать механизм ,который будет работать при любых вариантах.
27 арах
 
30.01.12
12:48
ну если 2 номер типа  АА99999ЖЖ1  ищи крайние левы цыфиры и к ним плюсуй)
28 арах
 
30.01.12
12:48
сори *правые
29 mzelensky
 
30.01.12
12:49
(22) по этой схеме траблы будут вот с этим:

"Кр-09890\ВС75653\"
30 арах
 
30.01.12
12:51
а какие траблы то??
Кр-09890\ВС75653\
из этого выцепляешь правый набор цыфер 75653 и +1 :)
все просто
31 acsent
 
30.01.12
12:51
(29) в чем траблы то? счетчик то где в номере?
32 Alex S D
 
30.01.12
12:51
траблы видимо как раз в определении счетчиков
33 mzelensky
 
30.01.12
12:52
Наверное все-таки проще брать крайние правые цифры и их обрабатывать, а если их нет, то создавать!
34 acsent
 
30.01.12
12:53
(32) так это нужно у людей спрашивать, кто такие номера дает.
или ты хочешь зателепатировать? зряяяя
35 mzelensky
 
30.01.12
12:54
(30) по идее в этом случае должно быть: "Кр-09890\ВС75653\1"
36 арах
 
30.01.12
12:54
как хочешь пример с поиском цифер в строке я тебе привел а там как хошь:)
37 Alex S D
 
30.01.12
12:54
(34) это не я телепат, а (33)
38 mzelensky
 
30.01.12
12:55
(36) принцип выбора номера мне и так был ясен. Честно говоря я думал ,может в 1С есть уже какая-то встроенная функция (написанная) для этого дела.
39 mzelensky
 
30.01.12
12:56
Всем спасибо, тем закрыта - пошел работать! :)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.