|
Алгоритм определения свободного номера документа | ☑ | ||
---|---|---|---|---|
0
Gorr
28.04.14
✎
12:55
|
Возможно тема уже не раз обсуждалась, однако поиск готового решения не дал. Что не устраивает в стандартном механизме автонумерации, это то что он допускает образование неиспользованных пространств номеров.
Корректировку неправильных номеров с последующим ОбновитьНумерациюОбъектов не предлагать - геморой. Запрет редактирования номера в документе тоже не вариант. Итак, есть мысль использовать для поиска нового свободного номера запрос. Для поиска номера выделить отдельный справочник который предварительно заполнить элементами с номерами кода от "000000" до "999999". В запросе сделать выборку первого кода из справочника отсутствующего в выборке номеров документов с начала года. Возможно, для оптимизации, есть смысл при начале работы системы загрузить справочник во временную таблицу, сделать индексацию и использовать менеджер временных таблиц для хранения в памяти на протяжении всего сеанса работы пользователя. |
|||
1
Maxus43
28.04.14
✎
12:58
|
т.к. номера строковые - не сделать номральный контроль нумерации (сортировка строки это далеко не сортировка Чисел), нормально платформа в этом плане работает
|
|||
2
bolobol
28.04.14
✎
12:59
|
А в самой конфе настройку пропускать номера отменили что ли?
|
|||
3
bolobol
28.04.14
✎
13:00
|
"Освобождать автоматически" - не оно?
|
|||
4
х86
28.04.14
✎
13:02
|
(0)в документ пихай ссылу на твой справочник, вот и будет тебе номер
|
|||
5
МихаилМ
28.04.14
✎
13:13
|
"Для поиска номера выделить .. справочник который предварительно заполнить элементами с номерами кода "000000" до "999999" "
- достаточно заполнить номерами ВТ. ищите приводились примеры запросов поиска пропущенных номеров. |
|||
6
Gorr
28.04.14
✎
13:36
|
(3) пробовал - не работает ни так ни сяк. судя по описанию в статье ИТС это для того чтобы авто присвоение номера выполнялось или при открытии формы как в 8.1 или при записи (8.2)
|
|||
7
Gorr
28.04.14
✎
13:38
|
(5) я и предлагаю создать справочник для заполнения ВТ. Алгоритм генерации последовательности выдает числовую, а не строковую последовательность поэтому врядли подойдет.
|
|||
8
Злопчинский
28.04.14
✎
13:38
|
сделай документ-болванку. единственное назначение - ведение нумератора. При необходимости присвоить твоему документу новый номер делай типа
. ДокРегистратор.Новый(); ДокРегистратор.Записать(); //номер использован ДокМой.НомерДок = ДокРегистратор.НомерДок; |
|||
9
bolobol
28.04.14
✎
13:42
|
(6) А-А-А... Надежды рухнули...
(8) А уже проверку пропущенных номеров прицепляй к документу ДокРегистратор. Использованность его номеров - сделай документ-болванку. единственное назначение - ведение нумератора. При необходимости присвоить твоему документу номер делай типа . ДокРегистратор.Новый(); ДокРегистратор.Записать(); //номер использован ДокМой.НомерДок = ДокРегистратор.НомерДок; |
|||
10
Kyon8
28.04.14
✎
13:44
|
(7) Для заполнения ВТ можно в запрос передать параметр таблицу значений, справочник не нужен.
|
|||
11
bolobol
28.04.14
✎
13:44
|
и пока работает рекурсия, никто не пропустит ни одного номера!
|
|||
12
bolobol
28.04.14
✎
13:46
|
(10) Вот с такими тормозами в 1С потом и приходится разбираться. То регистр целиком с сервера на клиент затащат для разбора в цикле, то миллион записей с клиента на сервак гоняют в каждом документе при записи...
|
|||
13
bolobol
28.04.14
✎
13:52
|
(0) Да и в чём, собственно, задача? Если система пропустила номер, не достаточно ли проверить, что в базе нет предшествующего номера?
|
|||
14
Kyon8
28.04.14
✎
13:58
|
(12) Меня стандартный сервис нумерации устраивает, если что :) А так да, на количество записей не обратил внимания.
И алгоритм ТС не учитывает префиксы. |
|||
15
Serg_1960
28.04.14
✎
14:12
|
Сомнения меня одолевают.
Пользователь пометил и удалил документ... номер "освободился" или считать "пропущеным"? :) А если пользователь завёл номер документа "от балды". Ну, например типа "АБВ-01234/к"... а потом удалил документ - то это как? (см. первый вопрос) :)) |
|||
16
bolobol
28.04.14
✎
14:30
|
(15) А от балды - тупо не записывать, если в номере хвост не числовой, например. А вот удалённые старые номера - это от задачи ТС зависит.
(14) Префиксы учитывает, т.к. номер (числовая часть) и должна осваиваться с префиксами, зависит уже от кода, правда, нагрузка на соединение возрастает в разы, если в соединении "префикс + подстрока(номер) = документВбазе.номер" использовать. |
|||
17
bolobol
28.04.14
✎
14:35
|
А ещё нужен механизм вставки номера, когда документ, например, задним числом вводится. Пользователь записывает неглядя, а документы сами перенумеровываются. Или пользователь вручную вводит номер, а всё что мешает - перенумеровывается... Сказка! Но для того мы рождены, чтоб одну кнопку сделать с микрофоном, как гугл)
|
|||
18
1CLama
28.04.14
✎
15:39
|
Номера перенумеровались и их сдали в налоговую - сказка :)))
А вообще я делал такой механизм. У меня был последний правильный номер по организации. При пометке удаления номер сбивался и менялась организация этого помеченного документа. Попытками пробовал установить новый номер |
|||
19
bolobol
28.04.14
✎
15:45
|
(18) Отчёт никак на нумерацию не влияет, или вы про порядковый номер отчёта? Тут такое не рассматривается ещё.
А вот смена номера удалённому документу - это зло, хотя, много зла и своими силами бухгалтера делают... |
|||
20
vmv
28.04.14
✎
15:54
|
как-то обсуждались тут "дырки", решение нашли на Вт, но прожорливо конеш
|
|||
21
vmv
28.04.14
✎
15:56
|
+(20) "дырки", т.е. пропущенные номера актуальны для договоров.
Вернее там не столько идея в косячности, скролько в пулл-резерве номеров для контрагента или договора. |
|||
22
Gorr
28.04.14
✎
20:36
|
(15) проверку на валидность номеров я уже давно ввел так что номера типа " 33333/к5" не пройдут. но так было не всегда.
существующие же " 33333/к5" оставляем Пользователь пометил и удалил документ... номер "освободился" или считать "пропущеным"? :) Пользователь удалить документ не может в принципе - если док не нужен заставляю использовать повторно. (14) над детальной реализацией префикации при поиске еще не задумывался. планирую использовать LIKE для поиска по шаблону. |
|||
23
Лефмихалыч
28.04.14
✎
20:40
|
(0) чтобы не было дырок, надо у формы в свойствах автонумерацию отключить и номер нередактируемым сделать.
А алгоритмы все эти - это порожняк. На, вот, придумай оглоритм: 123/Х-12/УЙ000543-1 |
|||
24
Лефмихалыч
28.04.14
✎
20:40
|
+(23) а в каком-нить документообороте может и часто бывает еще и не такое...
|
|||
25
Gorr
28.04.14
✎
20:49
|
(23) все должно быть в пределах разумного.
|
|||
26
Defender aka LINN
28.04.14
✎
21:08
|
(25) Скажи это автору.
Wait, oh, shi... |
|||
27
Лефмихалыч
28.04.14
✎
21:15
|
(26) зачет ж-)
|
|||
28
Эмбеддер
28.04.14
✎
21:28
|
сделать справочник или регистр сведений, куда записывать
начальный номер из диапазона/конечный номер из диапазона/использование т.е. изначально там 1-9999999-ложь при создании одного документа 1-1-истина 2-9999999-ложь потом может быть такое, когда несколько номеров пропустили 1-10-истина 11-15-ложь 16-16-истина 17-9999999-ложь |
|||
29
Злопчинский
28.04.14
✎
21:47
|
(9) никаких проверко пропущенных номеров к документу-регистратору применять не надо - масло масленое, блин. Если написать по уму, то случаи когда будут пропуски именно в документе нумераторе - будут ОЧЕНЬ редки. с ними - можно смириться.
. |
|||
30
Злопчинский
28.04.14
✎
21:50
|
С какого хрена где-то удалять задним числом документ? нафиг никаких удалений. сторно и околоптиц. ибо нефиг.
|
|||
31
Torquader
28.04.14
✎
21:52
|
(30) В одной программе делали поиск "дыр" по индексу, то есть начинали с 1 и шли до того момента, когда после числа будет на два и более большее - вот мы и нашли свободный номер.
Пропуски были искоренены радикально, так как удалённый документ просто заменялся новым. Проблема была только в том, что нумерация шла не по порядку. |
|||
32
Gorr
28.04.14
✎
22:28
|
Собственно сам запрос:
ВЫБРАТЬ ПЕРВЫЕ 1 "А-" + СписокНомеров.Номер КАК СвободныйНомер ИЗ СписокНомеров КАК СписокНомеров ЛЕВОЕ СОЕДИНЕНИЕ доки КАК доки ПО ("А-" + СписокНомеров.Номер = доки.Номер) ГДЕ доки.Номер ЕСТЬ NULL УПОРЯДОЧИТЬ ПО СписокНомеров.Номер |
|||
33
Gorr
28.04.14
✎
22:29
|
+(32)С использованием справочника который всегда индексируется по коду должно работать достаточно быстро.
|
|||
34
Злопчинский
28.04.14
✎
23:24
|
(31) стоял вахтер и проверял пропуска, если пропуска не было - пускал и так
|
|||
35
mistеr
29.04.14
✎
00:09
|
(0) Ради чего это все? Чтобы прощать ошибки пользователей?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |