$PBExportHeader$uo_workgroup_wage.sru forward global type uo_workgroup_wage from nonvisualobject end type end forward global type uo_workgroup_wage from nonvisualobject end type global uo_workgroup_wage uo_workgroup_wage type variables PUBLIC PROTECTEDWRITE Long wageid = 0 PUBLIC PROTECTEDWRITE String wagemth = '' PUBLIC PROTECTEDWRITE Int Auditingflag PUBLIC PROTECTEDWRITE String Auditingemp PUBLIC PROTECTEDWRITE DateTime Auditingdate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE DateTime Opdate PUBLIC PROTECTEDWRITE String Opemp String operator = '' //建立操作员 Long proid = 0 String procode String proname String wagename Long workgroupid = 0 String workgroupcode String workgroupname Decimal price Decimal qty String dscrp datetime taskworkdate Transaction commit_transaction //数据commit事务 Boolean IT_NEWBEGIN = TRUE //新建标志 Boolean IT_UPDATEBEGIN = FALSE//修改标志 end variables forward prototypes public function integer p_reset () public function integer newbegin (integer arg_wageid, string arg_wagemth, ref string arg_msg) public function integer save_wg_wage (integer arg_savetype, ref string arg_msg) public function integer p_getinfo (long arg_wageid, string arg_wagemth, long arg_wgid, long arg_proid, ref string arg_msg) public function integer cancel (long arg_wageid, string arg_wagemth, long arg_wgid, long arg_proid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_wageid, string arg_wagemth, long arg_workgroupid, long arg_proid, ref string arg_msg) public function integer auditing (long arg_wageid, string arg_wagemth, ref string arg_msg) public function integer cancel_audit (long arg_wageid, string arg_wagemth, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象 wageid=0 wagemth='' it_newbegin=FALSE it_updatebegin=FALSE RETURN 1 end function public function integer newbegin (integer arg_wageid, string arg_wagemth, ref string arg_msg);long rslt=1,CNT=0 if arg_wageid < 0 then arg_msg = '请选择工资项目' rslt = 0 goto ext end if if arg_wagemth ='' then arg_msg = '请选择月份' rslt = 0 goto ext end if p_reset() it_newbegin=TRUE it_updatebegin=FALSE wageid=arg_wageid wagemth=arg_wagemth ext: if rslt = 0 then p_reset() return rslt end function public function integer save_wg_wage (integer arg_savetype, ref string arg_msg);//arg_savetype=1新建 arg_savetype=2 修改 DateTime server_datetime Long rslt = 1,cnt = 0,ls_i IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(proid) THEN proid = 0 IF IsNull(workgroupid) THEN workgroupid = 0 IF IsNull(procode) THEN procode = '' IF IsNull(proname) THEN proname = '' IF IsNull(wagename) THEN wagename = '' IF IsNull(price) THEN price = 0 IF IsNull(qty) THEN qty = 0 IF IsNull(dscrp) THEN dscrp = '' IF proid = 0 THEN // 工序为空,则不作任何处理 rslt = 0 arg_msg = '错误工序号' GOTO ext END IF IF workgroupid = 0 THEN // 工作组为空,则不作任何处理 rslt = 0 arg_msg = '错误工作组' GOTO ext END IF IF price <= 0 THEN // 单价小于0,则不作任何处理 rslt = 0 arg_msg = '单价小于0' GOTO ext END IF IF qty <= 0 THEN // 数量小于0,则不作任何处理 rslt = 0 arg_msg = '数量小于或等于0' GOTO ext END IF cnt = 0 //检查工序ID SELECT count(*) INTO :cnt FROM u_sc_workprocedure Where u_sc_workprocedure.proid = :proid ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工序ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工序编号: "+String(procode) GOTO ext END IF cnt = 0 //检查工作组ID SELECT count(*) INTO :cnt FROM u_workgroup Where u_workgroup.workgroupid = :workgroupid ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工作组ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工作组: "+String(workgroupcode) GOTO ext END IF cnt = 0 //检查工资项目ID SELECT count(*) INTO :cnt FROM u_gz_wageitem Where u_gz_wageitem.wageid = :wageid ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工资项目ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工资项目编号: "+String(wagename) GOTO ext END IF SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ////////////////////////////////////////////////开始区分:新建/更新 处理 IF arg_savetype = 1 THEN //新建 INSERT INTO u_scwg_taskwork (wageid, workgroupid, proid, procode, proname, wagemth, price, qty, dscrp, Opdate, Opemp, taskworkdate ) VALUES( :wageid, :workgroupid, :proid, :procode, :proname, :wagemth, :price, :qty, :dscrp, :server_datetime, :operator, :taskworkdate )USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ROLLBACK USING commit_transaction; MessageBox('系统提示',"因网络或其它原因导致插入操作失败>>"+"~n"+commit_transaction.SQLErrText) RETURN 0 END IF ELSE //////////////////////////////////////////////////更新 UPDATE u_scwg_taskwork SET procode = :procode, proname = :proname, price = :price, qty = :qty, dscrp = :dscrp, modemp = :operator, moddate = getdate(), taskworkdate=:taskworkdate WHERE u_scwg_taskwork.wageid = :wageid AND u_scwg_taskwork.wagemth = :wagemth AND u_scwg_taskwork.workgroupid = :workgroupid AND u_scwg_taskwork.proid = :proid AND Auditingflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新工作组计件单操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 1 THEN COMMIT USING commit_transaction; END IF Return(rslt) end function public function integer p_getinfo (long arg_wageid, string arg_wagemth, long arg_wgid, long arg_proid, ref string arg_msg);Int rslt = 1 SELECT procode, proname, price, qty, Dscrp, Auditingflag, Auditingemp, Auditingdate, modemp, moddate, Opdate, Opemp into :procode, :proname, :price, :qty, :Dscrp, :Auditingflag, :Auditingemp, :Auditingdate, :modemp, :moddate, :Opdate, :Opemp FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.workgroupid = :arg_wgid AND u_scwg_taskwork.proid = :arg_proid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据内容失败(错误单据唯一码),工作组计件单,~n'+sqlca.sqlerrtext GOTO ext END IF select workgroupcode,workgroupname into :workgroupcode,:workgroupname from u_workgroup where u_workgroup.workgroupid=:arg_wgid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据内容失败(错误单据唯一码),工作组' GOTO ext END IF wageid = arg_wageid wagemth = arg_wagemth proid = arg_proid workgroupid = arg_wgid ext: RETURN rslt end function public function integer cancel (long arg_wageid, string arg_wagemth, long arg_wgid, long arg_proid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单 //0 FAIL, 1 SUCCESS Int rslt = 1 IF arg_wageid < 0 THEN arg_msg = '请选择工资项目' rslt = 0 GOTO ext END IF IF arg_wgid <= 0 THEN rslt = 0 arg_msg = '错误工作组唯一码' GOTO ext END IF IF arg_wagemth = '' THEN arg_msg = '请选择月份' rslt = 0 GOTO ext END IF IF arg_proid <= 0 THEN rslt = 0 arg_msg = '错误工序唯一码' GOTO ext END IF IF p_getinfo(arg_wageid,arg_wagemth,arg_wgid,arg_proid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Auditingflag <> 0 THEN rslt = 0 arg_msg = "工作组:"+workgroupcode+",工序:"+procode+",已经审核,不可以删除" GOTO ext END IF DELETE FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.workgroupid = :arg_wgid AND u_scwg_taskwork.proid = :arg_proid and u_scwg_taskwork.Auditingflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE IF arg_ifcommit THEN COMMIT USING commit_transaction; END IF ext: p_reset() Return (rslt) end function public function integer updatebegin (long arg_wageid, string arg_wagemth, long arg_workgroupid, long arg_proid, ref string arg_msg);////UPDATEbegin(long arg_outwareid,INT arg_billtype,long arg_relid) ////从置对象,设定业务类型与关联ID,准备更新单据 ////0 fail 1 success int rslt=1,CNT=0 IF arg_wageid<=0 THEN rslt=0 arg_wageid=0 goto ext end if cnt = 0 //检查工序ID SELECT count(*) INTO :cnt FROM u_sc_workprocedure Where u_sc_workprocedure.proid = :arg_proid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工序ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工序编号 " GOTO ext END IF cnt = 0 //检查工作组ID SELECT count(*) INTO :cnt FROM u_workgroup Where u_workgroup.workgroupid = :arg_workgroupid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工作组ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工作组 " GOTO ext END IF cnt = 0 //检查工资项目ID SELECT count(*) INTO :cnt FROM u_gz_wageitem Where u_gz_wageitem.wageid = :arg_wageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工资项目ID" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的工资项目" GOTO ext END IF wageid=arg_wageid wagemth=arg_wagemth workgroupid=arg_workgroupid proid=arg_proid it_newbegin=FALSE it_updatebegin=TRUE ext: IF rslt=0 THEN p_RESET() return rslt end function public function integer auditing (long arg_wageid, string arg_wagemth, ref string arg_msg);Int rslt = 1 Long ll_wgid,ll_wgid_arr[],count,ll_i Long ll_workgroupid Long ll_empid,ll_empid_arr[],ll_mxt,ll_j Int cnt_wg_emp = 0 String ls_workgroupcode Long ll_flagnum long cnt //检查该月份,该工资项目是否已开工资变更单 cnt = 0 SELECT count(*) INTO :cnt FROM u_wage_change WHERE wageid = :arg_wageid AND wagemth = :arg_wagemth; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询该月份该工资项目是否已开工资变更单失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '该月份该工资项目已开工资变更单,不能撤审' GOTO ext END IF //查询是否存在已经审核的记录 SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork Where u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.Auditingflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,已经审核数量' GOTO ext END IF IF ll_flagnum > 0 THEN rslt = 0 arg_msg = '该月份的工资项目存在部分已审核的记录,请先撤审' GOTO ext END IF DECLARE wgid CURSOR FOR SELECT DISTINCT (workgroupid) FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.Auditingflag = 0 ORDER BY u_scwg_taskwork.workgroupid ASC USING commit_transaction; OPEN wgid; FETCH wgid INTO :ll_wgid; DO WHILE commit_transaction.SQLCode = 0 count++ ll_wgid_arr[count] = ll_wgid FETCH wgid INTO :ll_wgid; LOOP CLOSE wgid; FOR ll_i = 1 TO count cnt_wg_emp = 0 SELECT COUNT(*) , u_workgroupmx.workgroupid,u_workgroup.workgroupcode INTO :cnt_wg_emp,:ll_workgroupid,:ls_workgroupcode FROM u_workgroupmx INNER JOIN u_workgroup ON u_workgroupmx.workgroupid = u_workgroup.workgroupid WHERE (u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i]) Group By u_workgroup.workgroupcode, u_workgroupmx.workgroupid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,组成员' GOTO ext END IF IF cnt_wg_emp <= 0 THEN rslt = 0 arg_msg = '编号为:'+ls_workgroupcode+'的工作组没有成员,请先建立工作组成员' GOTO ext END IF ll_mxt = 0 DECLARE WG_EMP CURSOR FOR SELECT empid FROM u_workgroupmx WHERE u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i] Order By u_workgroupmx.empid Asc; OPEN WG_EMP; FETCH WG_EMP INTO :ll_empid; DO WHILE commit_transaction.SQLCode = 0 ll_mxt++ ll_empid_arr[ll_mxt] = ll_empid FETCH WG_EMP INTO :ll_empid; LOOP CLOSE WG_EMP; IF ll_mxt > 0 THEN //该组金额转移到组中第一人 INSERT INTO u_scwg_taskwork_money (wageid, workgroupid , empid , wagemth , groupamt, empamt, Auditingflag, Opdate, Opemp ) SELECT wageid, workgroupid, :ll_empid_arr[1], wagemth, sum(u_scwg_taskwork.price*u_scwg_taskwork.qty), sum(u_scwg_taskwork.price*u_scwg_taskwork.qty), 0, getdate(), :publ_operator FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.workgroupid = :ll_wgid_arr[ll_i] AND u_scwg_taskwork.Auditingflag = 0 GROUP BY u_scwg_taskwork.wageid, u_scwg_taskwork.wagemth, u_scwg_taskwork.workgroupid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入操作失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF //其他组员的金额为0 IF ll_mxt >= 2 THEN FOR ll_j = 2 TO ll_mxt INSERT INTO u_scwg_taskwork_money (wageid, workgroupid , empid , wagemth , groupamt, empamt, Auditingflag, Opdate, Opemp ) SELECT wageid, workgroupid, :ll_empid_arr[ll_j], wagemth, sum(u_scwg_taskwork.price*u_scwg_taskwork.qty), 0, 0, getdate(), :publ_operator FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.workgroupid = :ll_wgid_arr[ll_i] AND u_scwg_taskwork.Auditingflag = 0 GROUP BY u_scwg_taskwork.wageid, u_scwg_taskwork.wagemth, u_scwg_taskwork.workgroupid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入操作失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF END IF NEXT //更新审核标志 UPDATE u_scwg_taskwork SET u_scwg_taskwork.Auditingflag = 1, u_scwg_taskwork.Auditingemp = :publ_operator, u_scwg_taskwork.Auditingdate = getdate() WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.Auditingflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; else commit USING commit_transaction; END IF RETURN rslt end function public function integer cancel_audit (long arg_wageid, string arg_wagemth, ref string arg_msg);Int rslt = 1 Long ll_flagnum DateTime ls_null SetNull(ls_null) //查询是否存在审核的记录 ll_flagnum = 0 SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork WHERE u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.Auditingflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,已经审核数量' GOTO ext END IF IF ll_flagnum <= 0 THEN rslt = 0 arg_msg = '该月份的工资项目不存在审核的记录' GOTO ext END IF //查询相关工资表是否已经通过审核 ll_flagnum = 0 SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_money WHERE u_scwg_taskwork_money.wageid = :arg_wageid AND u_scwg_taskwork_money.wagemth = :arg_wagemth AND u_scwg_taskwork_money.Auditingflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,已经审核数量,工资表' GOTO ext END IF IF ll_flagnum > 0 THEN rslt = 0 arg_msg = '该月份的工资项目部分已通过分配审核' GOTO ext END IF //先删除工资表记录 DELETE FROM u_scwg_taskwork_money Where u_scwg_taskwork_money.wageid = :arg_wageid AND u_scwg_taskwork_money.wagemth = :arg_wagemth USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除工资表操作失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF //更新审核标志 UPDATE u_scwg_taskwork SET u_scwg_taskwork.Auditingflag = 0, u_scwg_taskwork.Auditingemp = '', u_scwg_taskwork.Auditingdate = :ls_null Where u_scwg_taskwork.wageid = :arg_wageid AND u_scwg_taskwork.wagemth = :arg_wagemth AND u_scwg_taskwork.Auditingflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSE COMMIT USING commit_transaction; END IF RETURN rslt end function on uo_workgroup_wage.create call super::create TriggerEvent( this, "constructor" ) end on on uo_workgroup_wage.destroy TriggerEvent( this, "destructor" ) call super::destroy end on