Вход | Регистрация


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

Отменить транзакцию = в этой транзакции уже были ошибки
Я
   Tateossian
 
30.11.17 - 11:28
Всем привет! Делаю следующую схему. Имеется свой (нетиповой) документ. Но частично движения при проведении можно получить из типового. Чтобы не усложнять код (да и просто потому что я ленивый) иду следующим путем: начинаю транзакцию, создаю новый типовой документ при проведении, заполняю его упрощенно, провожу, получаю движения на выходе и делаю отменить транзакцию. Я такую схему делал несколько раз (но не при проведении) и никогда не было проблем, а нынче получаю ошибку: в данной транзакции уже были ошибки. Из чего я делаю вывод, что системой ОтменитьТранзакцию() трактуется как ошибка. Почему? И как обойти это? Можно, конечно, создать новый документ, а потом его удалить, но это еще более грубое решение... Использовать экспортные функции нет возможности, так как придется повторять почти всю реализацию типового документа.
 
 
   Рэйв
 
1 - 30.11.17 - 11:39
Вложенная транзакция -зло
   Tateossian
 
2 - 30.11.17 - 11:46
(1) Это понятно. Но почему ОтменитьТранзакцию() трактуется как ошибка?
   Рэйв
 
3 - 30.11.17 - 11:48
(2)транзакция - это таже самая Попытка. ОтменитьТранзакцию() вызывает Исключение как и у попытки, что в Попытке трактуется как ошибка
   YFedor
 
4 - 30.11.17 - 11:49
начинаю транзакцию, создаю новый типовой документ при проведении - вообще не понял кто на ком стоял
   vicof
 
5 - 30.11.17 - 11:50
Потому что при нормальной ситуации транзакции не откатываются. А если воспринимать это как нормальную ситуацию, база данных может придти в не работоспособном состояние.
   Tateossian
 
6 - 30.11.17 - 11:52
(5) Чего это вдруг придет в неработоспособоное состояние?
   vicof
 
7 - 30.11.17 - 11:52
Допустим, во вложенной транзакции я создал элемент справочника, потом понял, что он мне не нужен, транзакции отменил. Потом в основной начал обращаться к этому элементу. А его уже нет в базе.
   Tateossian
 
8 - 30.11.17 - 11:53
(3) Тогда зачем в букваре написано, что канонично нужно делать
Попытка
НачатьТранзакцию()
Исключение
ОтменитьТранзакцию()
КонецПопытки
ЗафиксироватьТранзакцию()

?

Это ж получается масло масляное.
   vicof
 
9 - 30.11.17 - 11:53
(7) транзакции отменил*
   Tateossian
 
10 - 30.11.17 - 11:54
(7) Тогда это будет ошибка. Это контролируемое поведение.
 
 Рекламное место пустует
   vicof
 
11 - 30.11.17 - 11:54
Мля, т9. Вложенную транзакцию отменил
   Рэйв
 
12 - 30.11.17 - 11:56
(8)Ну, оно не на 100% одно и тоже ведь.Просто ОтменитьТранзакцию() и Исключение имеют одинаковый эффект с точки зрения try-catch
   Borteg
 
13 - 30.11.17 - 12:12
(0) Я так понимаю что вся транзакция обернута в попытку, при записи происходит невосстановимая ошибка, но так как транзакция обернута в попытка, то код продолжает работать, но при следующем обращение к БД происходит вышеупомянутая ошибка
Для того чтобы отловить ошибку в  попытке пиши
 исключение Вызватьисключение(ОписаниеОшибки()). 

Кстати подход без исключения неправильный.
   Borteg
 
14 - 30.11.17 - 12:12
(0) Ошибка гдето в проведении типового документа.
   Tateossian
 
15 - 30.11.17 - 12:14
(13)  Я и так и так делал, и с ВызватьИсключение() - результат одинаковый.
   Tateossian
 
16 - 30.11.17 - 12:16
(14)  Вот, кстати, эту гипотезу я не проверял. Ты меня натолкнул на мысль, спасибо.
   ptiz
 
17 - 30.11.17 - 12:16
В 1С нет вложенных транзакций. Откат может быть только всех транзакций сразу.
   Borteg
 
18 - 30.11.17 - 12:19
(15) ВызватьИсключение напишет на какой строке кода произошла ошибка, а так ты сможешь отловить только ошибка в методе записать, а где ищи свищи сам.
   Borteg
 
19 - 30.11.17 - 12:23
(18) (15) Вызватьисключение(ОписаниеОшибки()) надо и тебе все станет ясно

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует