$PBExportHeader$dbauo_sort.sru forward global type dbauo_sort from nonvisualobject end type end forward global type dbauo_sort from nonvisualobject end type global dbauo_sort dbauo_sort type variables dbauo_task ins_sort[] // 排序方案 long ins_taskCount // 该方案可齐货订单数 dbauo_adapter ins_adapter end variables forward prototypes public subroutine f_init (dbauo_adapter arg_adapter) public subroutine f_sort1 () public subroutine f_sort2 () private function long f_getmaxvalue () end prototypes public subroutine f_init (dbauo_adapter arg_adapter);ins_adapter = arg_adapter long ll_i for ll_i = 1 to upperbound(ins_adapter.ins_tasks) ins_sort[ll_i] = ins_adapter.ins_tasks[ll_i] next ins_taskCount = 0 end subroutine public subroutine f_sort1 ();Long ll_i, ll_j dbauo_task temp // 先比交货日期 FOR ll_i = 1 To (UpperBound(ins_sort) - 1) FOR ll_j = (ll_i + 1) To UpperBound(ins_sort) IF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And ins_sort[ll_j].ins_hasoutware THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And Not ins_sort[ll_j].ins_hasoutware Or Not ins_adapter.ins_ignorOut THEN IF Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And ins_sort[ll_j].ins_isOK THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ElseIf (Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And Not ins_sort[ll_j].ins_isOK) Or ins_adapter.ins_reallocall THEN IF Not ins_sort[ll_i].ins_hasMoney And ins_sort[ll_j].ins_hasMoney THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_hasMoney = ins_sort[ll_j].ins_hasMoney THEN IF ins_sort[ll_i].ins_requiredate > ins_sort[ll_j].ins_requiredate THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_requiredate = ins_sort[ll_j].ins_requiredate THEN IF ins_sort[ll_i].ins_level > ins_sort[ll_j].ins_level THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_level = ins_sort[ll_j].ins_level THEN IF ins_sort[ll_i].ins_mxcnt > ins_sort[ll_j].ins_mxcnt THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_mxcnt = ins_sort[ll_j].ins_mxcnt THEN IF ins_sort[ll_i].ins_sumqty > ins_sort[ll_j].ins_sumqty THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp END IF END IF END IF END IF END IF END IF END IF NEXT NEXT ins_taskCount = f_getMaxValue() end subroutine public subroutine f_sort2 ();Long ll_i, ll_j dbauo_task temp FOR ll_i = 1 To (UpperBound(ins_sort) - 1) FOR ll_j = (ll_i + 1) To UpperBound(ins_sort) IF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And ins_sort[ll_j].ins_hasoutware THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And Not ins_sort[ll_j].ins_hasoutware Or Not ins_adapter.ins_ignorOut THEN IF Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And ins_sort[ll_j].ins_isOK THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ElseIf (Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And Not ins_sort[ll_j].ins_isOK) Or ins_adapter.ins_reallocall THEN IF Not ins_sort[ll_i].ins_hasMoney And ins_sort[ll_j].ins_hasMoney THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_hasMoney = ins_sort[ll_j].ins_hasMoney THEN IF ins_sort[ll_i].ins_requiredate > ins_sort[ll_j].ins_requiredate THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_requiredate = ins_sort[ll_j].ins_requiredate THEN IF ins_sort[ll_i].ins_level > ins_sort[ll_j].ins_level THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_level = ins_sort[ll_j].ins_level THEN IF ins_sort[ll_i].ins_sumqty > ins_sort[ll_j].ins_sumqty THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp ELSEIF ins_sort[ll_i].ins_sumqty = ins_sort[ll_j].ins_sumqty THEN IF ins_sort[ll_i].ins_mxcnt > ins_sort[ll_j].ins_mxcnt THEN temp = ins_sort[ll_i] ins_sort[ll_i] = ins_sort[ll_j] ins_sort[ll_j] = temp END IF END IF END IF END IF END IF END IF END IF NEXT NEXT ins_taskCount = f_getMaxValue() end subroutine private function long f_getmaxvalue ();//==================================================================== // 事件: dbauo_adapter.f_getmaxvalue() //-------------------------------------------------------------------- // 描述:返回当前排序的可齐货订单数 //-------------------------------------------------------------------- // 参数: // value integer //-------------------------------------------------------------------- // 返回: long //-------------------------------------------------------------------- // 作者: lwl 日期: 2011年05月21日 //-------------------------------------------------------------------- // LONGJOE //-------------------------------------------------------------------- // 修改历史: // //==================================================================== long ll_taskCount = 0 long ll_i, ll_j boolean lb_enough for ll_i = 1 to upperbound(ins_adapter.ins_mtrlwares) ins_adapter.ins_mtrlwares[ll_i].ins_tempqty = ins_adapter.ins_mtrlwares[ll_i].ins_noallocqty next for ll_i = 1 to upperbound(ins_sort) if ins_adapter.ins_ignorOut and ins_sort[ll_i].ins_hasoutware then for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx) ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty -= ins_sort[ll_i].ins_mx[ll_j].ins_allocqty next else lb_enough = true for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx) if ins_sort[ll_i].ins_mx[ll_j].ins_saleqty > ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty then lb_enough = false exit end if next if lb_enough then for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx) ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty -= ins_sort[ll_i].ins_mx[ll_j].ins_saleqty next ll_taskCount ++ end if end if next return ll_taskCount end function on dbauo_sort.create call super::create TriggerEvent( this, "constructor" ) end on on dbauo_sort.destroy TriggerEvent( this, "destructor" ) call super::destroy end on