|
Вопрос про управляемую блокировку | ☑ | ||
---|---|---|---|---|
0
GurinDoku
05.09.16
✎
18:30
|
Делаю движения:
Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина; Движения.ОстаткиТоваров.Записывать = Истина; Движения.ОстаткиТоваров.Записать(Истина); Ставлю точку останова после Записать(истина). То есть транзакция еще не закончилась и регистр заблокирован. Под другим сеансом через консоль запросов запускаю запрос по остаткам на ОстаткиТоваров по ВСЕМ измерениям и периодам. Блокировки нет. Так и должно быть? СУБД MSSQL 2005. 1c 8.3 |
|||
1
GurinDoku
05.09.16
✎
18:34
|
Если перепровожу другой документ с такими же значениями ключевых полей регистров, то блокировка срабатывает.
|
|||
2
kinsm
05.09.16
✎
18:35
|
Да. Значит запрос выполняется вне транзакции
|
|||
3
GurinDoku
05.09.16
✎
18:41
|
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Запрос = Новый Запрос( "ВЫБРАТЬ | ОстаткиТоваровОстатки.Склад, | ОстаткиТоваровОстатки.Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки" ); Запрос.Выполнить(); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "work!"; Сообщение.Сообщить(); ЗафиксироватьТранзакцию(); |
|||
4
GurinDoku
05.09.16
✎
18:42
|
Ошибся. Когда параллельно провожу документ с такими же значениями свойств регистров, то блокировки НЕТ!!
|
|||
5
GurinDoku
05.09.16
✎
18:44
|
Даже если запускаю запрос под транзакцией, то блокировки все равно не происходит. Блокировка также не происходит, если пытаюсь перепровести документ такого же типа и с такими же записываемыми движениями....
|
|||
6
GurinDoku
05.09.16
✎
18:48
|
Разделение итогов по регистру включено. Режим блокировок "Управляемая" и у документа и регистра...
|
|||
7
xafavute
05.09.16
✎
18:52
|
это блокировка на запись, а не на чтение
|
|||
8
saaken
05.09.16
✎
18:52
|
(0) так и должно быть
|
|||
9
GurinDoku
05.09.16
✎
18:57
|
(7) Я и записываю. То есть блокировка не работает ни на чтение, ни на запись.
|
|||
10
GurinDoku
05.09.16
✎
19:02
|
Запускаю первый документ, перепровожу и останавливаюсь на точке останова после "Записать". Затем под другим пользователем запускаю на перепроведение другой документ с такими же значениями полей набора записей движений. Блокировки нет. Такая ситуация именно когда использую "БлокироватьДляИзменения". При использовании явной блокировки через объект "блокировка данных", блокировка срабатывает! Также блокировка срабатывает после записи набора, если использовать "Автоматический" режим блокировки, но только когда я ПЕРЕПРОВОЖУ документ. На чтение в автоматическом варианте блокировки при выполнении запроса как в транзакции, так и без нее блокировка не происходит.
|
|||
11
H A D G E H O G s
05.09.16
✎
19:02
|
а в свойствах самой конфы?
|
|||
12
H A D G E H O G s
05.09.16
✎
19:07
|
фух, вспомнил.
Когда перепроводишь первый док - измени его ТЧ. |
|||
13
H A D G E H O G s
05.09.16
✎
19:07
|
или проводи его из непроведенного состояния. Короче, записи в регистре должны поменяться.
|
|||
14
GurinDoku
05.09.16
✎
19:12
|
В свойствах конфы "Автоматическая и управляемый"
|
|||
15
GurinDoku
05.09.16
✎
19:12
|
(13) Все равно не работает....
|
|||
16
H A D G E H O G s
05.09.16
✎
19:16
|
(15) Скинь конфу или постучись в скайп
|
|||
17
H A D G E H O G s
05.09.16
✎
19:16
|
vasiliy--ivanovich
|
|||
18
GurinDoku
05.09.16
✎
19:16
|
Если у кого будет время, посмотрите:
https://yadi.sk/d/h_Jj3KhyuoWY3 Документ "Приходная накладная", ОбработкаПроведения. |
|||
19
H A D G E H O G s
05.09.16
✎
19:21
|
Все блокируется.
|
|||
20
Tateossian
05.09.16
✎
19:22
|
(0) А зачем вот это:
Движения.ОстаткиТоваров.Записывать = Истина; ??? |
|||
21
H A D G E H O G s
05.09.16
✎
19:24
|
Нормальная SQL блокировка вылетает. Ибо clastered index scan на запросе всех остатков.
|
|||
22
Tateossian
05.09.16
✎
19:27
|
(10) Поставь точку останова в модуле набора записей.
|
|||
23
H A D G E H O G s
05.09.16
✎
19:27
|
||||
24
GurinDoku
05.09.16
✎
19:28
|
(19) Если я провожу первый документ, ставлю точку останова после записи, то если начну проводить второй документ, то он должен "подвиснуть" пока я выйду из отладки в первом документе (первой транзакции) ? (20) От безысходности....
|
|||
25
H A D G E H O G s
05.09.16
✎
19:28
|
(24) Да. Так и есть. 20 секунд висит (по дефолту), потом (23)
|
|||
26
GurinDoku
05.09.16
✎
19:45
|
(25) Спасибо большое. Буду копаться, смотреть... У товарища попробую запустить.
|
|||
27
H A D G E H O G s
05.09.16
✎
20:26
|
Скорее всего у тебя стоит snapshot.
Он даст прочитать остатки. Чтобы вызвать блокировку, в первом сеансе открой 2 документ , измени количество, и остановись после Движения.ОстаткиТоваров.Записать(Истина); Во втором сеансе открой 3 документ, выбери тот же склад и номенклатуру, установи галочку "ОУ" и будет тебе управляемая блокировка. |
|||
28
disvix
05.09.16
✎
20:28
|
включен режим разделения итогов, в таблицу итогов добавляется еще одно поле "Разделитель" , данные пишутся параллельно/
|
|||
29
H A D G E H O G s
05.09.16
✎
20:36
|
(28) выключен
|
|||
30
H A D G E H O G s
05.09.16
✎
20:37
|
БлокироватьДляИзменения=истина выключает разделение
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |