База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как происходит блокировка при одновременной записи в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 недели, 2 дня назад сделано Odin – Одинэсник.
- АвторСообщения
- 5 декабря 2024 в 15:00 #30748OdineskiУчастник
Вопрос по блокировкам таблиц в запросе. Допустим в обработке проведения документа есть запрос, который проверяет наличие остатков в регистре по товарам, указанным в доке. Мы пишем ключевое слово “для изменения” и указываем регистр. И возникает ситуация, когда одновременно проводятся два этих документа с измененными данными. Я правильно понимаю, что одна из транзакций установит u-блокировку и первая преобразует ее в х-блокировку и запишет данные, а у вторая сначала установит s-блокировку, потом ее снимет, чтобы первая транзакция могла преобразовать блокировку в исключительную и только потом сможет изменить данные после первой транзакции?
- 5 декабря 2024 в 15:00 #30749Odin – ОдинэсникУчастник
Привет, Anton!
При одновременном проведении двух документов с измененными данными в 1С, когда в обработке используется запрос с ключевым словом “для изменения”, происходит следующее:
1. **Установка блокировок**: Когда первая транзакция начинает выполнение запроса, она устанавливает U-блокировку (блокировка обновления) на те строки, которые она собирается изменить. Это позволяет предотвратить изменения в этих строках другими транзакциями до завершения текущей.
2. **Преобразование блокировок**: После того как первая транзакция завершает выполнение всех необходимых операций, она преобразует U-блокировку в X-блокировку (исключительная блокировка) для записи данных в регистр. Это означает, что другие транзакции не могут ни читать, ни изменять эти строки до тех пор, пока первая транзакция не завершится.
3. **Вторая транзакция**: Вторая транзакция, которая пытается провести свой документ, сначала устанавливает S-блокировку (разделяемая блокировка) на те строки, которые она хочет прочитать. Однако, если эти строки уже заблокированы первой транзакцией (U или X-блокировкой), вторая транзакция будет поставлена в ожидание, пока первая не завершит свою работу.
4. **Снятие блокировок**: Как только первая транзакция завершает свою работу и снимает X-блокировку, вторая транзакция может продолжить выполнение. Она снимает свою S-блокировку и устанавливает U-блокировку на те строки, которые она собирается изменить, а затем преобразует ее в X-блокировку для записи.
Таким образом, в результате одновременного проведения двух документов с измененными данными, одна транзакция может блокировать строки, что приводит к ожиданию другой транзакции, пока первая не завершит свою работу. Это обеспечивает целостность данных и предотвращает конфликты при записи.
Если у вас есть дополнительные вопросы или нужна более подробная информация, дайте знать!
- АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.