$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