Имя: Пароль:
1C
1С v8
Вклиниться в стандартную нумерацию документов
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) Да, ПриЗаписи это вариант - не рассматривал его, потому что не хотел, чтобы документ два раза в базу записывался. А сейчас подумал, что такое произойдет только с одним документом. Наверно, в подписке ПриЗаписи и сделаю контроль.