$PBExportHeader$uo_order_plan_tech.sru forward global type uo_order_plan_tech from nonvisualobject end type end forward global type uo_order_plan_tech from nonvisualobject end type global uo_order_plan_tech uo_order_plan_tech type variables long uo_billid string uo_billcode end variables forward prototypes public function integer save (s_order_plan_tech arg_s_plan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer addcmpqty (long arg_billid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdscrp, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_order_plan_tech arg_s_plan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_dt Long ll_billid,ll_wrkGrpid Decimal ld_orderqty,ld_acmqty Long cnt String ls_billcode String ls_sccode IF IsNull(arg_s_plan.scid) THEN arg_s_plan.scid = 0 IF IsNull(arg_s_plan.billid) THEN arg_s_plan.billid = 0 IF IsNull(arg_s_plan.rep) THEN arg_s_plan.rep = '' IF IsNull(arg_s_plan.wrkgrpid) THEN arg_s_plan.wrkgrpid = 0 IF IsNull(arg_s_plan.workgroupid) THEN arg_s_plan.workgroupid = 0 IF IsNull(arg_s_plan.empid) THEN arg_s_plan.empid = 0 IF IsNull(arg_s_plan.orderid) THEN arg_s_plan.orderid = 0 IF IsNull(arg_s_plan.printid) THEN arg_s_plan.printid = 0 IF IsNull(arg_s_plan.parentid) THEN arg_s_plan.parentid = 0 IF IsNull(arg_s_plan.qty) THEN arg_s_plan.qty = 0 IF IsNull(arg_s_plan.aps_plancode) then arg_s_plan.aps_plancode = '' IF arg_s_plan.wrkgrpid = 0 THEN arg_msg = '请选择工组' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_workgroup Where wrkgrpid = :arg_s_plan.wrkgrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工组资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '工组资料不存在或重复,请检查' rslt = 0 GOTO ext END IF IF arg_s_plan.workgroupid > 0 THEN SELECT u_workgroup.wrkGrpid INTO :ll_wrkGrpid FROM u_workgroup Where u_workgroup.workgroupid = :arg_s_plan.workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据工作中心所属工组资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_wrkGrpid <> arg_s_plan.wrkgrpid THEN arg_msg = '工作中心所属工组资料与单据工组资料不相符,请检查' rslt = 0 GOTO ext END IF END IF SELECT orderqty INTO :ld_orderqty FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_s_plan.scid AND orderid = :arg_s_plan.orderid And printid = :arg_s_plan.printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关指令单工艺资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_plan_tech WHERE scid = :arg_s_plan.scid AND orderid = :arg_s_plan.orderid AND printid = :arg_s_plan.printid And billid <> :arg_s_plan.billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关指令单工艺是否已开派工单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN SELECT isnull(sum(qty),0) INTO :ld_acmqty FROM u_order_plan_tech WHERE scid = :arg_s_plan.scid AND orderid = :arg_s_plan.orderid AND printid = :arg_s_plan.printid And billid <> :arg_s_plan.billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关指令单工艺已开派工单数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF ld_acmqty + arg_s_plan.qty > ld_orderqty THEN rslt = 0 arg_msg = '相关指令单工艺计划数:'+String(ld_orderqty,'#,##0.##########') + ',已开派工单数量:'+String(ld_acmqty,'#,##0.##########')+',不能再派工:'+String(arg_s_plan.qty,'#,##0.##########') GOTO ext END IF IF arg_s_plan.rep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF arg_s_plan.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_order_plan_tech","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_plan.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_plan.scid,ls_sccode + 'TO',Date(server_dt),False,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_order_plan_tech (scid, billid, billcode, billdate, begindate, enddate, rep, wrkgrpid, workgroupid, empid, orderid, printid, parentid, qty, opemp, opdate, aps_plancode) VALUES (:arg_s_plan.scid, :ll_billid, :ls_billcode, :arg_s_plan.billdate, :arg_s_plan.begindate, :arg_s_plan.enddate, :arg_s_plan.rep, :arg_s_plan.wrkgrpid, :arg_s_plan.workgroupid, :arg_s_plan.empid, :arg_s_plan.orderid, :arg_s_plan.printid, :arg_s_plan.parentid, :arg_s_plan.qty, :arg_opemp, :server_dt, :arg_s_plan.aps_plancode); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = ll_billid ELSE UPDATE u_order_plan_tech SET billdate = :arg_s_plan.billdate, begindate = :arg_s_plan.begindate, enddate = :arg_s_plan.enddate, rep = :arg_s_plan.rep, wrkgrpid = :arg_s_plan.wrkgrpid, workgroupid = :arg_s_plan.workgroupid, empid = :arg_s_plan.empid, orderid = :arg_s_plan.orderid, printid = :arg_s_plan.printid, parentid = :arg_s_plan.parentid, qty = :arg_s_plan.qty, modemp = :arg_opemp, moddate = :server_dt, aps_plancode = :arg_s_plan.aps_plancode Where billid = :arg_s_plan.billid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = arg_s_plan.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);int rslt = 1 select flag into :arg_flag from u_order_plan_tech where billid = :arg_billid; if sqlca.sqlcode <> 0 then ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 Int li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审状态,不可以删除' GOTO ext END IF DELETE FROM u_order_plan_tech WHERE billid = :arg_billid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long ll_scid,ll_orderid,ll_printid Decimal ld_qty uo_order_ml uo_order uo_order = Create uo_order_ml IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待审核状态,不可以再审' GOTO ext END IF SELECT scid,orderid,printid,qty INTO :ll_scid,:ll_orderid,:ll_printid,:ld_qty FROM u_order_plan_tech Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询派工单相关信息失败,'+sqlca.SQLErrText GOTO ext END IF //更新指令单工艺的已派工数 IF ll_orderid > 0 THEN IF uo_order.uof_add_ordermtrl_tree_acmpqty(ll_scid,ll_orderid,ll_printid,ld_qty,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF /// // //更新审核标记 UPDATE u_order_plan_tech SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_order RETURN rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Decimal ld_fqty DateTime null_dt Long ll_scid,ll_orderid,ll_printid Decimal ld_qty Long cnt = 0 SetNull(null_dt) uo_order_ml uo_order uo_order = Create uo_order_ml IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在已审核状态,不可以撤审' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_finish_tech_mx Where relid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据是否已开完工单失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = '本派工单已开完工单,不能撤审' GOTO ext END IF SELECT fqty INTO :ld_fqty FROM u_order_plan_tech Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据已完工数失败,'+sqlca.SQLErrText GOTO ext END IF IF ld_fqty > 0 THEN rslt = 0 ARG_MSG = '查询单据已有完工数,不能撤审' GOTO ext END IF SELECT scid,orderid,printid,qty INTO :ll_scid,:ll_orderid,:ll_printid,:ld_qty FROM u_order_plan_tech Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询派工单相关信息失败,'+sqlca.SQLErrText GOTO ext END IF //更新指令单工艺的已派工数 IF ll_orderid > 0 THEN IF uo_order.uof_add_ordermtrl_tree_acmpqty(ll_scid,ll_orderid,ll_printid,0 - ld_qty,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //更新审核标记 UPDATE u_order_plan_tech SET auditemp = '', auditdate = :null_dt, flag = 0 WHERE billid = :arg_billid And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_order RETURN rslt end function public function integer addcmpqty (long arg_billid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Decimal ld_qty,ld_fqty DateTime null_dt Long ll_scid,ll_orderid,ll_printid,ll_wrkgrpid uo_order_ml uo_order uo_order = Create uo_order_ml SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误派工单唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arg_msg = "派工单未审核,不能操作" GOTO ext END IF SELECT qty, fqty,scid,orderid,printid,wrkgrpid INTO :ld_qty,:ld_fqty,:ll_scid,:ll_orderid,:ll_printid,:ll_wrkgrpid FROM u_order_plan_tech Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询派工单已完工数失败,'+sqlca.SQLErrText GOTO ext END IF IF ld_fqty + arg_addqty > ld_qty THEN rslt = 0 arg_msg = '派工单未完工数只有:'+String(ld_qty - ld_fqty,'#,##0.##########')+',不能完工:'+String(arg_addqty,'#,##0.##########') GOTO ext END IF //更新指令单工艺的完工数 IF ll_orderid > 0 THEN IF uo_order.uof_add_ordermtrl_tree_sqty(ll_scid,ll_orderid,ll_printid,arg_addqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET u_OrderMtrl_workgroup.finishqty = s_qty.minsqty FROM u_OrderMtrl_workgroup INNER JOIN (SELECT scid, orderid, swkpid, workgroupid,MIN(sqty) AS minsqty FROM (SELECT scid, orderid, swkpid,workgroupid, SUM(sqty) AS sqty, relname, partname FROM u_OrderMtrl_workgroup_tree GROUP BY scid, orderid, swkpid, relname, partname,workgroupid) a GROUP BY scid, orderid, swkpid,workgroupid) s_qty ON u_OrderMtrl_workgroup.scid = s_qty.scid AND u_OrderMtrl_workgroup.orderid = s_qty.orderid AND u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid AND u_OrderMtrl_workgroup.workgroupid = s_qty.workgroupid WHERE (u_OrderMtrl_workgroup.scid = :ll_scid) AND (u_OrderMtrl_workgroup.orderid = :ll_orderid) AND (u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组进度失败,'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_order_plan_tech SET fqty = fqty + :arg_addqty Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新派工单完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_fqty + arg_addqty = ld_qty THEN UPDATE u_order_plan_tech SET flag = 5, finishdate = getdate() Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_order_plan_tech SET flag = 1, finishdate = :null_dt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF Destroy uo_order RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF IsNull(arg_newdscrp) Or arg_newdscrp = '' THEN rslt = 0 arg_msg = '要添加内容为空,操作取消' GOTO ext END IF UPDATE u_order_plan_tech SET dscrp = dscrp + ' ' + :arg_newdscrp Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function on uo_order_plan_tech.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_plan_tech.destroy TriggerEvent( this, "destructor" ) call super::destroy end on