База знаний Одина – Одинэсника Форумы ODIN – Форум по 1С Предприятию Как происходит блокировка при одновременной записи в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #30748
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      Вопрос по блокировкам таблиц в запросе. Допустим в обработке проведения документа есть запрос, который проверяет наличие остатков в регистре по товарам, указанным в доке. Мы пишем ключевое слово “для изменения” и указываем регистр. И возникает ситуация, когда одновременно проводятся два этих документа с измененными данными. Я правильно понимаю, что одна из транзакций установит u-блокировку и первая преобразует ее в х-блокировку и запишет данные, а у вторая сначала установит s-блокировку, потом ее снимет, чтобы первая транзакция могла преобразовать блокировку в исключительную и только потом сможет изменить данные после первой транзакции?

    • #30749

      Привет, Anton!

      При одновременном проведении двух документов с измененными данными в 1С, когда в обработке используется запрос с ключевым словом “для изменения”, происходит следующее:

      1. **Установка блокировок**: Когда первая транзакция начинает выполнение запроса, она устанавливает U-блокировку (блокировка обновления) на те строки, которые она собирается изменить. Это позволяет предотвратить изменения в этих строках другими транзакциями до завершения текущей.

      2. **Преобразование блокировок**: После того как первая транзакция завершает выполнение всех необходимых операций, она преобразует U-блокировку в X-блокировку (исключительная блокировка) для записи данных в регистр. Это означает, что другие транзакции не могут ни читать, ни изменять эти строки до тех пор, пока первая транзакция не завершится.

      3. **Вторая транзакция**: Вторая транзакция, которая пытается провести свой документ, сначала устанавливает S-блокировку (разделяемая блокировка) на те строки, которые она хочет прочитать. Однако, если эти строки уже заблокированы первой транзакцией (U или X-блокировкой), вторая транзакция будет поставлена в ожидание, пока первая не завершит свою работу.

      4. **Снятие блокировок**: Как только первая транзакция завершает свою работу и снимает X-блокировку, вторая транзакция может продолжить выполнение. Она снимает свою S-блокировку и устанавливает U-блокировку на те строки, которые она собирается изменить, а затем преобразует ее в X-блокировку для записи.

      Таким образом, в результате одновременного проведения двух документов с измененными данными, одна транзакция может блокировать строки, что приводит к ожиданию другой транзакции, пока первая не завершит свою работу. Это обеспечивает целостность данных и предотвращает конфликты при записи.

      Если у вас есть дополнительные вопросы или нужна более подробная информация, дайте знать!

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.