|
В данной транзакции уже происходили ошибки | ☑ | ||
---|---|---|---|---|
0
Zombi
25.08.16
✎
09:12
|
УТ 10.3 с модулем автосервиса от БИТа. Провожу документ Заказ-наряд. В процессе проведения этот документ создает списание товаров:
Попытка Если Документ.ПометкаУдаления Тогда Документ.ПометкаУдаления = Ложь; КонецЕсли; Документ.Записать(РежимЗаписиДокумента.Проведение); Если НЕ ЗначениеЗаполнено(СписаниеТоваров) Тогда бит_ус_ОбщегоНазначения.ЗаписатьСвязиЗаказНаряда(ЭтотОбъект.Ссылка, Документ.Ссылка); КонецЕсли; Если мЭтоБП ИЛИ НЕ ЗначениеЗаполнено(ВнутреннийЗаказ) Тогда ВнутреннийЗаказ = Документ.Ссылка; КонецЕсли; Исключение Отказ = Истина; КонецПопытки; Вылетает ошибка - "В данной транзакции уже происходили ошибки" при попытке Документ.Записать(РежимЗаписиДокумента.Проведение). Документ это списание. Отладчиком прошелся, в документе списание товаров при этом срабатывает и нормально отрабатывает процедура "ПередЗаписью", потом несколько процедур, связанных с обменом данными так же нормально отрабатывают, до ОбработкаПроведения дело не доходит, попытка вываливается в исключение. Как отловить косяк? |
|||
1
Stepa86
25.08.16
✎
09:14
|
Транзакцию рвет что то, что в исключение вываливается и видимо ловится попыткой. Поставь галку "Останавливаться на ошибке" и смотри. В идеале внутри транзакций не должно быть ни одной Попытка Исключение КонецПопытки
|
|||
2
Cyberhawk
25.08.16
✎
09:19
|
(1) Не совсем так: главное, чтобы внутри транзакции в попытке не пытались ловить ошибки БД. Любые другие ошибки (не БД) - можно.
|
|||
3
Cyberhawk
25.08.16
✎
09:20
|
Автор, добавь в исключение вывод описания ошибки
|
|||
4
assasu
25.08.16
✎
09:21
|
(0) ошибка где то выше по коду. у нас та же конфа, как правило это не заполнен реквизит какойто или документ не может записаться
|
|||
5
Zombi
25.08.16
✎
09:21
|
(1) Остановка по ошибке останавливается на строке
Документ.Записать(РежимЗаписиДокумента.Проведение); |
|||
6
Stepa86
25.08.16
✎
09:22
|
(2) Я один раз такую ошибку (в данной транзакции уже пошло что то не так) ловил на преобразовании строки в число через попытку. С тех пор категоричен в этом вопросе. Может это была ошибка платформы, а может еще чего, но попытки я не люблю с тех пор очень сильно.
|
|||
7
Zombi
25.08.16
✎
09:22
|
(4) До попытки? Там вроде происходит запись списания, потом он заполняется данными.
|
|||
8
Cyberhawk
25.08.16
✎
09:24
|
Автор, тебе точно надо создавать-записывать новый документ в процессе проведения текущего? Если документ не создался, т текущий не проведется - так и надо? Или можно разделить этот процесс?
|
|||
9
Cyberhawk
25.08.16
✎
09:24
|
*т текущий = то текущий
|
|||
10
Stepa86
25.08.16
✎
09:24
|
(5) Значит в документе где то Отказ в истину устанавливается, проведение документа отменяется, вызывается исключение и транзакция рвется
|
|||
11
Zombi
25.08.16
✎
09:27
|
(8) Это в модуле автосервиса БИТ так написал. Переписывать все что то не хочется. Да и остальные документы работают, с этим какой то косяк.
(10) До попытки Отказ в отладчике показывает Ложь. Истина устанавливается только в исключении кода в (0) |
|||
12
Stepa86
25.08.16
✎
09:30
|
(11) Отказ устанавливается где то внутри документа, что записываешь в 5 строке, или в передзаписью, или в призаписи, или еще где
|
|||
13
Zombi
25.08.16
✎
09:33
|
(12) Перед записью отрабатывает нормально, после нее отказ = ложь, при записи нет у списания товаров, до обработки проведения не доходит дело. Мож еще подписка какая нить? Как все подписки отловить?
|
|||
14
Zombi
25.08.16
✎
09:50
|
Нашел, вываливается мое списание после вот этой процедуры:
Процедура ПередЗаписьюДокументаРегистрацияОбъектовПравДоступа(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт ДополнительныеСвойства = Источник.ДополнительныеСвойства; ДополнительныеСвойства.Вставить("ПараметрыЗаписиОбъектовДоступа", Новый Структура("Замещать")); ДополнительныеСвойства.ПараметрыЗаписиОбъектовДоступа.Замещать = НЕ Источник.ЭтоНовый(); КонецПроцедуры При проведении других документов, после этой процедуры еще ряд процедур, потом обработка проведения. А в косячном документе отладчий после КонецПроцедуры попадает в исключение попытки (0) Отказ там = Ложь. Какого ему надо? |
|||
15
Cyberhawk
25.08.16
✎
10:07
|
Под полными правами все выполняется?
|
|||
16
Zombi
25.08.16
✎
10:11
|
(15) Я под полными правами все делаю. Галка ПрименятьДатуЗапретаДляПолныхПрав не стоит.
|
|||
17
Cyberhawk
25.08.16
✎
10:14
|
В ЖР можнт чего пишется?
|
|||
18
Zombi
25.08.16
✎
10:19
|
(17) В жр проведение документа заказ-наряд, проведение документа списание товаров и откат этих транзакций.
|
|||
19
Cyberhawk
25.08.16
✎
10:37
|
(18) Тогда ищи исключения в транзакции проведения родительского документа
|
|||
20
Cyberhawk
25.08.16
✎
10:38
|
+(19) Ну т.е. с дочерним документом и вложенной транзакцией все ОК, просто глобальная транзакция не фиксируется, т.к. ошибка БД в ней уже была _не внутри вложенной транзакции_...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |