Имя: Пароль:
1C
1С v8
Стандартный нумератор.
,
0 Raxla
 
15.11.12
00:24
На мисте много тем про нумераторы, но как-то не получилось систематизировать всю информацию.
Хочется разложить по полочкам работу стандартного нумератора. Как мне представлялось,
если требовать новый код по префиксу, то из задействованных кодов должен делать отбор по этому префиксу и потом наибольший + 1 в рамках разрядности этого наибольшего:
ПРЕФ0001
ПРЕФ002 -> запрашиваем. получаем ПРЕФ003, а не ПРЕФ0003
При этом все номера, у которых нет префикса "ПРЕФ" вообще не должны учитываться.
Ну а если мы запрашиваем код без префикса, то наоборот, должны учитываться все "чистые" номера, у которых нет никакого префиса.
Однако простая првоерка показало, что всё работает совершенно не так:
000-010 -> 0000011 (несмотря на нецифровой симовол никакого префиска нумератор не видит)
005/8 -> 005/9 ( нумератор посчитал от префикса (следующий номер будет не уникальным), хотя запрашивался просто код и, по моему представлению, все номера с любмыми префиксами должны тупо игнорироваться, отдавая номер от максимального "чистонумерного" кода либо 000001 в соотвествии с максимальной разрядностью, если чистых ещё не было)
Проясните, пожалуйста эти моменты
1 Aleksey
 
15.11.12
00:43
"005/8 -> 005/9 ( нумератор посчитал от префикса (следующий номер будет не уникальным), хотя запрашивался просто код и, по моему представлению, все номера с любмыми префиксами должны тупо игнорироваться, отдавая номер от максимального "чистонумерного" кода либо 000001 в соотвествии с максимальной разрядностью, если чистых ещё не было)"

Поясни мысль на примере, что в случае 005/8 должен сделать нумератор?
2 Aleksey
 
15.11.12
00:45
3 Азат
 
15.11.12
00:49
за слэш в номере - однозначно ссаной тряпочкой по эппальничку...

особенно интересно, что должен сделать нумератор после 005/9, если длина номера - 5 знаков... а если будет а0б/9... то ли а0в/1, то ли а1б/1, то ли что
4 o KIA
 
15.11.12
09:42
По моему ТС не знает что такое максимальный номер.
Телепатирую:
По ТС все номера разбиты на группы по префиксу и имеют свой максимальный номер, поэтому УстановитьНовыйНомер("ПРЕФ"),вроде как получит Макс("ПРЕФ"{num}*)+1/
Следуя этой логике УстановитьНовыйНомер() для 005/8 получит 00001, потому что пустой префикс это не префикс "005/". Насколько я знаю максимальный номер всегда получается одним и тем же способом и уже поверх него шьётся префикс.
кстати, как именно он вычисляется я не в курсе, тоже интересно было бы почитать
5 o KIA
 
15.11.12
10:45
Нашёл выдержку из книги: "Профессиональная разработка в системе 1С:Предприятие 8 (Габец, Гончаров, Козырев, Кухлевский, Радченко)"
Описан процесс при пустом префиксе:
1. ищется наиболее длинный префикс.
1. среди наиболее длинных выбирается больший по алфавиту
3. среди номеров с этим наибольшим префиксом выбирается наибольшее числовое значение (лидирующие нули и пробелы не играют роли)
4. инкременируется найденное число, при этом сохраняется такая же разрядность, то есть, теперь учитываются лидирующие нули и пробелы конкретно этого числа.

5. я начал сомневаться, что при непустом префиксе алгоритм такой же.
6 o KIA
 
15.11.12
11:20
Посыпаю голову пеплом: префикс учитывается по нему осуществляется отбор, но алгоритм остаётся прежним: просто он применяется к коду за вычетом префикса.
То есть
УстановитьНовыйНомер("ПРЕФ") для номеров:
ПРЕФ0001
ПРЕ0009
ПРЕФ/02
Аналогично такой ситуации:УстановитьНовыйНомер() среди номеров:
0001
/02
Надеюсь понятно объяснил, поправьте меня, если я прогнал.
7 o KIA
 
15.11.12
17:46
Не поленился, протестировал на примерах, в целом, всё работает как должно. Но скажите, почему вот в таком наборе:
0000001
0000002
000/003

УстановитьНовыйНомер() вернёт 0000003, а не 000/004 ?

кстати, а что ТС молчит, я тут один что ли копаю?
8 Raxla
 
16.11.12
07:27
Спасибо за информацию, в интернете нашлась эта книжка в djvu и мне тоже не понятно, почему  не 000/004 :-)
9 Raxla
 
16.11.12
07:28
Может Азат, что дельное скажет, помимо ссаной тряпочки, ведь на слешах у него - опыт!?
10 НЕА123
 
16.11.12
09:01
(9)
сегодня пятница, можно пофлудить

потому что последовательность в порядке возрастания из(7)

000/003
0000001
0000002