|
Вклиниться в стандартную нумерацию документов | ☑ | ||
---|---|---|---|---|
0
Stronich
21.02.13
✎
08:54
|
Добрый день. Помогите решить следующую задачу, а то сам что-то втупливаю.
Есть документы 4 типов, объединены в один нумератор. Нужно сделать пропуск в нумерации определенного диапазона номеров. Т.е. когда дойдет до номера 6666, вместо него записать номер 7777. Дальше нумерация пойдет сама и диапазон номеров 6666 - 7776 будет пропущен. Как лучше реализовать? |
|||
1
shuhard
21.02.13
✎
08:58
|
(0) а есть варианты кроме подписки ?
|
|||
2
kotletka
21.02.13
✎
08:59
|
(1)как дойдет до 6666 руками поставить 7777 и пойдет дальше
|
|||
3
Stronich
21.02.13
✎
09:00
|
Подписки на что? ПриУстановкеНовогоНомера - номера еще нет. ПередЗапись - номера еще нет.
|
|||
4
Stronich
21.02.13
✎
09:01
|
(2) Я как бы понимаю, что я туплю, но руками - это в каком месте?
|
|||
5
mikecool
21.02.13
✎
09:02
|
(4) в документе...
|
|||
6
Stronich
21.02.13
✎
09:17
|
Хм, ну вроде понял. Если вызвать принудительно УстановитьНовыйНомер, то после его вызова номер можно проверить и изменить. Только есть проблема - 1 из 4 типов документов создается программно, и возможна такая ситуация:
На Комп1 пользователь запускает формирование документов. Для очередного документа в пакете после вызова УстановитьНовыйНомер присваивается номер 6666. Я его меняю программно на 7777, но записать еще не успеваю. На Комп2 запускается формирование документов. Для очередного документа идет вызов УстановитьНовыйНомер и вот тут система то еще не знает, что я номер 6666 пропустил, она присвоит номер 6667. Как быть? |
|||
7
MSII
21.02.13
✎
09:19
|
А 13-й номер вы тоже пропускаете? Нельзя быть такими суеверными.
|
|||
8
Галахад
гуру
21.02.13
✎
09:20
|
(6) Ну и? Если > 6666 И < 7777 ==> 7777
|
|||
9
Stronich
21.02.13
✎
09:25
|
(8) Ну и на обоих компьютерах тогда получаться документы с номером 7777.
Даже если вычислять инкремент относительно 6666 и прибавлять его к 7777, то это тоже в общем случае не решит проблему - после того как на комп1 запишут документ, на комп3 вызовут УстановитьНовыйНомер, который выдаст номер такой же, как на мы принудительно поставим на комп2. (7) Дело не в суеверии :) Номера просто от балды |
|||
10
Галахад
гуру
21.02.13
✎
09:28
|
(9) Ну, попробуй сделать два номера 7777
|
|||
11
Serg_1960
21.02.13
✎
09:36
|
Прикольное (3) - "ПриУстановкеНовогоНомера - номера еще нет. ПередЗапись - номера еще нет." - бедняга, как тебя переклинило на номере, которого ещё нет :)
PS: Зачем автору номер, которого ещё нет? Не проще ли будет анализировать номер, который уже есть? :) |
|||
12
Stronich
21.02.13
✎
09:36
|
(10) Естественно, что два номера одинаковых сделать не получиться. Только узнаю я о том, что они одинаковые только тогда, когда на одном компе ошибка вылетит
|
|||
13
Stronich
21.02.13
✎
09:37
|
(11) Ну дак подскажи, где его лучше анализировать
|
|||
14
Serg_1960
21.02.13
✎
10:02
|
Да там-же, где искал номер, которого ещё нет.
... НомерКоторыйУжеЕсть = ВернутьПоследнийНомерПоНумераторуИсточника(Источник); Если Найти(НомерКоторыйУжеЕсть, "6666") Тогда Источник.Номер = СтрЗаменить(НомерКоторыйУжеЕсть, "6666", "7777"); ... |
|||
15
lion11
21.02.13
✎
10:06
|
Навскидку: В подписке ПриЗаписи, ну или в модуле в процедуре ПослеЗаписи исправить номер, если он попал в запретный интервал.
|
|||
16
Stronich
21.02.13
✎
10:20
|
(14) А что за функция такая - ВернутьПоследнийНомерПоНумераторуИсточника() ?
(15) Да, ПриЗаписи это вариант - не рассматривал его, потому что не хотел, чтобы документ два раза в базу записывался. А сейчас подумал, что такое произойдет только с одним документом. Наверно, в подписке ПриЗаписи и сделаю контроль. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |