|
Блокировка данных. Как правильно расписать? | ☑ | ||
---|---|---|---|---|
0
new1snik
21.10.13
✎
15:16
|
День добрый.
Нужно заблокировать данные в регистрах на момент выполнения запроса. Запрос собирает данные из 3 регистров накопления. Размещаю этот код перед запросом: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки.УстановитьЗначение("Регистратор", ДокументОбъект.Ссылка); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыВРознице"); ЭлементБлокировки.УстановитьЗначение("Регистратор", ДокументОбъект.Ссылка); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыВРезервеНаСкладах"); ЭлементБлокировки.УстановитьЗначение("Регистратор", ДокументОбъект.Ссылка); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Будет ли это работать как надо и нужно ли как-то дополнительно потом разблокировать заблокированные регистры? |
|||
1
Рыжий Лис
21.10.13
✎
15:20
|
Блокировка работает внутри транзакции. Завершится транзакция и блокировка снимется.
|
|||
2
new1snik
21.10.13
✎
15:25
|
(1) Получается, такая блокировка будет работать только пока выполняется запрос в процедуре? И код блокировки верен?
|
|||
3
Рыжий Лис
21.10.13
✎
16:09
|
Если нет транзакции то и не будет работать.
В коде нужно оставить только одну строку Новый БлокировкаДанных; и Блокировка.Заблокировать(); |
|||
4
Мэс33
21.10.13
✎
16:14
|
Интересная тема.
Вот вопрос: на момент создания документа - движений по РН еще нет. Но надо заблокировать прочтенные остатки по выбранной номенклатуре. То есть - я понимаю так, что надо блокировать конкретные значения в регистре, пример: ЭлементБлокировки.УстановитьЗначение("Номенклатура",Справочники.Номенклатура.НайтиПоНаименованию("Товар")); И это сделать перед запросом. Правильно ли думаю? |
|||
5
Рыжий Лис
21.10.13
✎
16:44
|
Если надо по одной номенклатуре то можно и так. А вообще есть ИспользоватьИзИсточникаДанных, например из табличной части документа. Конечно перед запросом.
|
|||
6
GROOVY
21.10.13
✎
16:46
|
||||
7
ptiz
21.10.13
✎
16:48
|
(0) В чем цель такой странной блокировки?
|
|||
8
Sabbath
21.10.13
✎
16:54
|
(0) а зачем?
8.1 или 8.2.? |
|||
9
GROOVY
21.10.13
✎
16:56
|
(7) (8) Никакого смысла там нет.
|
|||
10
new1snik
22.10.13
✎
07:05
|
(7) (8) Задача стоит следующая: существует рабочая обработка, создающая резервы по определенному заказу. Чтобы создать резервы запросом собираются данные по различным регистрам, и мне, если я все правильно понимаю, нужно заблокировать возможность внесения изменений в регистры в момент, когда обработка создает резервы.
|
|||
11
new1snik
22.10.13
✎
07:06
|
(6) Спасибо, определенно лишним мне не будет.
|
|||
12
ptiz
22.10.13
✎
08:49
|
(10) "нужно заблокировать " - зачем? цель понимаешь?
|
|||
13
new1snik
22.10.13
✎
08:56
|
(12) Чтобы в момент проведения резервирования не был зарезервирован тот же товар, который резервируем мы или не был продан.
|
|||
14
GROOVY
22.10.13
✎
09:08
|
(13) Описанное в (0) не даст Вам этот результат. Даже больше скажу, скорее всего вообще ничего не даст.
|
|||
15
new1snik
22.10.13
✎
09:20
|
(14) Как заметно в блокировках я ничего не смыслю. Но почему невозможно добиться поставленной цели?
|
|||
16
vhl
22.10.13
✎
09:28
|
а "ДЛЯ ИЗМЕНЕНИЯ" не подойдет?
|
|||
17
new1snik
22.10.13
✎
09:39
|
(16) Хм, я не знал о такой штуке, нужно смотреть, но беглое ознакомление дает надежду на то, что можно попытаться использовать ее.
|
|||
18
ptiz
22.10.13
✎
10:46
|
(15) " проведения резервирования не был зарезервирован тот же товар" - тогда блокировка должна быть по значениям измерения, в котором указаны товары этого документа. И только по этому складу (если в алгоритме не заложено какое-нибудь автоматическое распределение по складам).
|
|||
19
GROOVY
22.10.13
✎
10:49
|
(16) При автоматических - подойдет.
(15) Просто попробуйте мыслить логически: Вы говорите заблокировать записи в регистрах которые принадлежат текущему документу, что будет заблокировано? Это то что Вы хотели? |
|||
20
new1snik
05.11.13
✎
11:01
|
Так я на них и завис после этого. Сейчас навтыкал в запрос где только можно ДЛЯ ИЗМЕНЕНИЯ и пытаюсь это тестировать.
ЗАпускаю отладку, ставлю точку останова после выполнения запроса и запускаю еще один сеанс, где пытаюсь выполнить туже операцию. Во втором сеансе ведь должно быть невозможно прочитать запросом те же данные, что и в первом сеансе. Но данные считываются. Есть ли какие то дополнительные условия для применения ДЛЯ ИЗМЕНЕНИЯ в запросе? |
|||
21
new1snik
05.11.13
✎
12:47
|
(19) Получается нужно блокировать не определенные записи в регистре накопления, а весь регистр, например, РН ТоварыВРезервеНаСкладах.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |