Показать сообщение отдельно
Старый 31.03.2007, 19:41   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
? inventUpd_reservation использование inventDim
Возник вопрос у меня (может я чего не понимаю)
есть Класс inventUpd_reservation, он делает физ.резервирование товара. В начале строится квери по InventSum в связке с InventDim, далее в цикле по квери идет работа. В фрагменте, табличным переменным присваивается значение из квери и дальше идет с ними работа:
X++:
protected void updateReserveMore()
{
..................
        while (doNext)
        {
            inventSum = queryRun.get(TableNum(InventSum));
            inventDim = queryRun.get(TableNum(InventDim));

            if (doSelect)
            select firstOnly firstfast forupdate inventTrans
                index TransIdIdx
                where inventTrans.inventTransId         == movement.transId()          &&
                      inventTrans.transChildType        == movement.transChildType()   &&
                      inventTrans.transChildRefId       == movement.transChildRefId()  &&
                      inventTrans.statusReceipt         == StatusReceipt::None         &&
                      inventTrans.statusIssue           == StatusIssue::OnOrder;

            if (! inventTrans)
                break;

            if (inventTrans.qty > aDDReserv)
                addQty   = inventTrans.qty;
            else
                addQty   = aDDReserv;

            reserveMax = -(inventSum.availReservation(loopReserveType) - tmpReserved);

            if (addQty <= reserveMax)
            {
                addQty      = reserveMax;
                doNext      = true;
                tmpReserved = 0;
            }
            else
                doNext      = false;

            if (addQty < 0)             {
                if (addQty   > inventTrans.qty) 
                    inventTrans.updateSplit(addQty);

                inventTrans.inventDimId         = InventDim::findOrCreate(inventDim).inventDimId;
                inventTrans.inventDimFixed      = inventDimFixed;

                inventDim.inventDimId           = inventTrans.inventDimId;
                movement.updateTransDimTransferReceipt(this,inventTrans,inventDim);

                movement.transIdSum().setInventTransStatus(inventTrans,StatusReceipt::None,(loopReserveType ? StatusIssue::ReservOrdered : StatusIssue::ReservPhysical));

                inventTrans.update();
                inventTrans.updateSumUp();

                aDDReserv           -= addQty;

                if (loopReserveType)
.........
собственно интересует зачем происходит такая вот работа с inventDim:
X++:
inventTrans.inventDimId         = InventDim::findOrCreate(inventDim).inventDimId;
inventTrans.inventDimFixed      = inventDimFixed;
inventDim.inventDimId           = inventTrans.inventDimId;
конкретно непонятно: зачем делать InventDim::findOrCreate, если и так известно что в inventDim находится реально существующая аналитика???? А потом еще и переприсвоение inventDimId - или я туплю или двое из ларца
__________________
--- SHiSHok