그리드 옵션은 sortable="false" 하여 정렬순서가 변경되지 않도록한다.

var _i          = _filterIndexes.indexOf(item.rowIndex);
var _indexes1   = _filterIndexes.slice(i);          // 차감시작 ~ 끝까지 index
var _indexes2   = _filterIndexes.slice(0, i);       // 시작 ~ 차감시작전까지 index
var _indexes    = _indexes1.concat(_indexes2);

// 현재수정 Item외 나머지 Item's Qty에 차감할 남은 수량
var _gapQty = _itemQtyNew.minus(_itemQtyOld);
provider.setItemAtBatch(_indexes, function(index, data)
{
    var _item_gty   = new BigNumber(CCPrecManager.format("qty", data.item_qty, data.unit_cd));
    var _item_price = new BigNumber(0);
    var _item_amt   = new BigNumber(0);
    var _price_unit = new BigNumber(String(data.price_unit));

    // 현재수정 Item이라면
    if (index == item.rowIndex)
    {
        _item_qty   = _itemQtyNew;
    }
    // 현재수정 Item의 이원화 Item이라면
    else
    {
        // 나머지 품목의 발주수량 차감 처리
        if (!_item_qty.eq(0))
        {
            // 차감할 수량이 발주수량보다 크다면
            if (_gapQty.gt(_item_qty))
            {
                _gapQty     = _gapQty.minus(_item_qty);
                _item_qty   = new BigNumber(0);
            }
            else
            {
                _item_qty   = _item_qty.minus(_gapQty);
                _gapQty     = new BigNumber(0);
            }
        }
    }

    _item_price = new BigNumber(CCPrecManager.format("amt", data.item_price, data.cur));
    _item_amt   = CCPrecManager.format("amt", _item_qty.mul(_item_price).div(_price_unit).toFixed(), data.cur);

    return {item_qty:_item_qty, item_amt:_item_amt};
});

 

쿼리로 처리하는 방법 : [Oracle] 제시된 금액을 첫번째 레코드부터 순차적으로 차감하기 (daonelab.com)