Как откатить всю транзакцию? "В данной транзакции уже происходили ошибки" #673091


#0 by ИС-2
Есть код, который исправляет множество контрагентов. Надо сделать так, что если есть хотя бы одна ошибка, то транзакция вся откатывалась. Но код вылетает с ошибкой "В данной транизакции уже происходили ошибки". Что делаю не так? Где ошибка Вот упрощенный пример кода:
#1 by Man4kin
ЕстьОшибка = Ложь Вынести за цикл
#2 by Maxus43
Если ЕстьОшибка Тогда Прервать; КонецЕсли;
#3 by ИС-2
это да. Просто пример кода не рабочий. И все же как решить мой вопрос.
#4 by Maxus43
выходи из цикла при первой же ошибке, что тут непонятного?
#5 by Man4kin
дк это и есть решение вопроса, вынеси перед циклом эту строку.
#6 by ssh2006
после того как не удалось записать один элемент, что либо записать в этой транзакции уже нельзя, поэтому
#7 by zzerro
#8 by Maxus43
нет, цикл продолжится, ровно как и ошибки
#9 by Maxus43
всем внимательно читать код, а потом советовать выносить до цикла. Сути это не меняет, криво - да, толку ноль от выноса
#10 by zzerro
пля...
#11 by ИС-2
вот поправленный код. Но по сути вопроса, что-то можно сделать?
#12 by Man4kin
тогда он узнает все ошибки и будет править, а при прерывании он будет запускать обработку несколько раз и по одной ошибке исправлять.
#13 by Maxus43
вторая ошибка в транзакции вызовет сообщение . Оно надо? он откатить хочет, а не показ ошибки
#14 by zzerro
еще рас пля... не посмотрел код.... Вот проверяй "какую-либо проверку" сам....
#15 by Maxus43
ты издеваешся?) тебе много раз писали про волшебное слово ПРЕРВАТЬ
#16 by Man4kin
ошибка возникает только при фиксации транзакции.
#17 by ssh2006
если в транзакции произошла хоя бы одна ошибка связанная с записью данных, то продолжение транзакции невозможно
#18 by Man4kin
у него же в попытке запись идет .
#19 by Maxus43
нет вот именно До фиксации или отката не доходит, ошибка происходит
#20 by ssh2006
"Если восстановимая ошибка базы данных произошла в процессе выполнения транзакции, то, вне зависимости от того, было исключение, вызванное этой ошибкой, перехвачено и обработано или нет, транзакция уже не может быть продолжена или зафиксирована. Единственная операция с базой данных, которую можно произвести в такой ситуации - это отмена транзакции."
#21 by Man4kin
уяснил,спасибо :-)
#22 by ИС-2
не точно поставил ТЗ :) Надо вывести еще все сообщения об ошибках. Т.е прервать не подходит
#23 by ИС-2
получается ни как?
#24 by Maxus43
в одной транзакции - никак
#25 by ИС-2
а множество транзакций уже не откатить?
#26 by Maxus43
нет, в 1с не раелизовано
#27 by Maxus43
смысл транзакции - или всё, или ничего. При наступлении ошибки срабатывает вариант Ничего, и далее продолжать попытки не имеет смысла
#28 by ssh2006
Чтобы вывести ошибки и при этом ничего не записывать можно например так сделать
#29 by Maxus43
+ и потом, если ошибок нет, то можно записать все. Будет как бы двойная попытка записи в ИБ, первая для отлова ошибок, вторая - собственно запись
#30 by ИС-2
тоже ругается. Вылатает несколько "В этой транзакции уже происходили ошибки" и аварийная ошибка
#31 by Славен
Никак, с такой постановкой
#32 by 1Сергей
Пиши свою процедуру проверки объекта на наличие ошибок
#33 by Славен
если только не хранить список изменний для каждого объекта отдельно и откатывать назад не отменой транзакции,  а обратной записью измененных реквизитов
#34 by Славен
+1, можно и так
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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