16.06.2008, 18:32 | #1 |
Участник
|
Баг (?) в классе LedgerBalanceDim
Похоже, нашел ошибку в классе LedgerBalanceDim, точнее, его методе balance. Как известно, данный класс используется для расчета оборотов по счетам ГК в разрезе финансовой аналитики за определенный период. Помимо прочих параметров при создании экземпляра класса можно указать, что необходимо использовать кеширование (параметр _cache в методе new). В этом случае, все результаты расчета сохраняются в контейнере и при повторной попытке рассчитать обороты по какому-либо счету, результат берется из данного контейнера, а не рассчитываются заново. Для кеширования используется несколько контейнеров, в частности, cacheAccount используется для хранения списка счетов, для которых был выполнен расчет, и cacheData, в котором, собственно, хранятся сами рассчитанные данные.
Вставка данных осуществляется следующим образом (строки 87 и 88 метода balance() в DAX 3.0 или 85 и 86 в DAX 4.0): X++: cacheAccount += accountNum; cacheData = conIns(cacheData,1, balance.export()); Дальнейший поиск кешированных данных осуществляется следующим образом (строки с 24 по 29 метода balance() в DAX 3.0 или с 45 по 50 в DAX 4.0): X++: accountIdx = conFind(cacheAccount, accountNum); if (accountIdx) { balance.import(conPeek(cacheData, accountIdx)); return balance; } X++: cacheAccount += accountNum; cacheData = conIns(cacheData,conLen(cacheData) + 1, balance.export()); |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |