123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- $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
|