|   |   | 
| 
 | Алгоритм определения свободного номера документа | ☑ | ||
|---|---|---|---|---|
| 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) Ради чего это все? Чтобы прощать ошибки пользователей?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |