Показать сообщение отдельно
Старый 02.11.2021, 15:44   #24  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Данные на формах редактируются в другом UserConnection. Когда вы смотрите в Аксапте активных пользоватей, то для тех, кто работает с формами, видно два разных SPID.
Метод write на датасурсе формы использует один UserConnection. А когда вы пишете в коде ttsbegin - ttscommit, то это применяется ко второму UserConnection. Поэтому когда внутри write выскакивает ошибка, то откатывается транзакция того UserConnection, который дла формы. А для того UserConnection'а, для которго написан в коде ttsbegin - для того транзакция не откатывается. И поэтому ttsLevel не сбрасывается.
А try - catch сбрасывает ttsLevel для того ttsbegin, который написан внутри кода для вашего UserConnection.
Этим самым и отличаюстя write на источнике данных формы от write на обычной табличной переменной. Ваш ttsbegin-ttscommit не действует на источник данных формы.
Если убрать try-catch, то выполнение кода внутри метода write источника данных сразу же прекращается, и не доходит до вызова ttscommit.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 02.11.2021 в 15:59.
За это сообщение автора поблагодарили: Pandasama (2).