Страница 1 из 1
Уникальность значений
Добавлено: 27 ноя 2007, 14:24
Анна
Вот столкнулись с такой проблемой. Иногда случается, что одновременно несколько секретарей регистрируют корреспонденцию. При запуске действия считывается число для нумерации (оно хранится в родительской папке года), которое увеличивается на единицу и запоминается в конце выполнения действия. Сделано это для того, что можно было спокойно закрывать действие без регистрации корреспонденции, при это номер не изменяется.
То есть, предположим что с небольшой разницей по времени 3 секретаря запустили одно и тоже действие. На экран выводится карточка уже со считанным на предыдущем шаге номером, затем пользователи заполняют все поля, нажимают далее и только тогда запоминается номер. При этом создаются три объекта с одним и тем же номером. Использовать проверку на уникальность не получается, так как она действует только после перехода на следующий шаг действия, а пользователь заполнил все поля и назад вернуться к предыдущему шагу, чтоб изменить номер, нельзя. Да и как пользователь может знать, какой ему номер указать. Может, кто решал проблему уникальности. Поделитесь способами решения.
Добавлено: 27 ноя 2007, 14:43
Disillusioned
Могу предложить осуществлять нумерацию в самом последнем шаге действия, где сначала получать очередной номер, а потом сразу его записывать. Соответственно пересечения по времени разных пользователей будут минимальными, а даже если такое и случится, то после сообщения об неуникальности значения атрибута можно будет снова нажать на кнопку "Готово" и будет получен другой очередной номер.
Или же на первом шаге получить номер текущего документа, записать значение следующего номера и сразу же выполнить Update(). Естественно, при таком подходе будут появляться "дыры" в нумерации.
Добавлено: 27 ноя 2007, 14:58
Анна
Наверное, первый вариант более оптимальный. Надо посмотреть, что можно сделать. Спасибо.
Добавлено: 27 ноя 2007, 15:11
Анна
Хотя с другой стороны, получение номера для корреспонденции на последнем шаге, после заполнения всех обязательных полей не очень удобно. Иногда бывают ситуации, когда нужно получить сначала номер, а потом уже не спеша вернуться к заполнению всех полей в действии. Смысл в том, что сразу получить уникальный номер, хотя наверное, это не реально.
Добавлено: 27 ноя 2007, 15:20
Disillusioned
Если не допускаются "дыры" в нумерации, то, пожалуй, нереально.
Добавлено: 27 ноя 2007, 16:03
Alexey
А что если на этапе создания формы написать, что данные номер плановый и не является итоговом, а потом на самом последнем шаге, т.е. автоматически при записи в бд обновить нумерацию, получить последний номер, сгенерировать новый (итоговый) и с таким вот номером он моментом запишется в БД, при чем предусмотреть следующий вид напоминания, запоминаем номер присвоенный вначале в свою переменную и номер который будет итоговый в другую переменную, автоматом после записи сравниваем и в случае, когда номер изменился выдаем сообщение что в итоге документ получил номер например 101. Вот такая вот идея в порядке бреда.
Ну и вторая идейка, уж точно в порядке бреда, организовать функционал резервирования номера... А вот как его реализовать надо думать, в первом приближении видится следующее, есть переменная число для нумерации, создается еще одна текстовая переменная зарезервированные номера... ой нет... это бред... дальше писать не буду... посидел покурил... подумал и понял что резервирование так сразу и не придумаешь...
Добавлено: 27 ноя 2007, 16:24
Анна
Alexey, спасибо. Ваша идея в принципе тоже реализуется на последнем шаге. Может действительно решать именно таким образом проблему, не брать во внимание, что пользователи привыкли к определенному поярдку. Надо будет подумать.