raz, спасибо за интересную тему для размышлений.
Вам стоило указать, что вы писали про 3.0 под MS SQL (я слыхал, что в Oracle считать в другой сессии незакомиченные данные невозможно).
Чтобы подобного рода ситуации для вас не были неожиданностью, рекомендую вам для прочтения параграф "Transaction Semantics" из книжки Inside Microsoft Dynamics™ AX 4.0. Он находится в 12-й главе третьей части.
Там также очень интересное приложение В (касаемо 4.0 и различных СУБД).
http://safari.oreilly.com/9780735622579/app02#app02
Надеюсь, что это постоянная ссылка.
Получается, что если в 3.0 на MS SQL Аксапта норовила почти везде прикрутить к запросу NOLOCK (в запросах из форм, отчетов, в запросе из кода не внутри транзакции), то в 4.0 запросы идут с READ COMMITTED (даже из форм, отчетов, обозревателя таблицы). Так, в 3.0 можно было открыть форму, и увидеть в ней строчку, которая еще не закомичена. В 4.0 в такой ситуации клиент подвисает до тех пор, пока транзакция не закроется или не откатится.
Другими словами желаемый вами эффект READ COMMITTED достигается без транзакции. Хотя если вы хотите еще и от блокировок избавиться, то ваше решение остается в силе (мне удалось заставить работать .readPast(true) только внутри транзакции).
А вот у меня возник такой вопрос. Каким образом из Аксапты 4.0 можно отправить запрос на MS SQL 2005, чтобы в нем таки был хинт NOLOCK? И как отправить запрос, чтобы он отработал при уровне изоляции транзакции SNAPSHOT, если таковой режим включен для БД? Я пытался на ощупь, но не смог пока добиться такого эффекта. Поиск также не помог мне найти ответ на вопрос. Может быть кто-то сможет подсказать?