HelpF.pro

Управляемый режим блокировки данных

Вопрос: Как использовать управляемый режим блокировки данных?
Ответ: Рассмотрим на примере удаления записей из регистра сведений.
1. В свойствах объекта, для которого используется управляемый режим блокировки данных установить поле «Режим управления блокировкой данных» в значение «Управляемый» (иначе будет сообщение об ошибке «Автоматический режим блокировки недопустим в этой транзакции»). Причем если это делается для документа, то необходимо перевести в этот же режим блокировки все регистры, в которых делает движения этот документ.
2. Пример кода управляемой блокировки регистра при удалении из него записи:
Например:
Код 1C v 8.х
 Процедура ОчиститьЗаПериод()
	Пока Истина Цикл
		НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
		Попытка
			текЗапрос = новый Запрос;
			текЗапрос.Текст = 

			"ВЫБРАТЬ
			|	усИсторияОстатковПоПоказателям.Склад,
			|	усИсторияОстатковПоПоказателям.Поклажедатель,
			|	усИсторияОстатковПоПоказателям.Показатель,
			|	усИсторияОстатковПоПоказателям.Период
			|ИЗ
			|	РегистрСведений.усИсторияОстатковПоПоказателям КАК усИсторияОстатковПоПоказателям
			|ГДЕ
			|	усИсторияОстатковПоПоказателям.Период МЕЖДУ &ПериодС И &ПериодПо";

			текЗапрос.УстановитьПараметр("ПериодС", ГраницаОчисткиС);
			текЗапрос.УстановитьПараметр("ПериодПо", ГраницаОчисткиПо);
			тбзЗаписиЖурнала = текЗапрос.Выполнить().Выгрузить();

			// Блокировка данных
			текБлокировка = Новый БлокировкаДанных;
			тбдЖурнал = текБлокировка.Добавить("РегистрСведений.усИсторияОстатковПоПоказателям");
			тбдЖурнал.Режим = РежимБлокировкиДанных.Исключительный;
			Если тбзЗаписиЖурнала.Количество() тогда
				тбдЖурнал.ИсточникДанных = тбзЗаписиЖурнала;
				тбдЖурнал.ИспользоватьИзИсточникаДанных("Склад", "Склад");
				тбдЖурнал.ИспользоватьИзИсточникаДанных("Поклажедатель", "Поклажедатель");
				тбдЖурнал.ИспользоватьИзИсточникаДанных("Показатель", "Показатель");

				// Заблокировать
				текБлокировка.Заблокировать();

				Для каждого текЗаписьЖурнала из тбзЗаписиЖурнала цикл
					текЗапись = РегистрыСведений.усИсторияОстатковПоПоказателям.СоздатьМенеджерЗаписи();
					ЗаполнитьЗначенияСвойств(текЗапись, текЗаписьЖурнала);
					текЗапись.Удалить();
				КонецЦикла;

			КонецЕсли;

			ЗафиксироватьТранзакцию();
			Прервать;

		Исключение // сообщим об ошибке
			стрОписаниеОшибки = ОписаниеОшибки();
			ОтменитьТранзакцию();
			Сообщить("Ошибка блокировки" + ОписаниеОшибки());
			Прервать;
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры // ОчиститьЗаПериод()   

Источник
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/960.html