Имя: Пароль:
1C
 
Как может быть ошибка "Транзакция не активна", если ТранзакцияАктивна() = истина
🠗 (Волшебник 05.02.2025 10:51)
0 ИС-2
 
naïve
03.02.25
13:59
Есть простой кусок кода

    Если ТранзакцияАктивна() Тогда
        ЗафиксироватьТранзакцию();
    КонецЕсли;

Как получается, что метод ТранзакцияАктивна() вернул истина, но на ЗафиксироватьТранзакцию() вылетает с ошибкой.

Подозрение на неявную транзакцию где-то в коде...
1 Волшебник
 
03.02.25
14:03
чудес не бывает
2 youalex
 
03.02.25
14:07
неявная (необъявленная) транзакция например при записи объекта возникает.
3 Волшебник
 
03.02.25
14:09
вангую: ошибка вылетает на другой строке
4 Eiffil123
 
03.02.25
16:58
транзакция объявлена во внешней процедуре, например. зафиксировать ее не получится. Начало транзакции и ее фиксация (отмена) должны происходить в контексте одного метода
5 BaZZiL
 
03.02.25
17:40
Не все транзакции одинаково активны.
6 TormozIT
 
гуру
03.02.25
17:51
(4) Ошибаешься. Образовывайся https://infostart.ru/1c/articles/1026771/
7 mikecool
 
03.02.25
21:06
(6) плюсанул, оказывается я это могу ))
8 Eiffil123
 
04.02.25
16:01
(6) официальная документация 1С:
https://its.1c.ru/db/v8std/content/783/hdoc

1.2. Начало транзакции и ее фиксация (отмена) должны происходить в контексте одного метода
9 Волшебник
 
04.02.25
16:04
(8) вложенные вызовы всё ещё находятся в контексте внешнего
10 DiMel_77
 
04.02.25
16:35
(8) Плевать они хотели на свои стандарты:
11 Волшебник
 
04.02.25
16:36
(10) да, неочевидненько
12 TormozIT
 
гуру
04.02.25
17:55
(8) Так это рекомендация, а не требование среды выполнения. Поэтому по-другому тоже "получится", но делать так без веской причины не рекомендуется. В статье (6) тоже есть такая рекомендация.
13 Ненавижу 1С
 
гуру
05.02.25
08:35
Если ваш код запущен из событий ПередЗаписью/ПриЗаписи (и прочих) при записи объекта, то вы находитесь в неявно объявленной транзакции и ТранзакцияАктивна() будет истина, однако отменять неявные транзакции явно через ЗафиксироватьТранзакцию/ОтменитьТранзакцию нельзя
14 eddy_n
 
05.02.25
10:47
Ждем-с, когда вместо невнятного сообщения "В данной транзакции уже происходили ошибки" вендор удосужится вывести что-нибудь человеческое.
AdBlock убивает бесплатный контент. 1Сергей