|
Возможен ли конфликт блокировок? | ☑ | ||
---|---|---|---|---|
0
formista2000
23.09.22
✎
16:46
|
Процедура ИзменитьНаименованиеНоменклатуры(Кнопка)
НачатьТранзакцию(); НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект(); НоменклатураОбъект.Наименование = НоменклатураОбъект.Наименование + " (изменения)"; НоменклатураОбъект.Записать(); ЗафиксироватьТранзакцию(); КонецПроцедуры Если да, то как его избежать? ЗЫ: да, это вопрос с теста. А то я с управляемыми блокировками только с регистрами сталкивался. |
|||
1
Волшебник
модератор
23.09.22
✎
16:50
|
Здесь не нужна транзакция
|
|||
2
Галахад
гуру
23.09.22
✎
16:51
|
Конечно возможен. Фиг его знает.
|
|||
3
formista2000
23.09.22
✎
16:53
|
(1) А как? Через попытка..исключение?
|
|||
4
formista2000
23.09.22
✎
16:53
|
(2) вот и я про то же, а если этот элемент справочника у кого-то открыт?
|
|||
5
vde69
23.09.22
✎
16:54
|
(3) для записи одного объекта транзакция не нужна в принципе.
транзакция нужна для того, что бы записать несколько объектов как одно целое (что бы нельзя было записать только часть данных) |
|||
6
rozer76
23.09.22
✎
16:55
|
Нужна объектная блокировка через заблокироватьданныеобъекта. Управляемая не нужна. И транзакция тоже ечли один элемент меняешь - есть уже неявная
|
|||
7
formista2000
23.09.22
✎
16:57
|
(6) 8.3.18.1520 ЗаблокироватьДанныеОбъекта в синтаксисе помощнике не нашёл ((
|
|||
8
H A D G E H O G s
23.09.22
✎
17:02
|
(0)
Нет верного ответа |
|||
9
H A D G E H O G s
23.09.22
✎
17:03
|
Хороший вопрос, кстате. Надо взять его на вооружение, НО. Никто на него и не ответит
|
|||
10
rozer76
23.09.22
✎
17:03
|
(7) ЗаблокироватьДанныеДляРедактирования
|
|||
11
H A D G E H O G s
23.09.22
✎
17:04
|
Тут будет 2 вариант,
1) Конфликт блокировок будет. 2) Конфликта не будет, будет несоответствие версию объектов. Смотря в какой момент будет запись объекта в другой транзакции. |
|||
12
H A D G E H O G s
23.09.22
✎
17:05
|
Если другая транзакция будет активна в момент выполнения кода - будет ожидание на блокировке и конфликт по истечению времени.
Если другая транзакция завершиться в момент, между кодом НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект(); и НоменклатураОбъект.Записать(); то будет несоответствия версий |
|||
13
rozer76
23.09.22
✎
17:07
|
(7) или Объект.Заблокировать() в Попытке
|
|||
14
rozer76
23.09.22
✎
17:08
|
(12) ну тогда пускай оставляет транзакцию и делает упр.блокировку исключительную перед
НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект(); |
|||
15
rozer76
23.09.22
✎
17:12
|
(11) от п.п. 2 как раз защитит ЗаблокироватьДанныеДляРедактирования() если интерактивно уже кто-то начал менять объект.
|
|||
16
rozer76
23.09.22
✎
17:59
|
(0)
А вообще зависит ещк асколько ответственно нужно тебе менять данные - вот почитай когда нужна объектная а когда транзакционная а когда и та и другая вместе для ответственных изменений. https://its.1c.ru/db/v8std/content/490/hdoc https://its.1c.ru/db/v8std#content:648:hdoc |
|||
17
2mugik
24.09.22
✎
13:45
|
Что-то вспомнилось:
Мальчик, а что у тебя на случай если ты второй билет потеряешь? -А на этот случай у меня проездной. |
|||
18
2mugik
24.09.22
✎
14:09
|
Кстати, в java есть понятие "мьютекс" по-моему нечто похожее на управляемую блокировку 1С.
|
|||
19
H A D G E H O G s
24.09.22
✎
15:29
|
(18) И в Windows тоже есть мьютексы для ограничения доступа к данным и критические секции для кода. И в SQL тоже есть. Везде есть.
|
|||
20
ДедМорроз
24.09.22
✎
18:08
|
Еонфликта блокировок тут быть не может.
Если объект уже заблокирован,то его чтение не пройдет,а если пройдет,то будет для объекта устанавливаться блокировка сразу для записи. Напоминаю,что конфликт блокировок,это когда процесс 1 сначала блокирует А потом Б,а процесс 2 сначала Б потом А. Если режим блокировок управляемый,то будет проблема эскалации,когда сначала будет поставлена блокировка на чтение,а потом на запись. |
|||
21
ДедМорроз
24.09.22
✎
18:10
|
Крттическая секция в windows не на мутексе,а на семафоре,насколько я помню.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |