Имя: Пароль:
1C
1С v8
Не работает запись константы перед записью документа
,
0 BlackJack
 
07.01.12
13:08
Стоит задача присвоения каждому документу короткого числового уникального идентификатора. Добавил расходной накладной реквизит УИД, создал константу ТекущийУИД и в модуле накладной в процедуре ПередЗаписью вставил такой кусочек кода:

   Если УИД = 0 Тогда
       ТекУИД = Константы.ТекущийУИД.Получить();
       ТекУИД = ТекУИД + 1;
       Константы.ТекущийУИД.Установить(ТекУИД);
       УИД = ТекУИД;
   КонецЕсли;

Вроде всё просто, но очень часто константа не увеличивается. По журналу происходит отмена транзакции. Не пойму, в чём дело. Хелп, плз.
1 mirosh
 
07.01.12
13:14
ИМХО
неудачная реализация с константой. Все-таки они не для того, чтобы часто менять их значения. Отмена транзакции может, например, происходить, если эта константа уже заблокирована на запись. Например, если другой пользователь параллельно записывает документ.
Лучше создать регистр сведений, в котором хранить текущую информацию об УИДе. Пусть в нем и будет одна строка, но работать это будет быстрее, чем с константой.
2 BlackJack
 
07.01.12
13:42
Не думаю, что запись константы отличается от записи регистра.
Может поиграть с блокировками или перенести в процедуру ПриЗаписи()?
Сейчас нагрузка никакая, по логу смотрел - константа не заблокирована.
Вот пример лога http://i32.fastpic.ru/big/2012/0107/ab/cfb3ad370fdbfbabcc748a3f96b320ab.png
Не пойму, откуда появляется регистр сведений (ОбъектыДоступа)? RLS пока не включён.
3 zak555
 
07.01.12
13:44
использовать параметры сеанса ?
4 BlackJack
 
07.01.12
14:16
С ними разбираться пока руки не дошли. Но разве, судя по названию, они не для каждого сеанса отдельно?
6 BlackJack
 
12.01.12
23:33
Добавил такой же код в ПриЗаписи() накладной - всё равно идут повторы УИДа.
Не пойму в чём дело, почему-то транзакция отменяется.

Дата, время    Событие    Статус транзакции    Метаданные
12.01.2012 10:12:59    Данные. Изменение    Отменена 12.01.2012 10:12:59 (597648)    Константа. Текущий УИД
           
12.01.2012 10:12:59    Данные. Изменение    Отменена 12.01.2012 10:12:59 (597648)    Регистр сведений. Объекты доступа документов
7 hhhh
 
12.01.12
23:56
если отмена транзакции, то и запись не происходит конечно. А зачем ты зафигачил запись константы в одну транзакцию с регистром сведений?
8 BlackJack
 
13.01.12
11:17
Я не фигачил, он наверное по подписке на события вызывается. Я в коде обработчика событий посмотрел, там нигде отказа не м.б.
Закон Брукера: Даже маленькая практика стоит большой теории.