Данное ключевое слово позволяет заблокировать определенные данные от изменения другими сеансами работы с информационной базой 1C:Предприятия 8.0. Это необходимо, чтобы в процессе обработки результата запроса была уверенность в актуальности сведений, полученных из запроса. Такая возможность абсолютно необходима при проведении документов, для которых движения документа зависят от данных, содержащихся в регистре на момент проведения документа.
Стоит заметить, что если данные были считаны в транзакции, то они и так не могут быть изменены другими пользователями. Предложение же ДЛЯ ИЗМЕНЕНИЯ позволяет выполнить принудительную блокировку данных, чтобы потом не возникало взаимной блокировки при попытке записи.
Допустим, расходная накладная списывает материалы по средней себестоимости. Сумма списания зависит от текущих данных в регистре учетНоменклатуры, поэтому при оперативном проведении расходной накладной нужно заблокировать данные от изменения другими процессами. После завершения проведения документа заблокированные данные будут разблокированы.
Следующий пример демонстрирует применение запроса с ключевым словом ДЛЯ ИЗМЕНЕНИЯ:
ВЫБРАТЬ
Док.Номенклатура, Док.Номенклатура.Услуга КАК Услуга,
Док.Номенклатура.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
Док.Количество, Док.Сумма,
ОстаткиСкл.КоличествоОстаток КАК КоличествоСкл,
Остатки.КоличествоОстаток, Остатки.СуммаОстаток
ИЗ
Документ.РасходнаяНакладная.Состав КАК Док
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
РегистрНакопления.УчетНоменклатуры.Остатки(
Номенклатура В ( ПарНоменклатура) И
Склад = ПарСклад) КАК ОстаткиСкл
ПО
Док.Номенклатура = ОстаткиСкл.Номенклатура
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
РегистрНакопления.СтоимостнойУчетНоменклатуры.Остатки(Момент,
Номенклатура В (ПарНоменклатура)) КАК Остатки
ПО Док.Номенклатура = Остатки.Номенклатура
ГДЕ Док.Ссылка = Ссылка
ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.УчетНоменклатуры.Остатки
Необходимо понимать, что в транзакции любые данные защищены от изменения другими пользователями. Опция же ДЛЯ ИЗМЕНЕНИЯ нужна для блокировки от транзакционного чтения. Ее используют, чтобы как можно раньше сказать системе, что данная таблица должна быть заблокирована от чтения.
При работе в клиент-серверном варианте блокировка накладывается только на записи, которые задействованы в запросе. Использование данного ключевого слова позволяет в момент обращения к запросу поставить одного из двух конкурирующих пользователей в состояние ожидания, пока другой проведет свой документ.
Проще говоря, если не использовать данное ключевое слово, то два пользователя прочитают, что товар есть на складе, и как минимум один из них не сможет провести документ. А если применить ДЛЯ ИЗМЕНЕНИЯ, то в момент чтения данных (выполнения запроса) тот, кто позже начал, будет ждать, пока данные освободятся. Поэтому запрос с этим ключевым словом обычно ставят как можно раньше в процедуре проведения документа, чтобы уменьшить количество бесполезных действий. За 5 дней, камень corian.