123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- $PBExportHeader$uo_ordermtrl_workgroup.sru
- forward
- global type uo_ordermtrl_workgroup from nonvisualobject
- end type
- end forward
- global type uo_ordermtrl_workgroup from nonvisualobject
- end type
- global uo_ordermtrl_workgroup uo_ordermtrl_workgroup
- type variables
- transaction commit_transaction
- end variables
- forward prototypes
- public function integer uf_begindate_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean if_commit)
- end prototypes
- 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
- uo_orderrqmtrl uo_rqmtrl
- uo_rqmtrl = Create uo_orderrqmtrl
- DateTime ld_begindate
- SELECT min(begindate)
- INTO :ld_begindate
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkGrpid = :arg_wrkgrpid
- Using commit_transaction;
- IF commit_transaction.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询指令单工组最小开始时间失败,' + commit_transaction.SQLErrText
- GOTO ext
- END IF
- Long ll_mtrlid
- Long ll_porderid
- SELECT mtrlid, porderid
- INTO :ll_mtrlid, :ll_porderid
- FROM u_Order_ml
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- Using commit_transaction;
- IF commit_transaction.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询指令单物料与主计划失败,' + commit_transaction.SQLErrText
- GOTO ext
- END IF
- IF ll_porderid = 0 THEN
- ll_porderid = arg_orderid
- END IF
- Long ll_printid, arr_printid[]
- Long ll_lp, arr_lp[]
- Long ll_cnt = 0, ll_i
- DECLARE cur1 CURSOR FOR
- SELECT printid, lp
- FROM u_OrderRqMtrl_tree
- WHERE scid = :arg_scid
- AND orderid = :ll_porderid
- AND mtrlid = :ll_mtrlid
- Using commit_transaction;
- OPEN cur1;
- FETCH cur1 Into :ll_printid, :ll_lp;
- DO WHILE commit_transaction.SQLCode = 0
- ll_cnt++
- arr_printid[ll_cnt] = ll_printid
- arr_lp[ll_cnt] = ll_lp
- FETCH cur1 Into :ll_printid, :ll_lp;
- LOOP
- CLOSE cur1;
- Long ll_nprintid
- Long ll_submtrlid, arr_submtrlid[]
- String ls_substatus, arr_substatus[]
- String ls_subwoodcode, arr_subwoodcode[]
- String ls_subpcode, arr_subpcode[]
- Long ll_j
- Boolean lb_hasfind
- FOR ll_i = 1 To ll_cnt
- ll_printid = arr_printid[ll_i]
- ll_lp = arr_lp[ll_i]
-
- ll_nprintid = 0
- SELECT top 1 printid
- INTO :ll_nprintid
- FROM u_OrderRqMtrl_tree
- WHERE scid = :arg_scid
- AND orderid = :ll_porderid
- AND printid > :ll_printid
- AND lp = :ll_lp
- Using commit_transaction;
-
- //====================================================================
- // 汇总受影响的u_OrderRqMtrl
- //====================================================================
-
- DECLARE cur2 CURSOR FOR
- SELECT DISTINCT MtrlID, status, woodcode, pcode
- FROM u_OrderRqMtrl_tree
- WHERE (scid = :arg_scid)
- AND (OrderID = :ll_porderid)
- AND (wrkgrpid = :arg_wrkgrpid)
- AND (printid > :ll_printid)
- AND (printid < :ll_nprintid OR :ll_nprintid = 0)
- AND (lp = :ll_lp + 1) AND (mtrlid <> :ll_mtrlid)
- AND RqDate <> :ld_begindate
- Using commit_transaction;
- OPEN cur2;
- FETCH cur2 Into :ll_submtrlid, :ls_substatus, :ls_subwoodcode, :ls_subpcode;
- DO WHILE commit_transaction.SQLCode = 0
- lb_hasfind = False
- FOR ll_j = 1 To UpperBound(arr_submtrlid)
- 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
- lb_hasfind = True
- EXIT
- END IF
- NEXT
- IF Not lb_hasfind THEN
- arr_submtrlid[ll_j] = ll_submtrlid
- arr_substatus[ll_j] = ls_substatus
- arr_subwoodcode[ll_j] = ls_subwoodcode
- arr_subpcode[ll_j] = ls_subpcode
- END IF
- FETCH cur2 Into :ll_submtrlid, :ls_substatus, :ls_subwoodcode, :ls_subpcode;
- LOOP
- CLOSE cur2;
-
- //====================================================================
- // 更新u_OrderRqMtrl_tree
- //====================================================================
- UPDATE u_OrderRqMtrl_tree
- SET RqDate = :ld_begindate
- WHERE (scid = :arg_scid)
- AND (OrderID = :ll_porderid)
- AND (wrkgrpid = :arg_wrkgrpid)
- AND (printid > :ll_printid)
- AND (printid < :ll_nprintid OR :ll_nprintid = 0)
- AND (lp = :ll_lp + 1) AND (mtrlid <> :ll_mtrlid)
- AND RqDate <> :ld_begindate
- Using commit_transaction;
-
- NEXT
- Long ll_plantype[], ll_produce_wrkGrpid[]
- Long ll_rqcnt = 0
- FOR ll_i = 1 To UpperBound(arr_submtrlid)
- ll_submtrlid = arr_submtrlid[ll_i]
- ls_substatus = arr_substatus[ll_i]
- ls_subwoodcode = arr_subwoodcode[ll_i]
- ls_subpcode = arr_subpcode[ll_i]
-
- //====================================================================
- // 获取需求明细最早的需求日期
- //====================================================================
- SELECT min(rqdate)
- INTO :ld_begindate
- FROM u_OrderRqMtrl_tree
- WHERE scid = :arg_scid
- AND orderid = :ll_porderid
- AND wrkgrpid = :arg_wrkgrpid
- AND mtrlid = :ll_submtrlid
- AND status = :ls_substatus
- AND woodcode = :ls_subwoodcode
- AND pcode = :ls_subpcode
- Using commit_transaction;
- IF commit_transaction.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询主计划物料需求汇总最早需要时间失败,' + commit_transaction.SQLErrText
- GOTO ext
- END IF
-
- DECLARE cur3 CURSOR FOR
- SELECT plantype, produce_wrkGrpid
- FROM u_OrderRqMtrl
- WHERE scid = :arg_scid
- AND orderid = :ll_porderid
- AND wrkgrpid = :arg_wrkgrpid
- AND mtrlid = :ll_submtrlid
- AND status = :ls_substatus
- AND woodcode = :ls_subwoodcode
- AND pcode = :ls_subpcode
- AND RqDate <> :ld_begindate
- Using commit_transaction;
- OPEN cur3;
- ll_rqcnt = 1
- FETCH cur3 Into :ll_plantype[ll_rqcnt], :ll_produce_wrkGrpid[ll_rqcnt];
- DO WHILE commit_transaction.SQLCode = 0
- ll_rqcnt ++
- FETCH cur3 Into :ll_plantype[ll_rqcnt], :ll_produce_wrkGrpid[ll_rqcnt];
- LOOP
- CLOSE cur3;
- ll_rqcnt --
-
- FOR ll_j = 1 To ll_rqcnt
-
- //====================================================================
- // 修改需求日期
- //====================================================================
- 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
- rslt = 0
- GOTO ext
- END IF
-
- NEXT
-
- NEXT
- GOTO ext
- ext:
- Destroy uo_rqmtrl
- IF rslt = 1 And if_commit THEN
- COMMIT Using commit_transaction;
- ELSEIF rslt = 0 THEN
- ROLLBACK Using commit_transaction;
- END IF
- RETURN rslt
- end function
- on uo_ordermtrl_workgroup.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_ordermtrl_workgroup.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|