dbauo_sort.sru 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. $PBExportHeader$dbauo_sort.sru
  2. forward
  3. global type dbauo_sort from nonvisualobject
  4. end type
  5. end forward
  6. global type dbauo_sort from nonvisualobject
  7. end type
  8. global dbauo_sort dbauo_sort
  9. type variables
  10. dbauo_task ins_sort[] // 排序方案
  11. long ins_taskCount // 该方案可齐货订单数
  12. dbauo_adapter ins_adapter
  13. end variables
  14. forward prototypes
  15. public subroutine f_init (dbauo_adapter arg_adapter)
  16. public subroutine f_sort1 ()
  17. public subroutine f_sort2 ()
  18. private function long f_getmaxvalue ()
  19. end prototypes
  20. public subroutine f_init (dbauo_adapter arg_adapter);ins_adapter = arg_adapter
  21. long ll_i
  22. for ll_i = 1 to upperbound(ins_adapter.ins_tasks)
  23. ins_sort[ll_i] = ins_adapter.ins_tasks[ll_i]
  24. next
  25. ins_taskCount = 0
  26. end subroutine
  27. public subroutine f_sort1 ();Long ll_i, ll_j
  28. dbauo_task temp
  29. // 先比交货日期
  30. FOR ll_i = 1 To (UpperBound(ins_sort) - 1)
  31. FOR ll_j = (ll_i + 1) To UpperBound(ins_sort)
  32. IF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And ins_sort[ll_j].ins_hasoutware THEN
  33. temp = ins_sort[ll_i]
  34. ins_sort[ll_i] = ins_sort[ll_j]
  35. ins_sort[ll_j] = temp
  36. 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
  37. IF Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And ins_sort[ll_j].ins_isOK THEN
  38. temp = ins_sort[ll_i]
  39. ins_sort[ll_i] = ins_sort[ll_j]
  40. ins_sort[ll_j] = temp
  41. 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
  42. IF Not ins_sort[ll_i].ins_hasMoney And ins_sort[ll_j].ins_hasMoney THEN
  43. temp = ins_sort[ll_i]
  44. ins_sort[ll_i] = ins_sort[ll_j]
  45. ins_sort[ll_j] = temp
  46. ELSEIF ins_sort[ll_i].ins_hasMoney = ins_sort[ll_j].ins_hasMoney THEN
  47. IF ins_sort[ll_i].ins_requiredate > ins_sort[ll_j].ins_requiredate THEN
  48. temp = ins_sort[ll_i]
  49. ins_sort[ll_i] = ins_sort[ll_j]
  50. ins_sort[ll_j] = temp
  51. ELSEIF ins_sort[ll_i].ins_requiredate = ins_sort[ll_j].ins_requiredate THEN
  52. IF ins_sort[ll_i].ins_level > ins_sort[ll_j].ins_level THEN
  53. temp = ins_sort[ll_i]
  54. ins_sort[ll_i] = ins_sort[ll_j]
  55. ins_sort[ll_j] = temp
  56. ELSEIF ins_sort[ll_i].ins_level = ins_sort[ll_j].ins_level THEN
  57. IF ins_sort[ll_i].ins_mxcnt > ins_sort[ll_j].ins_mxcnt THEN
  58. temp = ins_sort[ll_i]
  59. ins_sort[ll_i] = ins_sort[ll_j]
  60. ins_sort[ll_j] = temp
  61. ELSEIF ins_sort[ll_i].ins_mxcnt = ins_sort[ll_j].ins_mxcnt THEN
  62. IF ins_sort[ll_i].ins_sumqty > ins_sort[ll_j].ins_sumqty THEN
  63. temp = ins_sort[ll_i]
  64. ins_sort[ll_i] = ins_sort[ll_j]
  65. ins_sort[ll_j] = temp
  66. END IF
  67. END IF
  68. END IF
  69. END IF
  70. END IF
  71. END IF
  72. END IF
  73. NEXT
  74. NEXT
  75. ins_taskCount = f_getMaxValue()
  76. end subroutine
  77. public subroutine f_sort2 ();Long ll_i, ll_j
  78. dbauo_task temp
  79. FOR ll_i = 1 To (UpperBound(ins_sort) - 1)
  80. FOR ll_j = (ll_i + 1) To UpperBound(ins_sort)
  81. IF ins_adapter.ins_ignorOut And Not ins_sort[ll_i].ins_hasoutware And ins_sort[ll_j].ins_hasoutware THEN
  82. temp = ins_sort[ll_i]
  83. ins_sort[ll_i] = ins_sort[ll_j]
  84. ins_sort[ll_j] = temp
  85. 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
  86. IF Not ins_adapter.ins_reallocall And Not ins_sort[ll_i].ins_isOK And ins_sort[ll_j].ins_isOK THEN
  87. temp = ins_sort[ll_i]
  88. ins_sort[ll_i] = ins_sort[ll_j]
  89. ins_sort[ll_j] = temp
  90. 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
  91. IF Not ins_sort[ll_i].ins_hasMoney And ins_sort[ll_j].ins_hasMoney THEN
  92. temp = ins_sort[ll_i]
  93. ins_sort[ll_i] = ins_sort[ll_j]
  94. ins_sort[ll_j] = temp
  95. ELSEIF ins_sort[ll_i].ins_hasMoney = ins_sort[ll_j].ins_hasMoney THEN
  96. IF ins_sort[ll_i].ins_requiredate > ins_sort[ll_j].ins_requiredate THEN
  97. temp = ins_sort[ll_i]
  98. ins_sort[ll_i] = ins_sort[ll_j]
  99. ins_sort[ll_j] = temp
  100. ELSEIF ins_sort[ll_i].ins_requiredate = ins_sort[ll_j].ins_requiredate THEN
  101. IF ins_sort[ll_i].ins_level > ins_sort[ll_j].ins_level THEN
  102. temp = ins_sort[ll_i]
  103. ins_sort[ll_i] = ins_sort[ll_j]
  104. ins_sort[ll_j] = temp
  105. ELSEIF ins_sort[ll_i].ins_level = ins_sort[ll_j].ins_level THEN
  106. IF ins_sort[ll_i].ins_sumqty > ins_sort[ll_j].ins_sumqty THEN
  107. temp = ins_sort[ll_i]
  108. ins_sort[ll_i] = ins_sort[ll_j]
  109. ins_sort[ll_j] = temp
  110. ELSEIF ins_sort[ll_i].ins_sumqty = ins_sort[ll_j].ins_sumqty THEN
  111. IF ins_sort[ll_i].ins_mxcnt > ins_sort[ll_j].ins_mxcnt THEN
  112. temp = ins_sort[ll_i]
  113. ins_sort[ll_i] = ins_sort[ll_j]
  114. ins_sort[ll_j] = temp
  115. END IF
  116. END IF
  117. END IF
  118. END IF
  119. END IF
  120. END IF
  121. END IF
  122. NEXT
  123. NEXT
  124. ins_taskCount = f_getMaxValue()
  125. end subroutine
  126. private function long f_getmaxvalue ();//====================================================================
  127. // 事件: dbauo_adapter.f_getmaxvalue()
  128. //--------------------------------------------------------------------
  129. // 描述:返回当前排序的可齐货订单数
  130. //--------------------------------------------------------------------
  131. // 参数:
  132. // value integer
  133. //--------------------------------------------------------------------
  134. // 返回: long
  135. //--------------------------------------------------------------------
  136. // 作者: lwl 日期: 2011年05月21日
  137. //--------------------------------------------------------------------
  138. // LONGJOE
  139. //--------------------------------------------------------------------
  140. // 修改历史:
  141. //
  142. //====================================================================
  143. long ll_taskCount = 0
  144. long ll_i, ll_j
  145. boolean lb_enough
  146. for ll_i = 1 to upperbound(ins_adapter.ins_mtrlwares)
  147. ins_adapter.ins_mtrlwares[ll_i].ins_tempqty = ins_adapter.ins_mtrlwares[ll_i].ins_noallocqty
  148. next
  149. for ll_i = 1 to upperbound(ins_sort)
  150. if ins_adapter.ins_ignorOut and ins_sort[ll_i].ins_hasoutware then
  151. for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx)
  152. ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty -= ins_sort[ll_i].ins_mx[ll_j].ins_allocqty
  153. next
  154. else
  155. lb_enough = true
  156. for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx)
  157. if ins_sort[ll_i].ins_mx[ll_j].ins_saleqty > ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty then
  158. lb_enough = false
  159. exit
  160. end if
  161. next
  162. if lb_enough then
  163. for ll_j = 1 to upperbound(ins_sort[ll_i].ins_mx)
  164. ins_sort[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty -= ins_sort[ll_i].ins_mx[ll_j].ins_saleqty
  165. next
  166. ll_taskCount ++
  167. end if
  168. end if
  169. next
  170. return ll_taskCount
  171. end function
  172. on dbauo_sort.create
  173. call super::create
  174. TriggerEvent( this, "constructor" )
  175. end on
  176. on dbauo_sort.destroy
  177. TriggerEvent( this, "destructor" )
  178. call super::destroy
  179. end on