$PBExportHeader$uo_workgroup_time.sru forward global type uo_workgroup_time from nonvisualobject end type end forward global type uo_workgroup_time from nonvisualobject end type global uo_workgroup_time uo_workgroup_time type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE String billcode //单据的唯一编号 PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动 PUBLIC PROTECTEDWRITE String opemp //建立操作员 PUBLIC PROTECTEDWRITE Int flag = 0 //审核标志 PUBLIC PROTECTEDWRITE DateTime auditdate //审核时间 PUBLIC PROTECTEDWRITE String auditrep //审核操作员 long scid //分部ID long billtype //单据类型 0 - 工组完成时间 1-生产计划/指令单 String dscrp = '' String relcode = '' DateTime billdate Boolean if_getid_ture = TRUE Transaction commit_transaction //数据commit事务 s_orderworkgroup_timemx wkpmx[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE //修改标志 Int uo_option_orderworkgroup_time end variables forward prototypes public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_reset () public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer newbegin () 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 p_clearmx () public function integer getinfo (long arg_billid, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, datetime arg_old_begindate, datetime arg_new_begindate, datetime arg_old_requiredate, datetime arg_new_requiredate, datetime arg_old_perfinishdate, datetime arg_new_perfinishdate, string arg_mxdscrp, long arg_workgroupid, ref string arg_msg) end prototypes public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF it_mxbt = 0 THEN // rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF f_check_inoutdate(0,billdate,FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_orderworkgroup_time","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //取得新单据编号 IF billtype = 0 THEN billcode = getid(scid,ls_sccode + 'GT',Date(server_dt),if_getid_ture,commit_transaction) ELSEIF billtype = 1 THEN billcode = getid(scid,ls_sccode + 'OT',Date(server_dt),if_getid_ture,commit_transaction) END IF IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_orderworkgroup_time ( billid, billcode, billdate, relcode, dscrp, opdate, opemp, scid, billtype) VALUES ( :ls_newid, :billcode, :billdate, :relcode, :dscrp, :server_dt, :publ_operator, :scid, :billtype) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_orderworkgroup_timemx (billid, printid, mtrlid, orderid, wkpname, wrkGrpid, owrkGrpid, old_requiredate, new_requiredate, mxdscrp, old_begindate, new_begindate, old_perfinishdate, new_perfinishdate, workgroupid) VALUES ( :ls_newid, :wkpmx[i].printid, :wkpmx[i].mtrlid, :wkpmx[i].orderid, :wkpmx[i].wkpname, :wkpmx[i].wrkGrpid, :wkpmx[i].owrkGrpid, :wkpmx[i].old_requiredate, :wkpmx[i].new_requiredate, :wkpmx[i].mxdscrp, :wkpmx[i].old_begindate, :wkpmx[i].new_begindate, :wkpmx[i].old_perfinishdate, :wkpmx[i].new_perfinishdate, :wkpmx[i].workgroupid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_orderworkgroup_time SET billdate = :billdate, relcode = :relcode, dscrp = :dscrp, moddate = :server_dt, modrep = :publ_operator WHERE u_orderworkgroup_time.billid = :billid AND flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_orderworkgroup_timemx Where u_orderworkgroup_timemx.billid = :billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_orderworkgroup_timemx (billid, printid, mtrlid, orderid, wkpname, wrkGrpid, owrkGrpid, old_requiredate, new_requiredate, mxdscrp, old_begindate, new_begindate, old_perfinishdate, new_perfinishdate, workgroupid) VALUES ( :billid, :wkpmx[i].printid, :wkpmx[i].mtrlid, :wkpmx[i].orderid, :wkpmx[i].wkpname, :wkpmx[i].wrkGrpid, :wkpmx[i].owrkGrpid, :wkpmx[i].old_requiredate, :wkpmx[i].new_requiredate, :wkpmx[i].mxdscrp, :wkpmx[i].old_begindate, :wkpmx[i].new_begindate, :wkpmx[i].old_perfinishdate, :wkpmx[i].new_perfinishdate, :wkpmx[i].workgroupid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);//==================================================================== // Function: auditing(arg_ifcommit,arg_msg) //-------------------------------------------------------------------- // Description: 审核单据 //-------------------------------------------------------------------- // Arguments: // value boolean arg_ifcommit // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Long rslt = 1,cnt = 0,i Long ls_newid Long ll_daysafter DateTime ldt_wrkdate Decimal ld_order_wrk,ld_orderqty Long ll_workgroupid Long ll_j IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE u_orderworkgroup_time SET auditrep = :publ_operator, auditdate = getdate(), flag = 1 WHERE u_orderworkgroup_time.billid = :billid And flag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt IF billtype = 0 THEN UPDATE u_OrderMtrl_workgroup SET requiredate = :wkpmx[i].new_requiredate, begindate = :wkpmx[i].new_begindate WHERE orderid = :wkpmx[i].orderid AND mtrlid = :wkpmx[i].mtrlid AND wkpname = :wkpmx[i].wkpname AND wrkGrpid = :wkpmx[i].wrkGrpid AND owrkGrpid = :wkpmx[i].owrkGrpid and workgroupid = :wkpmx[i].workgroupid AND scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新物料:'+wkpmx[i].mtrlcode+'工组新要求完成时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF SELECT orderqty INTO :ld_orderqty FROM u_order_ml WHERE scid = :scid AND orderid = :wkpmx[i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询物料:'+wkpmx[i].mtrlcode+'相关生产计划信息失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF // SELECT workgroupid INTO :ll_workgroupid // FROM u_OrderMtrl_workgroup // WHERE orderid = :wkpmx[i].orderid // AND mtrlid = :wkpmx[i].mtrlid // AND wkpname = :wkpmx[i].wkpname // AND wrkGrpid = :wkpmx[i].wrkGrpid // AND owrkGrpid = :wkpmx[i].owrkGrpid // AND scid = :scid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询物料:'+wkpmx[i].mtrlcode+'相关工组进度信息失败,原因:'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF //按日期加入进度表 DELETE FROM u_ordermtrl_wrk_jd WHERE orderid = :wkpmx[i].orderid AND scid = :scid AND wrkgrpid = :wkpmx[i].wrkGrpid AND owrkgrpid = :wkpmx[i].owrkGrpid And wkpname = :wkpmx[i].wkpname and workgroupid = :wkpmx[i].workgroupid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ll_daysafter = DaysAfter(Date(wkpmx[i].new_begindate), Date(wkpmx[i].new_requiredate)) IF ll_daysafter + 1 <> 0 THEN ld_order_wrk = ld_orderqty / (ll_daysafter + 1) FOR ll_j = 1 To ll_daysafter + 1 ldt_wrkdate = DateTime(RelativeDate(Date(wkpmx[i].new_begindate),ll_j - 1 ),Time(0)) INSERT INTO u_ordermtrl_wrk_jd (scid, orderid, wrkgrpid, owrkgrpid, wkpname, wrkdate, orderqty, workgroupid) VALUES (:scid, :wkpmx[i].orderid, :wkpmx[i].wrkGrpid, :wkpmx[i].owrkGrpid , :wkpmx[i].wkpname, :ldt_wrkdate, :ld_order_wrk, :wkpmx[i].workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT END IF ELSEIF billtype = 1 THEN UPDATE u_order_ml SET requiredate = :wkpmx[i].new_requiredate, orderdate = :wkpmx[i].new_begindate, perfinishdate = :wkpmx[i].new_perfinishdate WHERE orderid = :wkpmx[i].orderid AND mtrlid = :wkpmx[i].mtrlid AND scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'要求完成时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ll_daysafter = DaysAfter(Date(wkpmx[i].old_requiredate),Date(wkpmx[i].new_requiredate)) IF ll_daysafter <> 0 THEN UPDATE u_OrderRqMtrl SET rqdate_ori = rqdate, edate_ori = edate WHERE orderid = :wkpmx[i].orderid And scid = :scid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'要求完成时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_orderrqmtrl SET rqdate = DATEADD(day,:ll_daysafter, rqdate), edate = DATEADD(day,:ll_daysafter, edate) WHERE orderid = :wkpmx[i].orderid And scid = :scid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'用料需求时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_OrderRqMtrl_tree SET rqdate = DATEADD(day,:ll_daysafter, rqdate), edate = DATEADD(day,:ll_daysafter, edate) WHERE orderid = :wkpmx[i].orderid And scid = :scid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'运算内容用料需求时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF END IF NEXT flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);//==================================================================== // function: c_auditing(arg_ifcommit,arg_msg) //-------------------------------------------------------------------- // description: 撤审 //-------------------------------------------------------------------- // arguments: // value boolean arg_ifcommit // reference string arg_msg //-------------------------------------------------------------------- // returns: integer //-------------------------------------------------------------------- // author: yyx date: 2003.11.19 //-------------------------------------------------------------------- // modify history: // //==================================================================== Long rslt = 1,cnt = 0,i DateTime null_dt,ldt_wrkdate Long ll_daysafter decimal ld_order_wrk,ld_orderqty long ll_workgroupid,ll_j SetNull(null_dt) IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF UPDATE u_orderworkgroup_time SET auditrep = '', auditdate = :null_dt, flag = 0 WHERE u_orderworkgroup_time.billid = :billid AND flag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt IF billtype = 0 THEN UPDATE u_ordermtrl_workgroup SET requiredate = :wkpmx[i].old_requiredate WHERE orderid = :wkpmx[i].orderid AND mtrlid = :wkpmx[i].mtrlid AND wkpname = :wkpmx[i].wkpname AND wrkgrpid = :wkpmx[i].wrkGrpid AND owrkGrpid = :wkpmx[i].owrkGrpid and workgroupid = :wkpmx[i].workgroupid AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新源工组要求完成日期失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF SELECT orderqty INTO :ld_orderqty FROM u_order_ml WHERE scid = :scid AND orderid = :wkpmx[i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询物料:'+wkpmx[i].mtrlcode+'相关生产计划信息失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF // SELECT workgroupid INTO :ll_workgroupid // FROM u_OrderMtrl_workgroup // WHERE orderid = :wkpmx[i].orderid // AND mtrlid = :wkpmx[i].mtrlid // AND wkpname = :wkpmx[i].wkpname // AND wrkGrpid = :wkpmx[i].wrkGrpid // AND owrkGrpid = :wkpmx[i].owrkGrpid // AND scid = :scid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询物料:'+wkpmx[i].mtrlcode+'相关工组进度信息失败,原因:'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF //按日期加入进度表 DELETE FROM u_ordermtrl_wrk_jd WHERE orderid = :wkpmx[i].orderid AND scid = :scid AND wrkgrpid = :wkpmx[i].wrkGrpid AND owrkgrpid = :wkpmx[i].owrkGrpid And wkpname = :wkpmx[i].wkpname and workgroupid = :wkpmx[i].workgroupid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ll_daysafter = DaysAfter(Date(wkpmx[i].old_begindate), Date(wkpmx[i].old_requiredate)) IF ll_daysafter + 1 <> 0 THEN ld_order_wrk = ld_orderqty / (ll_daysafter + 1) FOR ll_j = 1 To ll_daysafter + 1 ldt_wrkdate = DateTime(RelativeDate(Date(wkpmx[i].old_begindate),ll_j - 1 ),Time(0)) INSERT INTO u_ordermtrl_wrk_jd (scid, orderid, wrkgrpid, owrkgrpid, wkpname, wrkdate, orderqty, workgroupid) VALUES (:scid, :wkpmx[i].orderid, :wkpmx[i].wrkGrpid, :wkpmx[i].owrkGrpid , :wkpmx[i].wkpname, :ldt_wrkdate, :ld_order_wrk, :wkpmx[i].workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT END IF ELSEIF billtype = 1 THEN UPDATE u_order_ml SET requiredate = :wkpmx[i].old_requiredate WHERE orderid = :wkpmx[i].orderid AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新源生产计划'+wkpmx[i].ordercode+'要求完成日期失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_orderrqmtrl SET rqdate = rqdate_ori, edate = edate_ori, rqdate_ori = :null_dt, edate_ori = :null_dt WHERE orderid = :wkpmx[i].orderid AND scid = :scid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'用料需求时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ll_daysafter = DaysAfter(Date(wkpmx[i].old_requiredate),Date(wkpmx[i].new_requiredate)) IF ll_daysafter <> 0 THEN UPDATE u_OrderRqMtrl_tree SET rqdate = DATEADD(day,0 - :ll_daysafter, rqdate), edate = DATEADD(day,0 - :ll_daysafter, edate) WHERE orderid = :wkpmx[i].orderid AND scid = :scid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新计划:'+wkpmx[i].ordercode+'运算内容用料需求时间失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF END IF NEXT flag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer p_reset ();//int p_reset() //清除对象及其明细 billid=0 billcode='' opemp='' auditrep='' flag=0 relcode='' dscrp = '' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success int rslt=1 arg_newdescppart=trim(arg_newdescppart) if it_updatebegin or it_newbegin then rslt=0 arg_msg="编辑状态下不可用" goto ext end if if arg_newdescppart='' then rslt=0 arg_msg="要添加内容为空,操作取消" goto ext end if rslt=p_getinfo(arg_billid,arg_msg) if rslt=0 then goto ext if flag=0 then rslt=0 arg_msg="非审核状态下不可用" goto ext end if update u_orderworkgroup_time set dscrp = dscrp+' '+:arg_newdescppart where u_orderworkgroup_time.billid = :arg_billid using commit_transaction; if commit_transaction.sqlcode<>0 then rollback using commit_transaction; rslt=0 arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if commit using commit_transaction; dscrp = dscrp+' '+arg_newdescppart ext: return (rslt) end function public function integer p_getinfo (long arg_billid, ref string arg_msg);//p_getinfo(arg_billid,arg_msg) //0 失败 1成功 INT rslt=1 IF arg_billid<=0 THEN rslt=0 arG_MSG="非法单据唯一码" goto ext end if SELECT billcode, relcode, flag, dscrp, billdate, scid, billtype INTO :billcode, :relcode, :flag, :dscrp, :billdate, :scid, :billtype FROM u_orderworkgroup_time WHERE u_orderworkgroup_time.billid = :arg_billid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="查询操作失败(错误单据唯一码)"+commit_transaction.sqlerrtext goto ext end if billid = arg_billid ext: IF rslt=0 THEN p_reset() return rslt end function public function integer newbegin ();//==================================================================== // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg) //-------------------------------------------------------------------- // Description: 从置对象,设定业务类型,准备建立新进仓单 //-------------------------------------------------------------------- // Arguments: // value long arg_scid // value integer arg_billtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt=1 p_reset() it_newbegin=true it_updatebegin=false return rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);//==================================================================== // function: updatebegin() //-------------------------------------------------------------------- // description: //-------------------------------------------------------------------- // arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // returns: integer //-------------------------------------------------------------------- // author: yyx date: 2004.08.17 //-------------------------------------------------------------------- // modify history: // //==================================================================== long rslt = 1 if arg_billid <= 0 then rslt = 0 goto ext end if rslt = p_getinfo(arg_billid,arg_msg) if rslt = 0 then goto ext if flag = 1 then rslt = 0 arg_msg = '单据已经审核,不可以修改' goto ext end if billid = arg_billid it_newbegin = false it_updatebegin = true p_clearmx() //清除明细 ext: if rslt = 0 then p_reset() return rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_orderworkgroup_time Where u_orderworkgroup_time.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 return 1 end function public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_wkpmx CURSOR FOR SELECT u_orderworkgroup_timemx.printid, u_orderworkgroup_timemx.mtrlid, u_mtrldef.mtrlcode, u_orderworkgroup_timemx.wkpname, u_orderworkgroup_timemx.wrkGrpid, u_orderworkgroup_timemx.owrkGrpid, u_orderworkgroup_timemx.old_requiredate, u_orderworkgroup_timemx.new_requiredate, u_orderworkgroup_timemx.orderid, u_order_ml.ordercode, u_orderworkgroup_timemx.mxdscrp, u_orderworkgroup_timemx.old_begindate, u_orderworkgroup_timemx.new_begindate, u_orderworkgroup_timemx.old_perfinishdate, u_orderworkgroup_timemx.new_perfinishdate, u_orderworkgroup_timemx.workgroupid FROM u_orderworkgroup_timemx,u_mtrldef,u_order_ml WHERE u_orderworkgroup_timemx.billid = :arg_billid AND u_orderworkgroup_timemx.mtrlid = u_mtrldef.mtrlid AND u_orderworkgroup_timemx.orderid = u_Order_ml.orderid USING commit_transaction; OPEN cur_wkpmx; FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid, :wkpmx[i].mtrlcode,:wkpmx[i].wkpname,:wkpmx[i].wrkGrpid,:wkpmx[i].owrkGrpid, :wkpmx[i].old_requiredate, :wkpmx[i].new_requiredate,:wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp, :wkpmx[i].old_begindate,:wkpmx[i].new_begindate, :wkpmx[i].old_perfinishdate,:wkpmx[i].new_perfinishdate,:wkpmx[i].workgroupid; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid, :wkpmx[i].mtrlcode,:wkpmx[i].wkpname,:wkpmx[i].wrkGrpid,:wkpmx[i].owrkGrpid, :wkpmx[i].old_requiredate, :wkpmx[i].new_requiredate,:wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp, :wkpmx[i].old_begindate,:wkpmx[i].new_begindate, :wkpmx[i].old_perfinishdate,:wkpmx[i].new_perfinishdate,:wkpmx[i].workgroupid; LOOP CLOSE cur_wkpmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_orderworkgroup_timemx WHERE u_orderworkgroup_timemx.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF billid = arg_billid it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer acceptmx (long arg_printid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, datetime arg_old_begindate, datetime arg_new_begindate, datetime arg_old_requiredate, datetime arg_new_requiredate, datetime arg_old_perfinishdate, datetime arg_new_perfinishdate, string arg_mxdscrp, long arg_workgroupid, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i String ls_swkpname,ls_owkpname Int li_iflast IF uo_option_orderworkgroup_time = -1000 THEN arg_msg = '选项:[118]工组交接时间精确到小时,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_ordercode) THEN arg_ordercode = '' IF IsNull(arg_wkpname) THEN arg_wkpname = '' IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_wrkGrpid) THEN arg_wrkGrpid = 0 IF IsNull(arg_owrkGrpid) THEN arg_owrkGrpid = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_workgroupid) THEN arg_workgroupid = 0 //检查物料id SELECT count(*) INTO :cnt FROM u_order_ml WHERE mtrlid = :arg_mtrlid AND orderid = :arg_orderid And scid = :scid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询生产计划操作失败,编号:"+arg_mtrlcode GOTO ext END IF //检查工组 IF billtype = 0 THEN //调工组时间单据,检查工组相关信息 SELECT wrkGrpName INTO :ls_swkpname FROM u_sc_workgroup Where wrkGrpid = :arg_wrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出工组名称失败' rslt = 0 GOTO ext END IF SELECT u_ordermtrl_workgroup.iflast INTO :li_iflast FROM u_OrderMtrl_workgroup WHERE u_OrderMtrl_workgroup.wrkGrpid = :arg_wrkgrpid AND u_OrderMtrl_workgroup.owrkGrpid = :arg_owrkgrpid AND u_OrderMtrl_workgroup.orderid = :arg_orderid AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname AND u_OrderMtrl_workgroup.scid = :scid and u_OrderMtrl_workgroup.workgroupid = :arg_workgroupid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode GOTO ext END IF IF li_iflast <> 1 THEN SELECT wrkGrpName INTO :ls_owkpname FROM u_sc_workgroup Where wrkGrpid = :arg_owrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调入工组名称失败' rslt = 0 GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderMtrl_workgroup WHERE u_OrderMtrl_workgroup.wrkGrpid = :arg_wrkgrpid AND u_OrderMtrl_workgroup.owrkGrpid = :arg_owrkgrpid AND u_OrderMtrl_workgroup.orderid = :arg_orderid AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname AND u_OrderMtrl_workgroup.scid = :scid and u_OrderMtrl_workgroup.workgroupid = :arg_workgroupid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "产品:"+arg_mtrlcode+"不存在工组调拨:"+arg_wkpname+','+ls_swkpname+'→'+ls_owkpname GOTO ext END IF END IF //if year(date(arg_old_requiredate)) < 2000 or isnull(arg_old_requiredate) then // rslt = 0 // arg_msg = "缺少源要求完成时间或不合理" // goto ext //end if IF Year(Date(arg_new_requiredate)) < 2000 Or IsNull(arg_new_requiredate) THEN rslt = 0 arg_msg = "缺少新要求完成时间或不合理" GOTO ext END IF //如果工组交接时间精确到天,则清除小时的内容 IF uo_option_orderworkgroup_time = 0 THEN arg_new_requiredate = DateTime(Date(arg_new_requiredate),Time(0)) arg_new_begindate = DateTime(Date(arg_new_begindate),Time(0)) END IF //写入内容 it_mxbt++ wkpmx[it_mxbt].printid = arg_printid wkpmx[it_mxbt].orderid = arg_orderid wkpmx[it_mxbt].ordercode = arg_ordercode wkpmx[it_mxbt].mtrlid = arg_mtrlid wkpmx[it_mxbt].mtrlcode = arg_mtrlcode wkpmx[it_mxbt].wrkGrpid = arg_wrkGrpid wkpmx[it_mxbt].owrkGrpid = arg_owrkGrpid wkpmx[it_mxbt].wkpname = arg_wkpname wkpmx[it_mxbt].old_requiredate = arg_old_requiredate wkpmx[it_mxbt].new_requiredate = arg_new_requiredate wkpmx[it_mxbt].mxdscrp = arg_mxdscrp wkpmx[it_mxbt].old_begindate = arg_old_begindate wkpmx[it_mxbt].new_begindate = arg_new_begindate wkpmx[it_mxbt].old_perfinishdate = arg_old_perfinishdate wkpmx[it_mxbt].new_perfinishdate = arg_new_perfinishdate wkpmx[it_mxbt].workgroupid = arg_workgroupid ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function on uo_workgroup_time.create call super::create TriggerEvent( this, "constructor" ) end on on uo_workgroup_time.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue f_get_sys_option_value('118',str_optionvalue,arg_msg) uo_option_orderworkgroup_time = Long(str_optionvalue) end event