![]() |
#4 |
Участник
|
не совсем так....
COMMIT - завершает явно (подтверждением) транзакцию. Транзакция завершается также при окончании "процесса", т.е. при возвращении управления пользователю - неявно. В учетных модулях явное подтверждение транзакции используется (имхо) для того, чтобы в пакетном режиме (репорты по фильтру Batch Post*) учет документов происходил "по одному" (транзакция укорачивается) и чтобы возможное возникновение ошибки не вызывало откат учета. Для явного отката транзакции (RollBack) использовать надо ERROR('errMsg'). При этом если errMsg - пустая строка, то откат произойдет "молча". И ещё одно замечание... будьте внимательны с использованием CONFIRM. Эта функция работает в контексте транзакции. Таким образом, если транзакция стартовала, и тем более заблокировала таблицы, то она не закончится, пока пользователь не ответит на ваш вопрос. Примерно вот так НЕ НАДО делать (сам столкнулся однажды с подобным кодом): TB.LOCKTABLE; IF FIND('-') THEN IF CONFIRM('DELETE?') THEN TB.DELETEALL; Однако, такая особенность этой функции позволяет на время отладки применять конструкцию IF NOT CONFIRM('COMMIT?') THEN ERROR(''); что позволяет избежать многократной подготовки тестовых данных для проверки их обработки какой-нибудь сложной функцией (тем же учетом, например). |
|