Показать сообщение отдельно
Старый 22.04.2008, 14:12   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,983 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Чтобы обойти баг с кешированием по InventTrans - как правило перед выполнением запроса по InventTrans в кастомизациях отключают кеш
InventTrans.disableCache(true);

Но в системе есть куча стандартных мест где используется такой кеш.

Надежнее сделать следующую кастомизацию.
Как правило кеш используется при вызове метода
X++:
\Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId
из
X++:
\Classes\InventMovement\viewCacheInventTransId
поэтому лучше сделать так
Заводим метод
X++:
\Classes\InventMovement\ClearViewCacheInventTransId
X++:
void ClearViewCacheInventTransId()
{
    viewCacheInventTrans    = NULL;
}
и вызываем в семействе классов InventUpdate - везде где было кеширование, то есть вызов
X++:
\Classes\InventMovement\viewCacheInventTransId
Например в конце метода updateNow() в классах InventUpd_...

При таких изменениях кеш живет только на то время пока он нужен и не мешает при выполнении запросов по InventTrans - так что про багу можно забыть. (Баг проявлялся потому что кеш жил и после того как отработал метод UpdateNow() семейства классов InventUpdate - как правило в разносках проявлялось - теперь мы его своевременно убиваем и он не мешает)
За это сообщение автора поблагодарили: denny (1), malex (1), gl00mie (5).