Показать сообщение отдельно
Старый 02.03.2016, 12:58   #1  
Sergey Petrov is offline
Sergey Petrov
Участник
 
80 / 19 (1) ++
Регистрация: 03.04.2007
Адрес: Saint-Petersburg, Russia
Влияние selectLocked(false) на возвращаемый курсор
Добрый день, коллеги!

Столкнулись с непонятным.
Имеем запись в SalesTable и поле в ней (поле добавленное, не из стандарта).
Визуально:
- Смотрим через обозреватель таблицы - видим значение в поле.
- Смотрим через форму - видим значение в поле.
- Смотрим через "Паспорт записи" - видим значение в поле.
В коде:
- Ищем запись через SalesTable::findRecId() - видим значение поля.
- Ищем запись через SalesTable::find() - не видим значение поля.

Раскопки привели к тому, что SalesTable::findRecId() не использует salesTable.selectLocked(). То есть, используется значение по-умолчанию (true). А вот SalesTable::find() использует, причём выставляет этот флаг равным false.
Имитация на уровне запроса SQL напрямую с NOLOCK и без этой инструкции всегда возвращают корректное значение поля (как и ожидается).

Кто-нибудь сталкивался в подобными странностями? И как их обойти?
__________________
MS Dynamics AX 2009

Kernel 5.0.1600.4110
Application 5.0.1500.6491