Имя: Пароль:
1C
 
В данной транзакции уже происходили ошибки
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) Ну т.е. с дочерним документом и вложенной транзакцией все ОК, просто глобальная транзакция не фиксируется, т.к. ошибка БД в ней уже была _не внутри вложенной транзакции_...