uo_ordermtrl_workgroup.sru 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. $PBExportHeader$uo_ordermtrl_workgroup.sru
  2. forward
  3. global type uo_ordermtrl_workgroup from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_ordermtrl_workgroup from nonvisualobject
  7. end type
  8. global uo_ordermtrl_workgroup uo_ordermtrl_workgroup
  9. type variables
  10. transaction commit_transaction
  11. end variables
  12. forward prototypes
  13. public function integer uf_begindate_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean if_commit)
  14. end prototypes
  15. public function integer uf_begindate_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean if_commit);Int rslt = 1
  16. uo_orderrqmtrl uo_rqmtrl
  17. uo_rqmtrl = Create uo_orderrqmtrl
  18. DateTime ld_begindate
  19. SELECT min(begindate)
  20. INTO :ld_begindate
  21. FROM u_OrderMtrl_workgroup
  22. WHERE scid = :arg_scid
  23. AND orderid = :arg_orderid
  24. AND wrkGrpid = :arg_wrkgrpid
  25. Using commit_transaction;
  26. IF commit_transaction.SQLCode <> 0 THEN
  27. rslt = 0
  28. arg_msg = '查询指令单工组最小开始时间失败,' + commit_transaction.SQLErrText
  29. GOTO ext
  30. END IF
  31. Long ll_mtrlid
  32. Long ll_porderid
  33. SELECT mtrlid, porderid
  34. INTO :ll_mtrlid, :ll_porderid
  35. FROM u_Order_ml
  36. WHERE scid = :arg_scid
  37. AND orderid = :arg_orderid
  38. Using commit_transaction;
  39. IF commit_transaction.SQLCode <> 0 THEN
  40. rslt = 0
  41. arg_msg = '查询指令单物料与主计划失败,' + commit_transaction.SQLErrText
  42. GOTO ext
  43. END IF
  44. IF ll_porderid = 0 THEN
  45. ll_porderid = arg_orderid
  46. END IF
  47. Long ll_printid, arr_printid[]
  48. Long ll_lp, arr_lp[]
  49. Long ll_cnt = 0, ll_i
  50. DECLARE cur1 CURSOR FOR
  51. SELECT printid, lp
  52. FROM u_OrderRqMtrl_tree
  53. WHERE scid = :arg_scid
  54. AND orderid = :ll_porderid
  55. AND mtrlid = :ll_mtrlid
  56. Using commit_transaction;
  57. OPEN cur1;
  58. FETCH cur1 Into :ll_printid, :ll_lp;
  59. DO WHILE commit_transaction.SQLCode = 0
  60. ll_cnt++
  61. arr_printid[ll_cnt] = ll_printid
  62. arr_lp[ll_cnt] = ll_lp
  63. FETCH cur1 Into :ll_printid, :ll_lp;
  64. LOOP
  65. CLOSE cur1;
  66. Long ll_nprintid
  67. Long ll_submtrlid, arr_submtrlid[]
  68. String ls_substatus, arr_substatus[]
  69. String ls_subwoodcode, arr_subwoodcode[]
  70. String ls_subpcode, arr_subpcode[]
  71. Long ll_j
  72. Boolean lb_hasfind
  73. FOR ll_i = 1 To ll_cnt
  74. ll_printid = arr_printid[ll_i]
  75. ll_lp = arr_lp[ll_i]
  76. ll_nprintid = 0
  77. SELECT top 1 printid
  78. INTO :ll_nprintid
  79. FROM u_OrderRqMtrl_tree
  80. WHERE scid = :arg_scid
  81. AND orderid = :ll_porderid
  82. AND printid > :ll_printid
  83. AND lp = :ll_lp
  84. Using commit_transaction;
  85. //====================================================================
  86. // 汇总受影响的u_OrderRqMtrl
  87. //====================================================================
  88. DECLARE cur2 CURSOR FOR
  89. SELECT DISTINCT MtrlID, status, woodcode, pcode
  90. FROM u_OrderRqMtrl_tree
  91. WHERE (scid = :arg_scid)
  92. AND (OrderID = :ll_porderid)
  93. AND (wrkgrpid = :arg_wrkgrpid)
  94. AND (printid > :ll_printid)
  95. AND (printid < :ll_nprintid OR :ll_nprintid = 0)
  96. AND (lp = :ll_lp + 1) AND (mtrlid <> :ll_mtrlid)
  97. AND RqDate <> :ld_begindate
  98. Using commit_transaction;
  99. OPEN cur2;
  100. FETCH cur2 Into :ll_submtrlid, :ls_substatus, :ls_subwoodcode, :ls_subpcode;
  101. DO WHILE commit_transaction.SQLCode = 0
  102. lb_hasfind = False
  103. FOR ll_j = 1 To UpperBound(arr_submtrlid)
  104. IF ll_submtrlid = arr_submtrlid[ll_j] And ls_substatus = arr_substatus[ll_j] And ls_subwoodcode = arr_subwoodcode[ll_j] And ls_subpcode = arr_subpcode[ll_j] THEN
  105. lb_hasfind = True
  106. EXIT
  107. END IF
  108. NEXT
  109. IF Not lb_hasfind THEN
  110. arr_submtrlid[ll_j] = ll_submtrlid
  111. arr_substatus[ll_j] = ls_substatus
  112. arr_subwoodcode[ll_j] = ls_subwoodcode
  113. arr_subpcode[ll_j] = ls_subpcode
  114. END IF
  115. FETCH cur2 Into :ll_submtrlid, :ls_substatus, :ls_subwoodcode, :ls_subpcode;
  116. LOOP
  117. CLOSE cur2;
  118. //====================================================================
  119. // 更新u_OrderRqMtrl_tree
  120. //====================================================================
  121. UPDATE u_OrderRqMtrl_tree
  122. SET RqDate = :ld_begindate
  123. WHERE (scid = :arg_scid)
  124. AND (OrderID = :ll_porderid)
  125. AND (wrkgrpid = :arg_wrkgrpid)
  126. AND (printid > :ll_printid)
  127. AND (printid < :ll_nprintid OR :ll_nprintid = 0)
  128. AND (lp = :ll_lp + 1) AND (mtrlid <> :ll_mtrlid)
  129. AND RqDate <> :ld_begindate
  130. Using commit_transaction;
  131. NEXT
  132. Long ll_plantype[], ll_produce_wrkGrpid[]
  133. Long ll_rqcnt = 0
  134. FOR ll_i = 1 To UpperBound(arr_submtrlid)
  135. ll_submtrlid = arr_submtrlid[ll_i]
  136. ls_substatus = arr_substatus[ll_i]
  137. ls_subwoodcode = arr_subwoodcode[ll_i]
  138. ls_subpcode = arr_subpcode[ll_i]
  139. //====================================================================
  140. // 获取需求明细最早的需求日期
  141. //====================================================================
  142. SELECT min(rqdate)
  143. INTO :ld_begindate
  144. FROM u_OrderRqMtrl_tree
  145. WHERE scid = :arg_scid
  146. AND orderid = :ll_porderid
  147. AND wrkgrpid = :arg_wrkgrpid
  148. AND mtrlid = :ll_submtrlid
  149. AND status = :ls_substatus
  150. AND woodcode = :ls_subwoodcode
  151. AND pcode = :ls_subpcode
  152. Using commit_transaction;
  153. IF commit_transaction.SQLCode <> 0 THEN
  154. rslt = 0
  155. arg_msg = '查询主计划物料需求汇总最早需要时间失败,' + commit_transaction.SQLErrText
  156. GOTO ext
  157. END IF
  158. DECLARE cur3 CURSOR FOR
  159. SELECT plantype, produce_wrkGrpid
  160. FROM u_OrderRqMtrl
  161. WHERE scid = :arg_scid
  162. AND orderid = :ll_porderid
  163. AND wrkgrpid = :arg_wrkgrpid
  164. AND mtrlid = :ll_submtrlid
  165. AND status = :ls_substatus
  166. AND woodcode = :ls_subwoodcode
  167. AND pcode = :ls_subpcode
  168. AND RqDate <> :ld_begindate
  169. Using commit_transaction;
  170. OPEN cur3;
  171. ll_rqcnt = 1
  172. FETCH cur3 Into :ll_plantype[ll_rqcnt], :ll_produce_wrkGrpid[ll_rqcnt];
  173. DO WHILE commit_transaction.SQLCode = 0
  174. ll_rqcnt ++
  175. FETCH cur3 Into :ll_plantype[ll_rqcnt], :ll_produce_wrkGrpid[ll_rqcnt];
  176. LOOP
  177. CLOSE cur3;
  178. ll_rqcnt --
  179. FOR ll_j = 1 To ll_rqcnt
  180. //====================================================================
  181. // 修改需求日期
  182. //====================================================================
  183. IF uo_rqmtrl.uf_rqdate_changed(arg_scid, ll_porderid, ll_submtrlid, arg_wrkgrpid, ls_substatus, ls_subwoodcode, ls_subpcode, ll_plantype[ll_j], ll_produce_wrkGrpid[ll_j], ld_begindate, Ref arg_msg, False) <> 1 THEN
  184. rslt = 0
  185. GOTO ext
  186. END IF
  187. NEXT
  188. NEXT
  189. GOTO ext
  190. ext:
  191. Destroy uo_rqmtrl
  192. IF rslt = 1 And if_commit THEN
  193. COMMIT Using commit_transaction;
  194. ELSEIF rslt = 0 THEN
  195. ROLLBACK Using commit_transaction;
  196. END IF
  197. RETURN rslt
  198. end function
  199. on uo_ordermtrl_workgroup.create
  200. call super::create
  201. TriggerEvent( this, "constructor" )
  202. end on
  203. on uo_ordermtrl_workgroup.destroy
  204. TriggerEvent( this, "destructor" )
  205. call super::destroy
  206. end on