v8: Ключевое слово ДЛЯ ИЗМЕНЕНИЯ Блокировка записей от считывания (от чтения!).
Она нужна, если в модуле проведения документа, например, сначала рассчитываются (получаются) остатки, на основе которых делаются расчеты и движения, влияющие на те же регистры (остатки).
Рассмотрим многопользовательский режим работы:
Процесс А: Начинает транзакцию. Считывает остатки (допустим получилось 10)
Процесс Б: Начинает транзакцию. Считывает остатки (получилось 10)
Процесс А: Контролирует остатки, выполняет расчеты (допустим, нужно списать 8),
Процесс А: Выполняет запись новых данных (10-8 = 2). Завершает транзакцию.
Процесс Б: Контролирует остатки (10 > 7), думает, что все ок. Выполняет расчеты (допустим, нужно списать 7)
Процесс Б: ОШИБКА: Он не может списать 7, поскольку в регистре уже не хватает остатка (там уже 2) после записи движений процессом А или после записи движений на складе образуется минус.
Чтобы процесс Б не ошибался в САМОМ КОНЦЕ своей работы, он должен подождать завершения работы процесса А и даже не считывать эти данные. Поэтому добавляем туда ДЛЯ ИЗМЕНЕНИЯ. Теперь картина выглядит так:
Процесс А: Начинает транзакцию. Считывает остатки (допустим получилось 10) с ключевым словом ДЛЯ ИЗМЕНЕНИЯ
Процесс Б: Начинает транзакцию. Пытается считать те же данные (получилось 10) ДЛЯ ИЗМЕНЕНИЯ, но вынужден подождать.
Процесс А: Контролирует остатки, выполняет расчеты (допустим, нужно списать 8)
Процесс А: Выполняет запись новых данных (10-8 = 2). Завершает транзакцию.
Процесс Б: Получает свежие данные из регистра (2)
Процесс Б: Контролирует остатки и сразу определяет нехватку (расчеты не выполняются). Отменяет транзакцию.
В предложении ДЛЯ ИЗМЕНЕНИЯ можно указать конкретные таблицы для блокировки (иначе будут заблокированы все, участвующие в запросе): таблицы верхнего уровня (не табличные части), виртуальные таблицы без параметров.
От Гения 1С: Пока остается открытым вопрос - работает ли "ДЛЯ ИЗМЕНЕНИЯ" с реквизитами справочников. |