|
Управляемые блокировки, грязное чтение | ☑ | ||
---|---|---|---|---|
0
mxs089
28.10.15
✎
11:06
|
РС Цены, колонки - Номенклатура, Цена, регистр периодический.
Блокировка управляемая. Открываю транзакцию, пишу новую цену и запросом читаю данные, после отменяю транзакцию, запросом получаю новую цену... Файловый вариант. Как читать зафиксированную цену? |
|||
1
DmitrO
28.10.15
✎
11:12
|
не всякий вызов ОтменитьТранзакцию() приводит к ее отмене )
|
|||
2
DmitrO
28.10.15
✎
11:12
|
как и, не всякий вызов начать транзакцию приводит к ее началу )
|
|||
3
mistеr
28.10.15
✎
11:13
|
Может еще где транзакция открывается?
|
|||
4
Гёдза
28.10.15
✎
11:13
|
ну это не вложенная транзакция, иначе повторное чтение вызвало бы ошибку
|
|||
5
Тoлько_
Просмотр 28.10.15
✎
11:13
|
(0) Сумбур какой-то. Где транзакцию открываешь? Только не говори что в обработке проведения документа, которым устанавливаешь цены.
|
|||
6
Господин ПЖ
28.10.15
✎
11:22
|
эм... а в файловой "грязное чтение" вообще возможно?
|
|||
7
scanduta
28.10.15
✎
11:25
|
Что бы читать зафиксированную цену , нужно читать в транзакции
|
|||
8
H A D G E H O G s
28.10.15
✎
11:30
|
Автор, вы не имеете среди знакомых Павленского Пётра, а то нам ваш перформанс непонятен.
|
|||
9
ptiz
28.10.15
✎
11:33
|
(0) "и запросом читаю данные" - в другом сеансе или этом же?
|
|||
10
mxs089
29.10.15
✎
10:53
|
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Блокировка = Новый БлокировкаДанных; Элемент = Блокировка.Добавить("РегистрСведений.Цены"); Элемент.УстановитьЗначение("Номенклатура", Номенклатура); Элемент.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Менеджер = РегистрыСведений.Цены.СоздатьМенеджерЗаписи(); Менеджер.Период = Дата; Менеджер.Номенклатура = Номенклатура; Менеджер.Цена = Цена; Менеджер.Записать(Истина); Ресурсы = РегистрыСведений.Цены.ПолучитьПоследнее(, Новый Структура("Номенклатура", Номенклатура)); Сообщить(Ресурсы.Цена); ОтменитьТранзакцию(); |
|||
11
mxs089
29.10.15
✎
11:23
|
запускаю два сеанса под разными пользователями, под одним запускаю обработку, которая меняет цены, под вторым в это время происходит чтение цены, мне вылазит старая цена, хотя после завершения обработки ценник может измениться, как произвести блокировку таблицы, чтобы остальные пользователи не могли получить старый ценник?
|
|||
12
rozer76
29.10.15
✎
11:23
|
(10) если чтение в том же сеансе то получаете "новую" цену также для изучения можно это посмотреть http://its.1c.ru/db/metod8dev/content/2733/hdoc/_top/%F2%F0%E0%ED%E7%E0%EA%F6%E8%E8
Теперь если в др. сеансе: уже на "Блокировка.Заблокировать();" повиснет др. сеанс а как только транзакция кончиться - прочитает "старую" цену. Если бы явной блокировки вообще не было - файловый вариант в отличии от клиент-серверного не читает не зафиксированные данные т.е. вкл. версионирование. А для клиент сервера или использовать чтение в транзакции или вкл. версионирование в СУБД. http://its.1c.ru/db/metod8dev/content/2604/hdoc/_top/%F2%F0%E0%ED%E7%E0%EA%F6%E8%E8 |
|||
13
1sanekmaloi1
29.10.15
✎
11:29
|
(11)Читающий цену код показывай, транзакцией похоже там и не пахнет.
|
|||
14
mxs089
29.10.15
✎
11:35
|
Запись новой цены
НачатьТранзакцию(); Менеджер = РегистрыСведений.Цены.СоздатьМенеджерЗаписи(); Менеджер.Период = Дата; Менеджер.Номенклатура = Номенклатура; Менеджер.Цена = Цена; Менеджер.Записать(Истина); Дата = ТекущаяДата(); КонецДата = ТекущаяДата() + 60; Пока Дата < КонецДата Цикл Дата = ТекущаяДата(); КонецЦикла; ОтменитьТранзакцию(); Чтение 2 пользователь Ресурсы = РегистрыСведений.Цены.ПолучитьПоследнее(, Новый Структура("Номенклатура", Номенклатура)); Сообщить(Ресурсы.Цена); |
|||
15
H A D G E H O G s
29.10.15
✎
11:39
|
(14) 2 пользователь пусть читает в транзакции
|
|||
16
rozer76
29.10.15
✎
11:58
|
(15) вроде как для файловой ИБ необязательно - см. 12
|
|||
17
rozer76
29.10.15
✎
12:00
|
(16) + хотя, попробуй... фиг знает какая 1сплатформа ну до кучи можно попробовать и блокировку попробовать и в записи и в чтении... интересно на каком варианте у него заработает... хотя и не логично
|
|||
19
mxs089
29.10.15
✎
13:17
|
(18) следи за базаром
|
|||
20
ptiz
29.10.15
✎
13:37
|
(14) И что не так?
Тут ты указал, что 2ой пользователь читает после команды "ОтменитьТранзакцию". Т.е. восстановлено то, что было до записи набора. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |