Отменить транзакцию = в этой транзакции уже были ошибки #809419


#0 by Tateossian
Всем привет! Делаю следующую схему. Имеется свой (нетиповой) документ. Но частично движения при проведении можно получить из типового. Чтобы не усложнять код (да и просто потому что я ленивый) иду следующим путем: начинаю транзакцию, создаю новый типовой документ при проведении, заполняю его упрощенно, провожу, получаю движения на выходе и делаю отменить транзакцию. Я такую схему делал несколько раз (но не при проведении) и никогда не было проблем, а нынче получаю ошибку: в данной транзакции уже были ошибки. Из чего я делаю вывод, что системой ОтменитьТранзакцию трактуется как ошибка. Почему? И как обойти это? Можно, конечно, создать новый документ, а потом его удалить, но это еще более грубое решение... Использовать экспортные функции нет возможности, так как придется повторять почти всю реализацию типового документа.
#1 by Рэйв
Вложенная транзакция -зло
#2 by Tateossian
Это понятно. Но почему ОтменитьТранзакцию трактуется как ошибка?
#3 by Рэйв
транзакция - это таже самая Попытка. ОтменитьТранзакцию вызывает Исключение как и у попытки, что в Попытке трактуется как ошибка
#4 by YFedor
начинаю транзакцию, создаю новый типовой документ при проведении - вообще не понял кто на ком стоял
#5 by vicof
Потому что при нормальной ситуации транзакции не откатываются. А если воспринимать это как нормальную ситуацию, база данных может придти в не работоспособном состояние.
#6 by Tateossian
Чего это вдруг придет в неработоспособоное состояние?
#7 by vicof
Допустим, во вложенной транзакции я создал элемент справочника, потом понял, что он мне не нужен, транзакции отменил. Потом в основной начал обращаться к этому элементу. А его уже нет в базе.
#8 by Tateossian
Тогда зачем в букваре написано, что канонично нужно делать Попытка НачатьТранзакцию Исключение ОтменитьТранзакцию КонецПопытки ? Это ж получается масло масляное.
#9 by vicof
транзакции отменил*
#10 by Tateossian
Тогда это будет ошибка. Это контролируемое поведение.
#11 by vicof
Мля, т9. Вложенную транзакцию отменил
#12 by Рэйв
Ну, оно не на 100% одно и тоже ведь.Просто ОтменитьТранзакцию и Исключение имеют одинаковый эффект с точки зрения try-catch
#13 by Borteg
Я так понимаю что вся транзакция обернута в попытку, при записи происходит невосстановимая ошибка, но так как транзакция обернута в попытка, то код продолжает работать, но при следующем обращение к БД происходит вышеупомянутая ошибка Для того чтобы отловить ошибку в  попытке пиши исключение Вызватьисключение(ОписаниеОшибки). Кстати подход без исключения неправильный.
#14 by Borteg
Ошибка гдето в проведении типового документа.
#15 by Tateossian
Я и так и так делал, и с ВызватьИсключение - результат одинаковый.
#16 by Tateossian
Вот, кстати, эту гипотезу я не проверял. Ты меня натолкнул на мысль, спасибо.
#17 by ptiz
В 1С нет вложенных транзакций. Откат может быть только всех транзакций сразу.
#18 by Borteg
ВызватьИсключение напишет на какой строке кода произошла ошибка, а так ты сможешь отловить только ошибка в методе записать, а где ищи свищи сам.
#19 by Borteg
Вызватьисключение(ОписаниеОшибки) надо и тебе все станет ясно
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С