Показать сообщение отдельно
Старый 10.11.2008, 11:27   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Вопрос по force*
Есть класс InventSumOpenTransact\setValueQty()
В нём код
X++:
        while select forcePlaceholders forceSelectOrder forceNestedLoop inventTrans
            index hint OpenItemIdx
            where inventTrans.itemId            == itemId                       &&
                  inventTrans.valueOpen         == InventTransOpen::Yes         &&
                  inventTrans.statusReceipt     >= StatusReceipt::None          &&
                  inventTrans.statusReceipt     <= StatusReceipt::Purchased     &&
                  inventTrans.statusIssue       >= StatusIssue::None            &&
                  inventTrans.statusIssue       <= StatusIssue::Sold            &&
                  inventTrans.dateFinancial     <= perDate
        #inventDimJoin(inventTrans.inventDimId,inventDim,inventDimCriteria,inventDimParm,dimIdIdx)
        {
            this.add(inventTrans);
        }
Он выдаёт мне не правильное значение inventTrans.CostAmountPosted
Если делаю убираю force*, правильное значение
X++:
        while select inventTrans
            index hint OpenItemIdx
            where inventTrans.itemId            == itemId                       &&
                  inventTrans.valueOpen         == InventTransOpen::Yes         &&
                  inventTrans.statusReceipt     >= StatusReceipt::None          &&
                  inventTrans.statusReceipt     <= StatusReceipt::Purchased     &&
                  inventTrans.statusIssue       >= StatusIssue::None            &&
                  inventTrans.statusIssue       <= StatusIssue::Sold            &&
                  inventTrans.dateFinancial     <= perDate
        #inventDimJoin(inventTrans.inventDimId,inventDim,inventDimCriteria,inventDimParm,dimIdIdx)
        {
            this.add(inventTrans);
        }
Если делаю так, тоже правильно
X++:
        inventTrans.disableCache(true);
        while select forcePlaceholders forceSelectOrder forceNestedLoop inventTrans
            index hint OpenItemIdx
            where inventTrans.itemId            == itemId                       &&
                  inventTrans.valueOpen         == InventTransOpen::Yes         &&
                  inventTrans.statusReceipt     >= StatusReceipt::None          &&
                  inventTrans.statusReceipt     <= StatusReceipt::Purchased     &&
                  inventTrans.statusIssue       >= StatusIssue::None            &&
                  inventTrans.statusIssue       <= StatusIssue::Sold            &&
                  inventTrans.dateFinancial     <= perDate
        #inventDimJoin(inventTrans.inventDimId,inventDim,inventDimCriteria,inventDimParm,dimIdIdx)
        {
            this.add(inventTrans);
        }
Один раз уже с этим сталкивался.
Только тогда не обратил внимание что это из-за force*
Код был мой и за результаты был уверен спокойно поставил inventTrans.disableCache(true) и всё ок.
Может кто-то обяснит почему с использованием force* могут данные не актуальные вернуться. Может на Oracle какие-нибудь дополнительные настройки поставить, чтоб правильно запрос отрабатывал.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.