Имя: Пароль:
1C
1С v8
Как работает ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" в языке запросов?
,
0 Kaidend
 
10.05.12
10:52
Всем привет.
Вроде бы при указанаии ключевого слова "Для изменения" в запросе считанные в этом запросе таблицы должны блокироваться от чтения другими транзакциями.

Хотел посмотреть, как это происходит.

Создал простенькую обработку с таким кодом в обработчике нажатия кнопки Выполнить:

   НачатьТранзакцию();
   Сообщить("Начата транзакция", СтатусСообщения.Информация);
   Запрос = Новый Запрос(
       "ВЫБРАТЬ
       |    ОстатокНаСкладах.Период,
       |    ОстатокНаСкладах.Регистратор,
       |    ОстатокНаСкладах.НомерСтроки,
       |    ОстатокНаСкладах.Активность,
       |    ОстатокНаСкладах.ВидДвижения,
       |    ОстатокНаСкладах.Номенклатура,
       |    ОстатокНаСкладах.Склад,
       |    ОстатокНаСкладах.Количество,
       |    ОстатокНаСкладах.МоментВремени
       |ИЗ
       |    РегистрНакопления.ОстатокНаСкладах КАК ОстатокНаСкладах
       |
       |ДЛЯ ИЗМЕНЕНИЯ
       |    РегистрНакопления.ОстатокНаСкладах"
   );
   Выборка = Запрос.Выполнить().Выбрать();
   Сообщить("Получена выборка", СтатусСообщения.Информация);
   Пока Истина Цикл
       Выборка.Следующий();
       ОбработкаПрерыванияПользователя();
   КонецЦикла;

Запустил два сеанса 1С, в обоих запустил обработку. В обоих сеансах обработка выдала сообщение "получена выборка". Но, по идее, второй сеанс не должен был получить выборку и должен был вывалиться с чем-то типа "превышено время ожидания блокировки". Но этого не произошло. А почему? :)
1 ХочуСказать
 
10.05.12
10:52
а транзакция где?
2 zak555
 
10.05.12
10:52
запрос в начать зачем ?
3 Defender aka LINN
 
10.05.12
10:53
(0) С двух мышей синхронно нажимал запуск?
4 proger2011
 
10.05.12
10:53
В управляемых блокировках ДЛЯ ИЗМЕНЕНИЯ не работает воопще
5 ХочуСказать
 
10.05.12
10:54
(0) режим блокировок в конфе какой?
(2) все правильно
6 zak555
 
10.05.12
10:54
Движения.ОстаткиНаСкладах.БлокироватьДляИзменения = Истина;
7 Murzz
 
10.05.12
10:54
вместо "Сообщить("Получена выборка" напиши "Предупреждение("Получена выборка" в одном сеансе запусти запроса и НЕ закрывай предупреждение, затем попробуй запустить это в другомс сеансе и увидишь, как это работает.
8 zak555
 
10.05.12
10:55
запрос где делается ?
9 Kaidend
 
10.05.12
10:57
Всем спасибо, особенно (4) и (5).
Действительно, стоял управляемый режим блокировок, там ДЛЯ ИЗМЕНЕНИЯ не работает.
Как-то не обратил на этот момент внимания.
10 Kaidend
 
10.05.12
10:58
Попробовал на тестовой базе с автоматическим блокировками - заработало так, как ожидалось.