Всем привет!
Есть следующая задача - нужно наложить упр.блокировку на выгружаемый документ в момент перед выгрузкой в ПКО, и снять ее после выгрузки.
Пишу в обработчике Перед выгрузкой ПКО:
НачатьТранзакцию();
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("Документ.МойДокумент");
Элемент.Режим = РежимБлокировкиДанных.Разделяемый;
Элемент.УстановитьЗначение("Ссылка", Источник);
Блокировка.Заблокировать();
а в обработчике После выгрузки ПКО:
ЗафиксироватьТранзакцию();
Но блокировка не снимается до самого окончания работы обработки универсальной выгрузки-загрузки. Что не так или как по-другому решить эту задачу?
9.2.3. Вложенный вызов транзакций
В рамках уже выполняемой транзакции можно обращаться к процедурам НачатьТранзакцию(), ЗафиксироватьТранзакцию() и ОтменитьТранзакцию(). Например, может использоваться следующая схема вызовов:
НачатьТранзакцию();
…
// Вложенный вызов транзакции
НачатьТранзакцию();
…
ЗафиксироватьТранзакцию();
…
// Вложенный вызов транзакции
НачатьТранзакцию();
…
ЗафиксироватьТранзакцию();
…
ЗафиксироватьТранзакцию();
Однако подобное обращение не означает начала новой транзакции в рамках уже выполняющейся.
(3)Из ИТС: отмена изменений, выполняемая во вложенной транзакции, будет приводить в конечном счете не к отмене изменений самой вложенной транзакции, а к отмене всех изменений транзакции верхнего уровня. В то же время фиксация изменений, выполненная во вложенной транзакции, игнорируется.
А я что-то думал, что и фиксация во вложенной транзакции, зафиксирует и верхнюю транзакцию. Может, действительно тут и зарыта собака. Буду копать еще, спасибо.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс