noxxx писал(а) 18. Февраля 2010 :: 13:18:Z1 писал(а) 18. Февраля 2010 :: 13:15:Я считаю что надо избавляться этот код надо выполнять при закрытии если успешно прошло проведение документа.
И тогда в нем не нужна будет ОтменитьТранзакцию.
Вторая странность в том что НачатьТранзакцию и ОтменитьТранзакцию
парные операции( открывающая и закрывающая скобки )
Одно без другого лучше не использовать.
Т.е. ПриЗакрытии() выполняется после ОбработкаПроведения()?
НачатьТранзакцию есть далеко-далеко в начале модуля. Кстати, как это работает? Появляется вложенная транзакция?
MS sql не поддерживает в обычном понимании вложенные транзакции.
Откат из любой глубины отменяет
ВСЕ внешние транзакции.
С другой стороны если открыто 5 транзакций то для успешного завершения надо выдать 5 commit.
Поэтому начинать новую транзакцию в модуле проведения ( при стандартных 1с блокировках ) бессмысленно.
Документ у тебя и так не записался
В этом случае надо и не начинать транзакцию
а отказ от проведения делать через
НеПроводитьДокумент();
return;
У тебя же получается
когда в модуле проведения вызовешь
ОтменитьТранзакцию()
все что было сделано до текущего момента будет забыто.
Все блокировки будут сняты.
Все дальнейшие движениярегистров
запишутся в базу в в RG будут ошибки потому что
ClearRG что выполняются в начале модуле проведения автоматически будут отменены.
При этом хвост регистров будет перенесен во все другие ПБ и в ПБ будут RG соответствовать этому хвосту RA.
Вот тебе и еще причина твоих других бед.