15.07.2009, 18:04 | #1 |
Участник
|
Сегодня совершенно случайно заметил в Фин. Книге Операций, что номера операций идут с разрывами. NAV 50SP1. Вот пример (естественно сортировка по полю Операция Но.):
521706 521707 521709 521710 521712 521713 521715 521716 521718 521719 521721 521722 521724 521725 521727 521728 Руками ничего не удаляется. Учётные кодюниты в первозданном виде. Это нормально или нет? |
|
16.07.2009, 09:34 | #2 |
Участник
|
Это нормально.
__________________
Want to believe... |
|
16.07.2009, 10:00 | #3 |
Участник
|
Судя по базе с Кронусом - нормально. Но честно говоря это немного смущает. А почему так происходит?
С номерами транзакций такого быть не может? |
|
17.07.2009, 12:12 | #4 |
Участник
|
Одновременный учёт нескольких пользователей с откатом одного учёте, который был ранее и такая ситуация реальна.
|
|
20.07.2009, 08:01 | #5 |
Moderator
|
А сами операции возникли при учете каких документов?
|
|
20.07.2009, 08:44 | #6 |
Участник
|
|
|
20.07.2009, 08:57 | #7 |
Участник
|
gala, проводки сделаны через фин журналы. судя по всему ответы в 12-ом кодюните.
|
|
20.07.2009, 10:33 | #8 |
Участник
|
Полной блокировки нет, особенно на SQL (например там блокируется всего несколько записей, а не вся таблица). И при код может дойти до нахождения последнего номера, получить его, а потом откатиться.
|
|
20.07.2009, 10:52 | #9 |
Участник
|
Цитата:
Table.Locktable; Table.Find('+'); тоже блокируется весь диапазон. COMMITа в учетном коде до завершения быть не должно, поэтому ситуация довольно странная. |
|
20.07.2009, 11:46 | #10 |
Участник
|
Кому интересно самостоятельно взглянуть - посмотрите на Cronus в последнем Nav Express. То же самое. На 3284 операции 256 пропусков.
|
|
20.07.2009, 15:03 | #11 |
Участник
|
Цитата:
Цитата:
Начиная с момента выполнения кода: Table.Locktabe; Table.find('+'); и до commit'a или отката транзакции другие клиенты Нава, выполняющие тот же код будут ждать окончания блокировки ПОСЛЕДНЕЙ записи на команде find('+'), и неважно чем закончиться блокирующий процесс - откатом транзакции или коммитом. В любом случае следующий процесс прочитает последний номер операции. При таком построении кода гарантируется уникальность и отсутствие пропусков в номерах операций при многопользовательской работе. Думаю стоит копать в сторону инкремента NextEntryNo без вставки в 17 таблицу. Для начала посмотрите фин. регистры возможно номера отсутствующих операций лежат в диапазоне одной операции учета. PS. NAV 50SP1 и Nav Express не видел, однако объемы изощренного RU кода начиная с 4.0 SP2 растут в 12 cu с пугающей меня быстротой. |
|
20.07.2009, 17:04 | #12 |
Участник
|
Цитата:
Сообщение от rmv
Как мне представляется блокируются несколько записей, а не диапазон.
Начиная с момента выполнения кода: Table.Locktabe; Table.find('+'); и до commit'a или отката транзакции другие клиенты Нава, выполняющие тот же код будут ждать окончания блокировки ПОСЛЕДНЕЙ записи на команде find('+') |
|