Управляемые блокировки по полям из свойства "Поля блокировки данных"

1. mshumakov 8 22.01.19 13:45 Сейчас в теме
Добрый день, коллеги!
Призываю коллективный разум.
Вопрос по установлению управляемой блокировки на пространство справочника по имени поля, заданному в свойстве «Поля блокировки данных», например, по наименованию.
Предположим, что мы работаем со справочником «Товары». Транзакция № 1 хочет что-то сделать с элементом «Товар 1» и устанавливает исключительную управляемую блокировку на элемент по ссылке. В это время транзакция № 2 тоже хочет установить исключительную управляемую блокировку, но пытается это сделать по наименованию «Товар 1» и становится в ожидание.
Вопрос в следующем: как менеджер блокировок узнает, что в описанном случае транзакции пытаются установить блокировку на один и тот же элемент?
Менеджер блокировок MS SQL Server при блокировке ключей работает достаточно прямолинейно: берется ключ, вычисляется на его основе хэш и помешается в таблицу. Другая транзакция, обращаясь к этой же строке, тоже вычисляет хэш на основе ключа, обнаруживает такой же хэш в таблице блокировки и, в случае несовместимости, становится в ожидание. В описанном мной случае применить подобный механизм напрямую не получится, так как блокировка устанавливается по разным полям.
Я пытался исследовать разные гипотезы, такие как:
• При установке блокировки по ссылке, устанавливаются так же блокировка по наименованию (или по другим полям, указанным в свойстве)
• При установке блокировки по наименованию, получаются ссылки с таким же наименованием и на них устанавливаются блокировки
В общем, было предположение, что необходимо дополнительное обращение к СУБД для получения дополнительных данных. Но ни технологический журнал, ни профайлер никаких дополнительных запросов не поймали.
Таким образом, этот механизм не текущий момент мне не понятен. Есть какие-нибудь мысли и/или информация на этот счет?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 22.01.19 14:11 Сейчас в теме
Можно же проверить, наложить блокировку по ссылке, а во втором сеансе по наименованию, а потом посмотреть, блокируется что или нет. Сам же менеджер блокировок 1С ничего не блокирует, а просто содержит информацию о том, какая транзакция хотела менять какие-либо данные.

На ИТС, в главе 9.3.4 (к платформе 8.3.13) написано:
При удалении или изменении объекта, для которого доступна блокировка по полям, выполняется одна блокировка, включающая в себя блокировку по полю Ссылка и по всем полям, указанным в свойстве Поля блокировки данных. При выполнении изменения объект блокируется как по «старым» значениям полей (которые были до начала записи), так и по «новым» значениям (которые находятся в записываемом объекте).

Но это в случает изменения объекта, а если мы его пытаемся просто заблокировать для чтения, то не понятно что в этом случае будет. Проверить будет проще.
4. mshumakov 8 22.01.19 14:21 Сейчас в теме
(2)Блокировка происходит - это я первым делом проверил. Если в технологический журнал выводить событие TLOCK, то будет видно, что в первом случае блокировка накладывается на пространство справочника по ссылке, во втором - по наименованию, но непонятно, как определяется их связь.
Вопрос, конечно, чисто теоретический - практической пользы в нем никакой нет, чистое любопытство.
3. пользователь 22.01.19 14:20
Сообщение было скрыто модератором.
...
5. mshumakov 8 22.01.19 14:23 Сейчас в теме
(3)Так я про блокировку справочника и говорю. Как я уже говорил выше, вопрос - это чисто теоретический, порожденный любопытством, а не практической необходимостью.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот