|   |   | 
| 
 | Возможен ли конфликт блокировок? | ☑ | ||
|---|---|---|---|---|
| 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 не на мутексе,а на семафоре,насколько я помню.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |