|
Как победить ошибку "В данной транзакции уже происходили ошибки"
|
Я
|
|
ildary 20.11.18 - 14:33 | Уважаемые специалисты, посоветуйте пожалуйста, как правильно в КА2 исправить появление вот такой ошибки:
Добавленный в КА2 2.4.5.86 документ при проведении делает следующее (документ не мой, делали до меня):
Вызывается процедура в которой происходит запись в РС примерно так:
НачатьТранзакцию();
Попытка
НаборЗаписей.Записать(Ложь);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("У сотрудника " + ДанныеФизическогоЛица.ФизическоеЛицо + "уже существует ЛС по зарплатному проекту " + ДанныеФизическогоЛица.ЗарплатныйПроект);
КонецПопытки;
ЗафиксироватьТранзакцию();
При выполнении ОбщегоНазначенияКлиентСервер.СообщитьПользователю() появляется ошибка. Я погуглил и решил отказать от транзакции вообще (т.к. проведение уже вызывает транзакцию) - не помогло. Попробовал делать транзакцию как советует ИТС:
НачатьТранзакцию();
Попытка
НаборЗаписей.Записать(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("У сотрудника " + ДанныеФизическогоЛица.ФизическоеЛицо + "уже существует ЛС по зарплатному проекту " + ДанныеФизическогоЛица.ЗарплатныйПроект);
КонецПопытки;
тоже не помогло.
Увидел в интернете, что корень зла в том, что во всём виновата обработка исключения сделал вот так:
ЕстьОшибка = Истина;
Попытка
НаборЗаписей.Записать(Ложь);
ЕстьОшибка = Ложь;
Исключение
КонецПопытки;
Если ЕстьОшибка Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("У сотрудника " + ДанныеФизическогоЛица.ФизическоеЛицо + "уже существует ЛС по зарплатному проекту " + ДанныеФизическогоЛица.ЗарплатныйПроект);
КонецЕсли;
тоже не помогло. Сижу, чешу репу. Наверное самое правильное - вообще убрать попытку, но тогда как ловить ошибку записи в РС?  |
Остап Сулейманович 101 - 24.11.18 - 12:14 | (98) ГЫ. "Учить можно но не очень приятно"
Реализация класса в большинстве случаев закрыта. И "Учить" ты можешь только вызов публичных методов. И не можешь "учить" вызовы приватных.
Ну да бог с ним... |
Рэйв 102 - 24.11.18 - 12:15 | не гугли..Быстродавай:-)
|
Остап Сулейманович 103 - 24.11.18 - 12:15 | ( 100) Поищи в своих интернетах. Там должно было быть. |
Рэйв 104 - 24.11.18 - 12:17 | ( 103)конечно должно быть. я и так знаю.
Только ты нуб в программировании и не надо тут из себя строить |
Darych 105 - 24.11.18 - 12:17 | Пиписки одинаковые... можно убирать
|
Рэйв 106 - 24.11.18 - 12:17 | :-)
|
Рэйв 107 - 24.11.18 - 12:18 | ( 105)У него в программинге вообще пипски нет. |
Остап Сулейманович 108 - 24.11.18 - 12:19 | ( 107) Ну все. Ты конечно первый переТц. Хоть и не в курсе за инкапсуляцию. Ну то такое... |
Рэйв 109 - 24.11.18 - 12:21 | ( 108)Я даже знаю что такое инкапсуляция. Но тебе не скажу.Сам учись:-) |
Остап Сулейманович 110 - 24.11.18 - 12:25 | ( 109) Когда для объекта ДокументDOM выкатишь реализацию метода ВставитьПеред() - продолжим. А пока (с учетом ( 98)) - ты то что прописано в ( 84). Рекламное место пустует |
Рэйв 111 - 24.11.18 - 12:32 | >>реализацию метода ВставитьПеред()
Это как раз наследование:-) |
Рэйв 112 - 24.11.18 - 12:32 | Ну продолжай...
|
Остап Сулейманович 113 - 24.11.18 - 12:37 | ( 111) Реализация = наследование? Такого я еще не слышал...
Впечатление такое, что на форуме бот с произвольной генерацией текста... |
Рэйв 114 - 24.11.18 - 12:39 | (113)>> Реализация = наследование
Да запросто. |
Рэйв 115 - 24.11.18 - 12:39 | Мне интересны твои доводы против:-)
|
Остап Сулейманович 116 - 24.11.18 - 12:40 | ( 114) Я уже не удивляюсь. |
Рэйв 117 - 24.11.18 - 12:40 | ( 116)Естественно.Ты идешь паситсь:-)) |
Рэйв 118 - 24.11.18 - 12:40 | Пастись и есть траву:-))
|
Остап Сулейманович 119 - 24.11.18 - 12:41 | ( 117) А кроме хамства еще какие-нибудь аргументы есть? |
Рэйв 120 - 24.11.18 - 12:42 | ( 119)У меня тоесть.А у тебя нет. |
vi0 121 - 24.11.18 - 12:42 | кто пустил детей в интернеты
|
Рэйв 122 - 24.11.18 - 12:43 | ( 121)Они там живут(дети),сволочи.. |
lamina 123 - 24.11.18 - 18:31 | ( 74) Ты пишешь: "если код не в глобальной транзакции то делать надо так". Можно получить объяснения, зачем? Не словами, а примером кода, который не будет работать, если это правило не соблюсти.
Все что я смог по этому поводу, уже написал, повторяю: пример кода был в 21, а твой случай 68 - ничего там делать не нужно, поэтому примера кода нет. |
Конструктор1С 124 - 24.11.18 - 18:41 | Учись юзать ВызватьИсключение
|
vde69 125 - 24.11.18 - 20:30 | ( 123) понимаешь в чем дело, в 1с нет стека транзакций и флаг отката транзакции он глобальный, то есть без разнице на каком уровне произошла ошибка ты не сможешь откатить или зафиксировать одну транзакию внутри другой.
по этому код в ( 21) это банально мусор...
теперь объясняю почему 74 правильно:
запись документа - это не явная транзакция и если в ней происходит ошибка то она взводит глобальный флаг ошибкитранзакции, и по этому если в ней произошла ошибка надо явным образом откатить транзакцию верхнего уровня, или вообще не надо делать верхнюю транзакцию |
vi0 126 - 25.11.18 - 13:19 | кстати, кто там говорил что в типовых не ипользуется эскалация исключения (ВызватьИсключение;)
посмотрите ут11 - на каждом шагу |
Остап Сулейманович 127 - 25.11.18 - 14:00 | ( 126) Всему должно быть место и время.
То, что исключение должно быть обработано на своем уровне изоляции - это да.
Но вот такой пример. Из моей практики. Обращение к ВЕБ-Сервису с передачей некорректных параметров. Теоретически возможно проанализировать параметры, обработать и вернуть допустим код ошибки. Вроде все правильно. НО. В таком варианте ошибка самого ВЕБ-сервиса будет неотличима от ошибки на вызывающей стороне. Потому в модуле ВЕБ-сервиса вызывается такая вот фигня :
ВызватьИсключение "Трам пам пам";
И тогда ошибка вызывающей стороны диагностированная в ВЕБ-сервиса вызовет исключение не у себя в модуле, а передаст выше по стеку вызовов. |
Остап Сулейманович 128 - 25.11.18 - 14:01 | + ( 127) А по поводу транзакций - вот здесь все от "создателя". |
vi0 129 - 25.11.18 - 14:30 | |
vi0 130 - 25.11.18 - 14:30 | ( 127) чет не понял, что ты сказать хотел |
Остап Сулейманович 131 - 25.11.18 - 15:00 | ( 130) Насчет кидать исключения наверх или нет.
1. Стараться не кидать.
2. Смотреть по обстоятельствам. |