Имя: Пароль:
1C
1С v8
Как правильно сделать нумерацию
,
0 YHVVH
 
19.07.13
22:27
Хочу спросить совета.

Есть регистр сведений , одно из измерений - Номер (тип число),

Есть форма записи , пользователь нажимает записать.
необходимо чтоб при записи определялся следующий номер и соответственно записывался.

найти следующий номер можно в запросе, а вот как сделать чтоб нумерация соблюдалась уникальная, ведь если одновременно работают несколько пользователей, то существует вероятность что будут записи с одним и тем же номером.

Как этого можно избежать ?
1 shuhard
 
19.07.13
22:33
(0) засади в измерение справочник и нумеруй его средствами платформы
2 Fragster
 
гуру
19.07.13
22:34
блокируй таблицу перед присвоением номера
3 YHVVH
 
19.07.13
22:35
(2) в какой момент я должен буду блокировать и как?
4 YHVVH
 
19.07.13
22:35
(1) идея хорошая , но хотелось бы без справочника.
5 Тьма
 
19.07.13
22:36
(2)Перед поиском свободного номера, причем блокировать на чтение.
6 YHVVH
 
19.07.13
22:37
(5) а можно подробней , как заблокировать на чтение всю таблицу.
7 YHVVH
 
19.07.13
22:38
сейчас сделано так

у меня процедура

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   
   Если НЕ ЗначениеЗаполнено(ТекущийОбъект.НПП) Тогда
       ТекущийОбъект.НПП = ПолучитьНПП();
   КонецЕсли;
   
КонецПроцедуры
8 YHVVH
 
19.07.13
22:40
в процессе работе получаются двойные номера :-(( редко но получаются
9 wertyu
 
19.07.13
22:49
а в ПолучитьНПП() чего?
10 YHVVH
 
19.07.13
22:53
(9) просто функция которая возвращает результат запроса

ВЫБРАТЬ ПЕРВЫЕ 1
   Тест.Номер КАК Номер
ИЗ
   РегистрСведений.Тест КАК Тест

УПОРЯДОЧИТЬ ПО
   Номер УБЫВ
11 Fragster
 
гуру
19.07.13
22:58
блокировки - управляемые? или автоматические?
12 Fragster
 
гуру
19.07.13
22:59
если автоматические - то в запросе - ДЛЯ ИЗМЕНЕНИЯ, если управляемые - то через объект БлокировкаДанных с ипом Исключительная
13 YHVVH
 
19.07.13
22:59
(11) управляемый
14 YHVVH
 
19.07.13
23:00
объект БлокировкаДанных с ипом Исключительная

не понял.
15 YHVVH
 
19.07.13
23:02
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Тест");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

так?
16 Fragster
 
гуру
19.07.13
23:07
(15) ну, типа того
17 wertyu
 
19.07.13
23:09
Разрешенные
18 wertyu
 
19.07.13
23:10
у тебя будет блокировка получения
19 YHVVH
 
19.07.13
23:12
(17) (18) не понял, что разрешенные ?
добавить к (15 )еще в запросе моем ВЫБРАТЬ разрешенные сделать?
20 wertyu
 
19.07.13
23:39
да
21 wertyu
 
19.07.13
23:41
ну и обработку с пустым результатом
22 Fragster
 
гуру
19.07.13
23:47
(17)(18)(20)(21) не для того РАЗРЕШЕННЫЕ. совсем не для того.
23 EvgeniuXP
 
19.07.13
23:51
права
24 beer_fan
 
20.07.13
00:48
(0) Не парься с блокировками... просто перед записью считывай крайний номер, и добавляй 1.
25 YHVVH
 
20.07.13
08:34
(24) какой крайний номер ?