Полной блокировки нет, особенно на SQL (например там блокируется всего несколько записей, а не вся таблица). И при код может дойти до нахождения последнего номера, получить его, а потом откатиться.
Это не так. На SQL конструкцией:
Table.Locktable;
Table.Find('+');
тоже блокируется весь диапазон.
COMMITа в учетном коде до завершения быть не должно, поэтому ситуация довольно странная.