|
v8: Подскажите плз по сохранению данных в исключениях | ☑ | ||
---|---|---|---|---|
0
megabax
16.06.12
✎
18:31
|
Добрый день.
Пытасюь в обработчике исключения записать задачу (что бы уведомить юзера о сбоях) Вот как я это делаю: Исключение ОтменитьТранзакцию(); лОписаниеОшибки = ОписаниеОшибки(); ЗаписатьВЛог(ИмяФайлаЛога, лОписаниеОшибки); лТекстОшибки="Ошибка в заявке для ";// + Строка(ПЗОбъектСтрока.ПЗОбъект.Получатель) + " " + Строка(ПЗОбъектСтрока.ПЗОбъект.ДоговорКонтрагента); СоздатьУведомление(лОписаниеОшибки, лТекстОшибки, ПЗОбъектСтрока.ПЗОбъект, Ссылка); Сообщить(лОписаниеОшибки, СтатусСообщения.ОченьВажное); Сообщить("Ошибка в заявке для " + Строка(ПЗОбъектСтрока.ПЗОбъект.Получатель) + " " + Строка(ПЗОбъектСтрока.ПЗОбъект.ДоговорКонтрагента)); БПОбъект.ПричинаРучнойОбработки = Справочники.битПричиныРучнойОбработкиЗаявокПокупателя.ОшибкаВТранзакции; БПОбъект.Сообщение = лОписаниеОшибки; БПОбъект.Записать(); Возврат; КонецПопытки; запись делается в процедура СоздатьУведомление(АТекстОшибки, АКомментарий, АПЗ, АЗаявка) ЗадачаОбъект=Задачи.битУведомлениеОСбоях.СоздатьЗадачу(); ЗадачаОбъект.Дата=ТекущаяДата(); //ЗадачаОбъект.Заявка=АЗаявка; ЗадачаОбъект.Комментарий=АКомментарий; ЗадачаОбъект.Наименование="Сбой: "+АТекстОшибки; //ЗадачаОбъект.ПЗ=АПЗ; ЗадачаОбъект.РольИсполнителя=Справочники.РолиИсполнителей.битПолучательУведомленийОСбоях; ЗадачаОбъект.Записать(); конецпроцедуры на строке ЗадачаОбъект.Записать(); вылетает с сообщением "В данной транзакции уже произошли ошибки. Подскажите плз, как лечить? |
|||
1
shuhard
16.06.12
✎
18:33
|
(0) и рыбку съесть(транзакцию откатить) и задачу записать
пиши в журнал или E-mail пошли юзеру |
|||
2
megabax
16.06.12
✎
18:36
|
1, а больше никак?
|
|||
3
shuhard
16.06.12
✎
18:44
|
(2) всё зависит от твоей фантазии:
можешь использовать ADODB, TCP/IP, файловые системы |
|||
4
DJ Anthon
16.06.12
✎
18:45
|
а что, вне исключения нельзя задачу записать?
|
|||
5
DJ Anthon
16.06.12
✎
18:46
|
и исключение разве не отменяет транзакцию?
|
|||
6
Mashinist
16.06.12
✎
18:53
|
Вынести создание задачи за попытку
Ошибка = Ложь; ... Исключение ОтменитьТранзакцию(); ... Ошибка = Истина; КонецПопытки; Если Ошибка Тогда СоздатьУведомление(АТекстОшибки, АКомментарий, АПЗ, АЗаявка) КонецЕсли; |
|||
7
megabax
16.06.12
✎
18:57
|
6, а, понятно, спасибо
|
|||
8
mistеr
16.06.12
✎
19:00
|
(0) Представляю, сколько задач посыпется на бедных юзеров из-за какого-нибудь косяка в коде.
|
|||
9
megabax
18.06.12
✎
11:16
|
Сделал вот так:
//отдельная транзакция для проведения БылаОшибка=ложь; НачатьТранзакцию(); Попытка ПЗОбъектСтрока.ПЗОбъект.Записать(РежимЗаписиДокумента.Проведение); исключение лОписаниеОшибки = ОписаниеОшибки(); ОтменитьТранзакцию(); БылаОшибка=истина; ЗаписатьВЛог(ИмяФайлаЛога, лОписаниеОшибки); //СоздатьУведомление(лОписаниеОшибки, лТекстОшибки, ПЗОбъектСтрока.ПЗОбъект, Ссылка); //Сообщить(лОписаниеОшибки, СтатусСообщения.ОченьВажное); //Сообщить("Ошибка в заявке для " + Строка(ПЗОбъектСтрока.ПЗОбъект.Получатель) + " " + Строка(ПЗОбъектСтрока.ПЗОбъект.ДоговорКонтрагента)); //БПОбъект.ПричинаРучнойОбработки = Справочники.битПричиныРучнойОбработкиЗаявокПокупателя.ОшибкаВТранзакции; //БПОбъект.Сообщение = лОписаниеОшибки; //БПОбъект.Записать(); //Возврат; конецпопытки; если БылаОшибка тогда //СоздатьУведомление(лОписаниеОшибки, лТекстОшибки, ПЗОбъектСтрока.ПЗОбъект, Ссылка); СоздатьУведомление(лОписаниеОшибки, лТекстОшибки, 0, 0); возврат; иначе ЗафиксироватьТранзакцию(); конецесли; процедура СоздатьУведомление(АТекстОшибки, АКомментарий, АПЗ, АЗаявка) ЗадачаОбъект=Задачи.битУведомлениеОСбоях.СоздатьЗадачу(); ЗадачаОбъект.Дата=ТекущаяДата(); //ЗадачаОбъект.Заявка=АЗаявка; ЗадачаОбъект.Комментарий=АКомментарий; ЗадачаОбъект.Наименование="Сбой: "+АТекстОшибки; //ЗадачаОбъект.ПЗ=АПЗ; ЗадачаОбъект.РольИсполнителя=Справочники.РолиИсполнителей.битПолучательУведомленийОСбоях; ЗадачаОбъект.Записать(); конецпроцедуры все равно вылетает при попытке записать задачу. Что еще можно сделать? |
|||
10
ssh2006
18.06.12
✎
11:23
|
Делай теперь уведомление об ошибке при создании уведомления об ошибке
> Что еще можно сделать? Выяснить причину ошибки при создании задачи-уведомления, |
|||
11
megabax
18.06.12
✎
11:38
|
10, дык я вроде как все правильно делаю: говорю
ЗадачаОбъект.Записать(); а в ответ получаю "В данной транзакии уже произошли ошибки". Какая тут может быть причина ошибка? Может кто знает? |
|||
12
ssh2006
18.06.12
✎
11:46
|
(11) значит код БылаОшибка=ложь;
НачатьТранзакцию(); .... выполняется внутри другой транзакции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |