$PBExportHeader$uo_scwg_taskwork_2.sru forward global type uo_scwg_taskwork_2 from nonvisualobject end type end forward global type uo_scwg_taskwork_2 from nonvisualobject end type global uo_scwg_taskwork_2 uo_scwg_taskwork_2 type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE Long scid PUBLIC PROTECTEDWRITE String billcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep PUBLIC PROTECTEDWRITE Int affirmflag PUBLIC PROTECTEDWRITE DateTime affirmdate PUBLIC PROTECTEDWRITE String affirmemp Int billtype DateTime billdate String dscrp Long wagemth String rep String relcode Long wageid Long wrkgrpid string relempstr long relid long wkpid Boolean if_getid_ture = false s_scwg_taskwork_2 taskworkmx[] Transaction commit_transaction Long it_mxbt = 0 Boolean it_newbegin = FALSE Boolean it_updatebegin = FALSE Int uo_option_taskwork_not_affirm Int uo_option_taskwork2_noorder Int uo_option_taskwork_person_noorder Int uo_option_taskwork_procode_order Int uo_option_taskwork_price_if_mod Int uo_option_if_taskwork_acmpqty int uo_option_check_noworkprice end variables forward prototypes public function integer p_clearmx () public function integer p_reset () public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer affirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_affirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer getinfo (long arg_billid, string arg_msg) public function integer auditmx_1 (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer cauditmx_1 (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer auditing_0 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer auditing_2 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing_0 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing_2 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function decimal uo_wage_fp_formula (string arg_formula, decimal arg_amt, decimal arg_assignamt, decimal arg_assignamt_sm, decimal arg_assignscore, decimal arg_assignscore_sm, decimal arg_assignday, decimal arg_assignday_sm) public function integer acceptmx (long arg_mtrlid, string arg_procode, string arg_proname, decimal arg_qty, decimal arg_price, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, string arg_woodcode, string arg_pcode, string arg_ycreason, long arg_orderid, string arg_reason, string arg_unit, decimal arg_failqty, decimal arg_facthours, string arg_wpcode) public function integer auditing_1 (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing_1 (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer p_reset ();//INT p_RESET() //清除对象及其明细 billid=0 billcode='' opemp='' auditingrep='' flag=0 wagemth=0 rep="" wageid=0 dscrp='' relcode='' wkpid = 0 it_newbegin=FALSE it_updatebegin=FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer updatebegin (long arg_billid, ref string arg_msg);int rslt = 1 if arg_billid <= 0 then rslt = 0 goto ext end if if p_getinfo(arg_billid,arg_msg) = 0 then rslt = 0 goto ext end if IF affirmflag = 1 THEN rslt = 0 arg_msg = '单据已经确认,不可以修改' GOTO ext END IF if flag = 1 then rslt = 0 arg_msg = '单据已经审核,不可以修改' goto ext end if billid = arg_billid p_clearmx() it_newbegin = false it_updatebegin = true ext: if rslt = 0 then p_reset() return rslt end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid IF IsNull(wageid) THEN wageid = 0 IF IsNull(wrkgrpid) THEN wrkgrpid = 0 IF IsNull(relcode) THEN relcode = '' IF IsNull(rep) THEN rep = '' IF IsNull(wagemth) THEN wagemth = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relid) THEN relid = 0 IF IsNull(wkpid) THEN wkpid = 0 IF it_newbegin = FALSE AND it_updatebegin = FALSE 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 it_mxbt = 0 THEN // rslt = 0 arg_msg = "没有计件明细" GOTO ext END IF IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN rslt = 0 arg_msg = "缺少计件时间或不合理" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where wageid = :wageid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工资项目失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在工资项目!" GOTO ext END IF if trim(rep) = '' then rslt = 0 arg_msg = '请填写经手人' goto ext end if cnt = 0 IF billtype = 0 OR billtype = 2 THEN SELECT count(*) INTO :cnt FROM u_workgroup Where workgroupid = :wrkgrpid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工作组失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在工作组!" GOTO ext END IF ELSEIF billtype = 1 THEN SELECT count(*) INTO :cnt FROM u_rs_empinfo Where empid = :wrkgrpid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询员工资料失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在员工资料!" GOTO ext END IF END IF String ls_empname[] Long ll_i,ll_j ll_i = 1 relempstr = '' IF billtype = 0 OR billtype = 2 THEN DECLARE cur_emp CURSOR FOR SELECT u_rs_empinfo.Empname FROM u_rs_empinfo, u_workgroupmx WHERE ( u_rs_empinfo.empid = u_workgroupmx.empid ) AND (u_workgroupmx.workgroupid = :wrkgrpid); OPEN cur_emp; FETCH cur_emp INTO :ls_empname[ll_i]; DO WHILE sqlca.SQLCode = 0 ll_i++ FETCH cur_emp INTO :ls_empname[ll_i]; LOOP CLOSE cur_emp; FOR ll_j = 1 TO ll_i - 1 relempstr = relempstr + ls_empname[ll_j] + ',' NEXT END IF //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_scwg_taskwork_2 // WHERE flag = 1 // AND wagemth = :wagemth // AND wrkgrpid = :wrkgrpid // AND billtype = :billtype // AND wageid = :wageid USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询本月是否有单审核失败,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext //END IF // //IF cnt > 0 THEN // arg_msg = '查询本月已有单审核,不能保存' // rslt = 0 // GOTO ext //END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_scwg_taskwork_2","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN billcode = getid(0,"JW",Date(server_dt),if_getid_ture,commit_transaction) //取得新单据编号 ELSEIF billtype = 1 THEN billcode = getid(0,"JP",Date(server_dt),if_getid_ture,commit_transaction) //取得新单据编号 ELSEIF billtype = 2 THEN //工作组月分配异常计件单 billcode = getid(0,"AW",Date(server_dt),if_getid_ture,commit_transaction) //取得新单据编号 END IF IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单据编号" GOTO ext END IF INSERT INTO u_scwg_taskwork_2 ( billid, billdate, wagemth, rep, relcode, dscrp, scid, billcode, wrkgrpid, opemp, opdate, wageid, billtype, relempstr, relid, wkpid) VALUES ( :ls_newid, :billdate, :wagemth, :rep, :relcode, :dscrp, :scid, :billcode, :wrkgrpid, :publ_operator, :server_dt , :wageid, :billtype, :relempstr, :relid, :wkpid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText GOTO ext END IF // billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_scwg_taskwork_2_mx ( billid, procode, proname, qty, price, mxdscrp, mtrlid, printid, status, woodcode, pcode, ycreason, orderid, ordercode, reason, unit, failqty, facthours, wpcode) VALUES ( :ls_newid, :taskworkmx[i].procode, :taskworkmx[i].proname, :taskworkmx[i].qty, :taskworkmx[i].price, :taskworkmx[i].mxdscrp, :taskworkmx[i].mtrlid, :taskworkmx[i].printid, :taskworkmx[i].status, :taskworkmx[i].woodcode, :taskworkmx[i].pcode, :taskworkmx[i].ycreason, :taskworkmx[i].orderid, :taskworkmx[i].ordercode, :taskworkmx[i].reason, :taskworkmx[i].unit, :taskworkmx[i].failqty, :taskworkmx[i].facthours, :taskworkmx[i].wpcode) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //还原noticeid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK ; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_scwg_taskwork_2 SET billdate = :billdate, wagemth = :wagemth, rep = :rep, relcode = :relcode, dscrp = :dscrp, billcode = :billcode, wrkgrpid = :wrkgrpid, modemp = :publ_operator, moddate = :server_dt, wageid = :wageid, relempstr = :relempstr, relid = :relid, wkpid = :wkpid WHERE billid = :billid AND flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF // 删除原有明细 DELETE FROM u_scwg_taskwork_2_mx Where billid = :billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_scwg_taskwork_2_mx ( billid, procode, proname, qty, price, mxdscrp, mtrlid, printid, status, woodcode, pcode, ycreason, orderid, ordercode, reason, unit, failqty, facthours, wpcode) VALUES ( :billid, :taskworkmx[i].procode, :taskworkmx[i].proname, :taskworkmx[i].qty, :taskworkmx[i].price, :taskworkmx[i].mxdscrp, :taskworkmx[i].mtrlid, :taskworkmx[i].printid, :taskworkmx[i].status, :taskworkmx[i].woodcode, :taskworkmx[i].pcode, :taskworkmx[i].ycreason, :taskworkmx[i].orderid, :taskworkmx[i].ordercode, :taskworkmx[i].reason, :taskworkmx[i].unit, :taskworkmx[i].failqty, :taskworkmx[i].facthours, :taskworkmx[i].wpcode) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT // END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer newbegin (long arg_scid, ref string arg_msg);long rslt = 1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if p_reset() scid=arg_scid it_newbegin=TRUE it_updatebegin=FALSE ext: if rslt = 0 then p_reset() return rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: add_dscrp(arg_billid,arg_newdescppart,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // value string arg_newdescppart // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt = 1 arg_newdescppart = trim(arg_newdescppart) if arg_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 p_getinfo(arg_billid,arg_msg) = 0 then rslt = 0 goto ext end if if flag = 0 then rslt = 0 arg_msg = "非审核状态下不可用" goto ext end if update u_scwg_taskwork_2 set dscrp = dscrp+' '+:arg_newdescppart where u_scwg_taskwork_2.billid = :billid using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.sqlerrtext goto ext end if dscrp = dscrp+' '+arg_newdescppart ext: if rslt = 0 then rollback; elseif rslt = 1 and arg_ifcommit then commit; end if return rslt end function public function integer affirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i uo_order_ml uo_ml uo_ml = CREATE uo_order_ml IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF affirmflag = 1 THEN rslt = 0 arg_msg = '该单据已确认' GOTO ext END IF UPDATE u_scwg_taskwork_2 SET affirmemp = :publ_operator, affirmdate = getdate(), affirmflag = 1 WHERE u_scwg_taskwork_2.billid = :arg_billid AND affirmflag = 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 taskworkmx[i].orderid > 0 THEN IF uo_ml.uof_add_procode_qty(scid,taskworkmx[i].orderid,& taskworkmx[i].procode,billdate, taskworkmx[i].qty,arg_msg,FALSE) = 0 THEN arg_msg = '第'+string(i)+'行,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_ml RETURN rslt end function public function integer c_affirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) Long i uo_order_ml uo_ml uo_ml = CREATE uo_order_ml IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF affirmflag = 0 THEN rslt = 0 arg_msg = '该单据未确认,不能反确认' GOTO ext END IF UPDATE u_scwg_taskwork_2 SET affirmemp = '', affirmdate = :null_dt, affirmflag = 0 WHERE u_scwg_taskwork_2.billid = :arg_billid AND affirmflag = 1 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 taskworkmx[i].orderid > 0 THEN IF uo_ml.uof_add_procode_qty(scid,taskworkmx[i].orderid,& taskworkmx[i].procode,billdate,0 - taskworkmx[i].qty,arg_msg,FALSE) = 0 THEN arg_msg = '第'+string(i)+'行,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_ml RETURN rslt end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法的单据唯一码" GOTO ext END IF SELECT billid, billdate, wagemth, rep, relcode, dscrp, scid, billcode, wrkgrpid, flag, affirmflag, scid, wageid INTO :billid, :billdate, :wagemth, :rep, :relcode, :dscrp, :scid, :billcode, :wrkgrpid, :flag, :affirmflag, :scid, :wageid FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.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 getinfo (long arg_billid, string arg_msg); Int rslt = 1 Long 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_mx CURSOR FOR SELECT u_scwg_taskwork_2_mx.mtrlid, u_scwg_taskwork_2_mx.qty, u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2_mx.ordercode, u_scwg_taskwork_2_mx.procode, u_scwg_taskwork_2_mx.price, u_scwg_taskwork_2_mx.wpcode FROM u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = :arg_billid USING commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :taskworkmx[i].mtrlid,:taskworkmx[i].qty, :taskworkmx[i].orderid,:taskworkmx[i].ordercode, :taskworkmx[i].procode,:taskworkmx[i].price,:taskworkmx[i].wpcode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_mx INTO :taskworkmx[i].mtrlid,:taskworkmx[i].qty, :taskworkmx[i].orderid,:taskworkmx[i].ordercode, :taskworkmx[i].procode,:taskworkmx[i].price,:taskworkmx[i].wpcode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.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 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditmx_1 (long arg_billid, ref string arg_msg, boolean arg_ifcommit);//arg_wrkgrpid : -1 全部工作组 Long cnt,i Int rslt = 1 Decimal ls_emp_sumwage uo_wage u_wage u_wage = CREATE uo_wage IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_check_noworkprice = -1000 THEN arg_msg = '选项:[240]计件单没有工价不能审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_taskwork_not_affirm = 0 THEN IF affirmflag = 0 THEN rslt = 0 arg_msg = '单据还没有确认,不能审核,请先确认' GOTO ext END IF END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,操作取消' GOTO ext END IF FOR i = 1 TO it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = taskworkmx[i].price * taskworkmx[i].qty IF uo_option_check_noworkprice = 1 THEN IF taskworkmx[i].price = 0 THEN rslt = 0 arg_msg = '行'+String(i)+',没有填写工价,不允许审核' GOTO ext END IF END IF IF u_wage.f_setwagemxdata(wagemth,wrkgrpid,wageid,ls_emp_sumwage,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate() WHERE u_scwg_taskwork_2.billid = :arg_billid AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 1 USING commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate(), u_scwg_taskwork_2.affirmdate = getdate(), u_scwg_taskwork_2.affirmemp = :publ_operator, u_scwg_taskwork_2.affirmflag = 1 WHERE u_scwg_taskwork_2.billid = :arg_billid AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 1 USING commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEif rslt = 1 and arg_ifcommit then COMMIT USING commit_transaction; END IF DESTROY u_wage RETURN rslt end function public function integer cauditmx_1 (long arg_billid, ref string arg_msg, boolean arg_ifcommit);//arg_wrkgrpid : -1 全部工作组 Long cnt,i Int rslt = 1 Decimal ls_emp_sumwage DateTime ls_null SetNull(ls_null) IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF uo_wage u_wage u_wage = CREATE uo_wage IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据还没有审核,操作取消' GOTO ext END IF IF f_check_wage_audit(wagemth,scid,arg_msg) = 0 THEN rslt = 0 arg_msg = arg_msg + ',不能撤审' GOTO ext END IF //检查该月份,该工资项目是否已开工资变更单 cnt = 0 SELECT count(*) INTO :cnt FROM u_wage_change WHERE wageid = :wageid AND wagemth = :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 FOR i = 1 TO it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = taskworkmx[i].price * taskworkmx[i].qty IF u_wage.f_setwagemxdata(wagemth,wrkgrpid,wageid,0 - ls_emp_sumwage,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.auditingrep = '', u_scwg_taskwork_2.auditingdate = :ls_null WHERE u_scwg_taskwork_2.billid = :arg_billid AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 1 USING commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.auditingrep = '', u_scwg_taskwork_2.auditingdate = :ls_null, u_scwg_taskwork_2.affirmdate = :ls_null, u_scwg_taskwork_2.affirmemp = '', u_scwg_taskwork_2.affirmflag = 0 WHERE u_scwg_taskwork_2.billid = :arg_billid AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 1 USING commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEif rslt = 1 and arg_ifcommit then COMMIT USING commit_transaction; END IF DESTROY u_wage RETURN rslt end function public function integer auditing_0 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);//arg_wrkgrpid : -1 全部工作组 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 String ls_empcode,ls_empcode_arr[] Decimal ld_assignscore_arr[] Decimal ld_assignday_arr[] Long ll_assigntype,ll_assigntype_arr[] Decimal ll_assignamt,ll_assignamt_arr[] Decimal ld_prwageamt_arr[],ld_prwagerate_arr[],ld_prwageamt_arr_insert[] Int cnt_wg_emp = 0 String ls_workgroupcode Long ll_flagnum Long ll_0_price_cnt String ls_0_price_billcode String ls_0_price_msg Long ll_k Decimal temp_sumscore = 0,temp_empscore = 0 Decimal temp_sumdays = 0,temp_empdays = 0,temp_wageamt_sum = 0,temp_sumrate,temp_wageamt_cmp Decimal ld_empamt_insert Decimal ld_wageamt_sum,ld_prwageamt,ld_prwagerate DateTime ldt_getdate Decimal ld_wageamt_cmp If uo_option_taskwork_not_affirm = -1000 Then arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If String ls_ifuse_formula ls_ifuse_formula = f_ProfileString(-1,'w_workgroup_wage_money_formula', "formula", '') If uo_option_taskwork_not_affirm = 0 Then ll_flagnum = 0 Select count(*) Into :ll_flagnum From u_scwg_taskwork_2 Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.affirmflag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询是否有单未确认操作失败,'+commit_transaction.SQLErrText Goto ext End If If ll_flagnum > 0 Then rslt = 0 arg_msg = '该月份存在未确认的单据('+String(ll_flagnum)+'),请先全部确认' Goto ext End If End If ll_flagnum = 0 Select count(*) Into :ll_flagnum From u_scwg_taskwork_2 Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询是否有单要审核操作失败,'+commit_transaction.SQLErrText Goto ext End If If ll_flagnum = 0 Then // rslt = 0 // arg_msg = '该月份不存在要审核的单据,请检查' rslt = 1 Goto ext End If ll_flagnum = 0 Select count(*) Into :ll_flagnum From u_scwg_taskwork_2 Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 1 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询是否有单已经审核操作失败,'+commit_transaction.SQLErrText Goto ext End If If ll_flagnum > 0 Then rslt = 0 arg_msg = '该月份的工资项目存在部分已审核的记录('+String(ll_flagnum)+'),请先撤审' Goto ext End If //检查0单价 Declare cur_0_price_wkp Cursor For Select distinct u_scwg_taskwork_2.billcode From u_scwg_taskwork_2,u_scwg_taskwork_2_mx Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) And ( u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid ) And ( u_scwg_taskwork_2_mx.price = 0 ) Order By u_scwg_taskwork_2.billcode Asc Using commit_transaction; Open cur_0_price_wkp; Fetch cur_0_price_wkp Into :ls_0_price_billcode; Do While sqlca.SQLCode = 0 ll_0_price_cnt++ ls_0_price_msg = ls_0_price_msg + '单据:'+ls_0_price_billcode+',0单价 ~n' Fetch cur_0_price_wkp Into :ls_0_price_billcode; Loop Close cur_0_price_wkp; If ll_0_price_cnt > 0 Then arg_msg = ls_0_price_msg rslt = 0 Goto ext End If Declare wgid Cursor For Select distinct wrkgrpid From u_scwg_taskwork_2 Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Order By u_scwg_taskwork_2.wrkgrpid 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 temp_sumrate = 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 u_workgroupmx.empid, u_workgroupmx.assigntype, u_workgroupmx.assignamt, u_rs_empinfo.empcode, u_workgroupmx.prwageamt, u_workgroupmx.prwagerate From u_workgroupmx,u_rs_empinfo Where u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i] And u_workgroupmx.empid = u_rs_empinfo.empid Order By u_workgroupmx.empid Asc Using commit_transaction; Open wg_emp; Fetch wg_emp Into :ll_empid,:ll_assigntype,:ll_assignamt,:ls_empcode,:ld_prwageamt,:ld_prwagerate; Do While commit_transaction.SQLCode = 0 ll_mxt++ ll_empid_arr[ll_mxt] = ll_empid ll_assigntype_arr[ll_mxt] = ll_assigntype if ll_assigntype = 0 then ll_assignamt = 1 ll_assignamt_arr[ll_mxt] = ll_assignamt ls_empcode_arr[ll_mxt] = ls_empcode ld_assignday_arr[ll_mxt] = 0 ld_assignscore_arr[ll_mxt] = 0 ld_prwageamt_arr[ll_mxt] = ld_prwageamt ld_prwagerate_arr[ll_mxt] = ld_prwagerate ld_prwageamt_arr_insert[ll_mxt] = 0 temp_sumrate = temp_sumrate + ll_assignamt Fetch wg_emp Into :ll_empid,:ll_assigntype,:ll_assignamt,:ls_empcode,:ld_prwageamt,:ld_prwagerate; Loop Close wg_emp; //计算各种分配模式的比例0:手动,1:固定比例,2:按天数,3:按天数+分数 ld_wageamt_sum = 0 Select sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty), getdate() Into :ld_wageamt_sum, :ldt_getdate From u_scwg_taskwork_2_mx,u_scwg_taskwork_2 Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.wrkgrpid = :ll_wgid_arr[ll_i] And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询当月该工组计件总工资失败,原因:'+commit_transaction.SQLErrText Goto ext End If temp_wageamt_sum = ld_wageamt_sum For ll_k = 1 To ll_mxt Select isnull(sum(U_TestMx_bd.bdday),0), isnull(sum(U_TestMx_bd.bdday * U_TestMx_bd.Score),0) Into :temp_sumdays,:temp_sumscore From u_test_bd Inner JOIN U_TestMx_bd ON u_test_bd.TestID = U_TestMx_bd.TestID Where u_test_bd.flag = 1 And u_test_bd.wagemth = :arg_wagemth And U_TestMx_bd.empid In ( Select empid From u_workgroupmx Where u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i] )Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询小组的考核总(天数),总(分数*天数)失败,原因:'+commit_transaction.SQLErrText Goto ext End If Select isnull(sum(U_TestMx_bd.bdday),0), isnull(sum(U_TestMx_bd.bdday * U_TestMx_bd.Score),0) Into :temp_empdays,:temp_empscore From u_test_bd Inner JOIN U_TestMx_bd ON u_test_bd.TestID = U_TestMx_bd.TestID Where u_test_bd.flag = 1 And u_test_bd.wagemth = :arg_wagemth And U_TestMx_bd.empid = :ll_empid_arr[ll_k] Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询员工:'+ls_empcode_arr[ll_k]+',的考核总(天数),总(分数*天数)失败,原因:'+commit_transaction.SQLErrText Goto ext End If If temp_wageamt_sum < ld_wageamt_sum * ld_prwagerate_arr[ll_k] + ld_prwageamt_arr[ll_k] Then ld_prwageamt_arr_insert[ll_k] = temp_wageamt_sum temp_wageamt_sum = 0 Else ld_prwageamt_arr_insert[ll_k] = ld_wageamt_sum * ld_prwagerate_arr[ll_k] + ld_prwageamt_arr[ll_k] temp_wageamt_sum = temp_wageamt_sum - ld_wageamt_sum * ld_prwagerate_arr[ll_k] - ld_prwageamt_arr[ll_k] End If If ll_assigntype_arr[ll_k] = 2 Then If temp_sumdays = 0 Then rslt = 0 arg_msg = '工资月份['+String(arg_wagemth)+']有小组工资分配按天数计算比例进行分配,但没有对应该月份的绩效考核天数!请检查' Goto ext Else ll_assignamt_arr[ll_k] = Round(temp_empdays/temp_sumdays,5) ld_assignday_arr[ll_k] = temp_empdays ld_assignscore_arr[ll_k] = temp_empscore End If ElseIf ll_assigntype_arr[ll_k] = 3 Then If temp_sumscore = 0 Then rslt = 0 arg_msg = '工资月份['+String(arg_wagemth)+']有小组工资分配按天数+分数计算比例进行分配,但没有对应该月份的绩效考核天数!请检查' Goto ext Else ll_assignamt_arr[ll_k] = Round(temp_empscore/temp_sumscore,5) ld_assignday_arr[ll_k] = temp_empdays ld_assignscore_arr[ll_k] = temp_empscore End If End If Next temp_wageamt_cmp = temp_wageamt_sum If ll_mxt > 0 Then If ll_assigntype_arr[1] = 0 Then If ls_ifuse_formula = '' Then ld_empamt_insert = temp_wageamt_sum + ld_prwageamt_arr_insert[1] Else ld_wageamt_cmp = uo_wage_fp_formula(ls_ifuse_formula,temp_wageamt_sum,ll_assignamt_arr[1],temp_sumrate,ld_assignscore_arr[1],temp_sumscore,ld_assignday_arr[1],temp_sumdays) If ld_wageamt_cmp > temp_wageamt_cmp Then ld_empamt_insert = temp_wageamt_cmp + ld_prwageamt_arr_insert[1] temp_wageamt_cmp = 0 Else ld_empamt_insert = ld_wageamt_cmp + ld_prwageamt_arr_insert[1] temp_wageamt_cmp = temp_wageamt_cmp - ld_wageamt_cmp End If End If Else ld_empamt_insert = temp_wageamt_sum * ll_assignamt_arr[1] + ld_prwageamt_arr_insert[1] End If //该组金额转移到组中第一人 Insert Into u_scwg_taskwork_money (wageid, workgroupid , empid , wagemth , groupamt, empamt, auditingflag, opdate, opemp, billtype, assigntype, assignamt, assignscore, assignday, prwageamt) Values( :arg_wageid, :ll_wgid_arr[ll_i], :ll_empid_arr[1], :arg_wagemth, :ld_wageamt_sum, :ld_empamt_insert , 0, :ldt_getdate, :publ_operator, 0, :ll_assigntype_arr[1] , :ll_assignamt_arr[1], :ld_assignscore_arr[1] , :ld_assignday_arr[1], :ld_prwageamt_arr_insert[1]) 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 If ll_assigntype_arr[ll_j] = 0 Then If ls_ifuse_formula = '' Then ld_empamt_insert = ld_prwageamt_arr_insert[ll_j] Else ld_wageamt_cmp = uo_wage_fp_formula(ls_ifuse_formula,temp_wageamt_sum,ll_assignamt_arr[ll_j],temp_sumrate,ld_assignscore_arr[ll_j],temp_sumscore,ld_assignday_arr[ll_j],temp_sumdays) If ld_wageamt_cmp > temp_wageamt_cmp Then ld_empamt_insert = temp_wageamt_cmp + ld_prwageamt_arr_insert[ll_j] temp_wageamt_cmp = 0 Else ld_empamt_insert = ld_wageamt_cmp + ld_prwageamt_arr_insert[ll_j] temp_wageamt_cmp = temp_wageamt_cmp - ld_wageamt_cmp End If End If Else ld_empamt_insert = temp_wageamt_sum* ll_assignamt_arr[ll_j] + ld_prwageamt_arr_insert[ll_j] End If Insert Into u_scwg_taskwork_money (wageid, workgroupid , empid , wagemth , groupamt, empamt, auditingflag, opdate, opemp, billtype, assigntype, assignamt, assignscore, assignday, prwageamt) Values( :arg_wageid, :ll_wgid_arr[ll_i], :ll_empid_arr[ll_j], :arg_wagemth, :ld_wageamt_sum, :ld_empamt_insert, 0, :ldt_getdate, :publ_operator, 0, :ll_assigntype_arr[ll_j] , :ll_assignamt_arr[ll_j], :ld_assignscore_arr[ll_j] , :ld_assignday_arr[ll_j], :ld_prwageamt_arr_insert[ll_j]) 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 If uo_option_taskwork_not_affirm = 0 Then Update u_scwg_taskwork_2 Set u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate() Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Using commit_transaction; Else Update u_scwg_taskwork_2 Set u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.affirmflag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate(), u_scwg_taskwork_2.affirmdate = getdate(), u_scwg_taskwork_2.affirmemp = :publ_operator Where u_scwg_taskwork_2.wageid = :arg_wageid And u_scwg_taskwork_2.wagemth = :arg_wagemth And u_scwg_taskwork_2.flag = 0 And u_scwg_taskwork_2.billtype = 0 And ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid Or :arg_wrkgrpid = -1 ) Using commit_transaction; End If If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If 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 auditing_2 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);//arg_wrkgrpid : -1 全部工作组 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 String ls_empcode,ls_empcode_arr[] Decimal ld_assignscore_arr[] Decimal ld_assignday_arr[] Long ll_assigntype,ll_assigntype_arr[] Decimal ll_assignamt,ll_assignamt_arr[] Int cnt_wg_emp = 0 String ls_workgroupcode Long ll_flagnum Long ll_0_price_cnt String ls_0_price_billcode String ls_0_price_msg IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork_not_affirm = 0 THEN ll_flagnum = 0 SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.affirmflag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单未确认操作失败,'+commit_transaction.SQLErrText GOTO ext END IF IF ll_flagnum > 0 THEN rslt = 0 arg_msg = '该月份存在未确认的单据('+String(ll_flagnum)+'),请先全部确认' GOTO ext END IF END IF ll_flagnum = 0 SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单要审核操作失败,'+commit_transaction.SQLErrText 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_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单已经审核操作失败,'+commit_transaction.SQLErrText GOTO ext END IF IF ll_flagnum > 0 THEN rslt = 0 arg_msg = '该月份的工资项目存在部分已审核的记录('+String(ll_flagnum)+'),请先撤审' GOTO ext END IF //检查0单价 DECLARE cur_0_price_wkp CURSOR FOR SELECT distinct u_scwg_taskwork_2.billcode FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) AND ( u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid ) AND ( u_scwg_taskwork_2_mx.price = 0 ) ORDER BY u_scwg_taskwork_2.billcode ASC USING commit_transaction; OPEN cur_0_price_wkp; FETCH cur_0_price_wkp INTO :ls_0_price_billcode; DO WHILE sqlca.SQLCode = 0 ll_0_price_cnt++ ls_0_price_msg = ls_0_price_msg + '单据:'+ls_0_price_billcode+',0单价 ~n' FETCH cur_0_price_wkp INTO :ls_0_price_billcode; LOOP CLOSE cur_0_price_wkp; IF ll_0_price_cnt > 0 THEN arg_msg = ls_0_price_msg rslt = 0 GOTO ext END IF DECLARE wgid CURSOR FOR SELECT distinct wrkgrpid FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) ORDER BY u_scwg_taskwork_2.wrkgrpid 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 u_workgroupmx.empid, u_workgroupmx.assigntype, u_workgroupmx.assignamt, u_rs_empinfo.empcode FROM u_workgroupmx,u_rs_empinfo WHERE u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i] AND u_workgroupmx.empid = u_rs_empinfo.empid ORDER BY u_workgroupmx.empid ASC USING commit_transaction; OPEN wg_emp; FETCH wg_emp INTO :ll_empid,:ll_assigntype,:ll_assignamt,:ls_empcode; DO WHILE commit_transaction.SQLCode = 0 ll_mxt++ ll_empid_arr[ll_mxt] = ll_empid ll_assigntype_arr[ll_mxt] = ll_assigntype ll_assignamt_arr[ll_mxt] = ll_assignamt ls_empcode_arr[ll_mxt] = ls_empcode ld_assignday_arr[ll_mxt] = 0 ld_assignscore_arr[ll_mxt] = 0 FETCH wg_emp INTO :ll_empid,:ll_assigntype,:ll_assignamt,:ls_empcode; LOOP CLOSE wg_emp; //计算各种分配模式的比例0:手动,1:固定比例,2:按天数,3:按天数+分数 Long ll_k Decimal temp_sumscore = 0,temp_empscore = 0 Decimal temp_sumdays = 0,temp_empdays = 0 FOR ll_k = 1 TO ll_mxt SELECT isnull(sum(U_TestMx_bd.bdday),0), isnull(sum(U_TestMx_bd.bdday * U_TestMx_bd.Score),0) INTO :temp_sumdays,:temp_sumscore FROM u_test_bd INNER JOIN U_TestMx_bd ON u_test_bd.TestID = U_TestMx_bd.TestID WHERE u_test_bd.flag = 1 AND u_test_bd.wagemth = :arg_wagemth AND U_TestMx_bd.empid IN ( SELECT empid FROM u_workgroupmx Where u_workgroupmx.workgroupid = :ll_wgid_arr[ll_i] )USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询小组的考核总(天数),总(分数*天数)失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF SELECT isnull(sum(U_TestMx_bd.bdday),0), isnull(sum(U_TestMx_bd.bdday * U_TestMx_bd.Score),0) INTO :temp_empdays,:temp_empscore FROM u_test_bd INNER JOIN U_TestMx_bd ON u_test_bd.TestID = U_TestMx_bd.TestID WHERE u_test_bd.flag = 1 AND u_test_bd.wagemth = :arg_wagemth AND U_TestMx_bd.empid = :ll_empid_arr[ll_k] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询员工:'+ls_empcode_arr[ll_k]+',的考核总(天数),总(分数*天数)失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF IF ll_assigntype_arr[ll_k] = 2 THEN IF temp_sumdays = 0 THEN rslt = 0 arg_msg = '工资月份['+String(arg_wagemth)+']有小组工资分配按天数计算比例进行分配,但没有对应该月份的绩效考核天数!请检查' GOTO ext ELSE ll_assignamt_arr[ll_k] = Round(temp_empdays/temp_sumdays,5) ld_assignday_arr[ll_k] = temp_empdays ld_assignscore_arr[ll_k] = temp_empscore END IF ELSEIF ll_assigntype_arr[ll_k] = 3 THEN IF temp_sumscore = 0 THEN rslt = 0 arg_msg = '工资月份['+String(arg_wagemth)+']有小组工资分配按天数+分数计算比例进行分配,但没有对应该月份的绩效考核天数!请检查' GOTO ext ELSE ll_assignamt_arr[ll_k] = Round(temp_empscore/temp_sumscore,5) ld_assignday_arr[ll_k] = temp_empdays ld_assignscore_arr[ll_k] = temp_empscore END IF END IF NEXT IF ll_mxt > 0 THEN //该组金额转移到组中第一人 INSERT INTO u_scwg_taskwork_money (wageid, workgroupid , empid , wagemth , groupamt, empamt, auditingflag, opdate, opemp, billtype, assigntype, assignamt, assignscore, assignday) SELECT wageid, wrkgrpid, :ll_empid_arr[1], wagemth, sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty), case :ll_assigntype_arr[1] when 0 then sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty) else (sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty))*(:ll_assignamt_arr[1]) END , 0, getdate(), :publ_operator, 2, :ll_assigntype_arr[1] , :ll_assignamt_arr[1], :ld_assignscore_arr[1] , :ld_assignday_arr[1] FROM u_scwg_taskwork_2_mx,u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.wrkgrpid = :ll_wgid_arr[ll_i] AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid GROUP BY u_scwg_taskwork_2.wageid, u_scwg_taskwork_2.wagemth, u_scwg_taskwork_2.wrkgrpid 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, billtype, assigntype, assignamt, assignscore, assignday) SELECT wageid, wrkgrpid, :ll_empid_arr[ll_j], wagemth, sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty), case :ll_assigntype_arr[ll_j] when 0 then 0 else (sum(u_scwg_taskwork_2_mx.price * u_scwg_taskwork_2_mx.qty))*(:ll_assignamt_arr[ll_j]) END, 0, getdate(), :publ_operator, 2, :ll_assigntype_arr[ll_j] , :ll_assignamt_arr[ll_j], :ld_assignscore_arr[ll_j] , :ld_assignday_arr[ll_j] FROM u_scwg_taskwork_2_mx,u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.wrkgrpid = :ll_wgid_arr[ll_i] AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid GROUP BY u_scwg_taskwork_2.wageid, u_scwg_taskwork_2.wagemth, u_scwg_taskwork_2.wrkgrpid 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 IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate() WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate(), u_scwg_taskwork_2.affirmemp = :publ_operator, u_scwg_taskwork_2.affirmdate = getdate() WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF 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_0 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flagnum DateTime ls_null SetNull(ls_null) IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 0 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已有单据已审核操作失败,'+commit_transaction.SQLErrText 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 AND u_scwg_taskwork_money.billtype = 0 AND ( u_scwg_taskwork_money.workgroupid = :arg_wrkgrpid OR :arg_wrkgrpid = -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 AND u_scwg_taskwork_money.billtype = 0 AND ( u_scwg_taskwork_money.workgroupid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除工资表操作失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF //更新审核标志 IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.billtype = 0 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) AND u_scwg_taskwork_2.flag = 1 USING commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null, u_scwg_taskwork_2.affirmemp = '', u_scwg_taskwork_2.affirmdate = :ls_null, u_scwg_taskwork_2.affirmflag = 0 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.billtype = 0 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) AND u_scwg_taskwork_2.flag = 1 USING commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF 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_2 (long arg_wageid, long arg_wagemth, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flagnum DateTime ls_null SetNull(ls_null) IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已有单据已审核操作失败,'+commit_transaction.SQLErrText 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 AND u_scwg_taskwork_money.billtype = 2 AND ( u_scwg_taskwork_money.workgroupid = :arg_wrkgrpid OR :arg_wrkgrpid = -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 AND u_scwg_taskwork_money.billtype = 2 AND ( u_scwg_taskwork_money.workgroupid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除工资表操作失败,原因:'+commit_transaction.SQLErrText GOTO ext END IF //更新审核标志 IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) AND u_scwg_taskwork_2.flag = 1 USING commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null, u_scwg_taskwork_2.affirmemp = '', u_scwg_taskwork_2.affirmdate = :ls_null, u_scwg_taskwork_2.affirmflag = 0 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.billtype = 2 AND ( u_scwg_taskwork_2.wrkgrpid = :arg_wrkgrpid OR :arg_wrkgrpid = -1 ) AND u_scwg_taskwork_2.flag = 1 USING commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF 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 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 affirmflag = 1 THEN rslt = 0 arg_msg = '单据已经确认,不可以修改' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK ; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT ; END IF Return (rslt) end function public function decimal uo_wage_fp_formula (string arg_formula, decimal arg_amt, decimal arg_assignamt, decimal arg_assignamt_sm, decimal arg_assignscore, decimal arg_assignscore_sm, decimal arg_assignday, decimal arg_assignday_sm);Decimal ld_rst_amt String ls_formula ls_formula = arg_formula datastore ds_formula ds_formula = Create datastore ds_formula.DataObject = 'ds_scwg_taskwork_day_formula' ds_formula.InsertRow(0) DO WHILE Pos(ls_formula,'[组工资]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[组工资]'),Len('[组工资]'),String(arg_amt)) LOOP DO WHILE Pos(ls_formula,'[分配比例]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[分配比例]'),Len('[分配比例]'),String(arg_assignamt)) LOOP DO WHILE Pos(ls_formula,'[比例总和]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[比例总和]'),Len('[比例总和]'),String(arg_assignamt_sm)) LOOP DO WHILE Pos(ls_formula,'[分数]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[分数]'),Len('[分数]'),String(arg_assignscore)) LOOP DO WHILE Pos(ls_formula,'[分数总和]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[分数总和]'),Len('[分数总和]'),String(arg_assignscore_sm)) LOOP DO WHILE Pos(ls_formula,'[考勤天数]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[考勤天数]'),Len('[考勤天数]'),String(arg_assignday)) LOOP DO WHILE Pos(ls_formula,'[天数总和]') > 0 ls_formula = Replace(ls_formula,Pos(ls_formula,'[天数总和]'),Len('[天数总和]'),String(arg_assignday_sm)) LOOP ds_formula.Modify("compute.expression='"+ls_formula+"'") ld_rst_amt = Round(Dec(ds_formula.Object.compute[1]),2) if isnull(ld_rst_amt) then ld_rst_amt = 0 RETURN ld_rst_amt end function public function integer acceptmx (long arg_mtrlid, string arg_procode, string arg_proname, decimal arg_qty, decimal arg_price, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, string arg_woodcode, string arg_pcode, string arg_ycreason, long arg_orderid, string arg_reason, string arg_unit, decimal arg_failqty, decimal arg_facthours, string arg_wpcode); Int rslt = 1 Long cnt = 0,ls_i,ll_i String ls_ordercode IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_taskwork_acmpqty = -1000 THEN arg_msg = '选项:[202]计件单选生产计划时按已进仓数限制,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork_price_if_mod = -1000 THEN arg_msg = '选项:[081]计件单限制工价,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork_procode_order = -1000 THEN arg_msg = '选项:[064]计件单按生产计划工序,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork2_noorder = -1000 THEN arg_msg = '选项:[104]月分配计件单可以不选计划,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork_person_noorder = -1000 THEN arg_msg = '选项:[106]个人产品计件单可以不选计划,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_procode) THEN arg_procode = '' IF IsNull(arg_proname) THEN arg_proname = '' IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_price) THEN arg_price = 0 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_ycreason) THEN arg_ycreason = '' IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_reason) THEN arg_reason = '' IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_failqty) THEN arg_failqty = 0 IF IsNull(arg_facthours) THEN arg_facthours = 0 if isnull(arg_wpcode) then arg_wpcode = '' IF billtype = 0 OR billtype = 1 THEN IF Trim(arg_procode) = '' THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序编号不能为空!' GOTO ext END IF IF Trim(arg_proname) = '' THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序名称不能为空' GOTO ext END IF END IF IF arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF billtype = 0 AND uo_option_taskwork2_noorder = 0 AND arg_orderid = 0 THEN rslt = 0 arg_msg = '请选择生产计划,第'+String(arg_printid)+'行' GOTO ext ELSEIF billtype = 1 AND uo_option_taskwork_person_noorder = 0 AND arg_orderid = 0 THEN rslt = 0 arg_msg = '请选择生产计划,第'+String(arg_printid)+'行' GOTO ext END IF IF arg_orderid > 0 THEN Decimal ld_orderqty,ld_acmpqty,ld_trueqty SELECT ordercode,orderqty,acmpqty INTO :ls_ordercode,:ld_orderqty,:ld_acmpqty FROM u_order_ml WHERE scid = :scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询生产计划号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_if_taskwork_acmpqty = 1 THEN ld_trueqty = ld_acmpqty ELSE ld_trueqty = ld_orderqty END IF Decimal ld_othertask_qty Decimal ld_Otherbill_qty,ld_Otherbill_qty_2 Decimal ld_workqty Decimal ld_mx_qty Decimal ld_finish_qty,ld_collect_qty Long l IF uo_option_taskwork_procode_order = 1 THEN SELECT (proqty / :ld_orderqty) * :ld_trueqty INTO :ld_workqty FROM U_OrderRqwp WHERE scid = :scid AND orderid = :arg_orderid AND procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询计划:'+ls_ordercode+',工序:'+arg_procode+',计划数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE //查询产品是否组合配置 Long ll_statusflag Decimal ld_pzqty Boolean lb_iffind = FALSE String ls_pz_status s_mtrlcfg_expr s_pz[] SELECT statusflag INTO :ll_statusflag FROM u_mtrldef Where mtrlid = :arg_mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品是否使用组合配置失败'+sqlca.SQLErrText GOTO ext END IF SELECT status INTO :ls_pz_status FROM u_sc_workprice WHERE mtrlid = :arg_mtrlid AND procode = :arg_procode and wpcode = :arg_wpcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询产品工序配置失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_statusflag = 2 AND ls_pz_status <> '' THEN f_checkpz(arg_status,s_pz[]) lb_iffind = FALSE FOR ll_i = 1 TO UpperBound(s_pz) IF s_pz[ll_i].cfgname = ls_pz_status THEN ld_pzqty = Dec(s_pz[ll_i].qty) lb_iffind = TRUE EXIT END IF NEXT IF lb_iffind = FALSE THEN ld_pzqty = 1 END IF ELSE ld_pzqty = 1 END IF SELECT workqty * :ld_trueqty * :ld_pzqty INTO :ld_workqty FROM u_sc_workprice WHERE mtrlid = :arg_mtrlid AND procode = :arg_procode and wpcode = :arg_wpcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询单件产品工序数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT isnull(sum(finishqty),0) INTO :ld_finish_qty FROM U_OrderRqwp WHERE orderid = :arg_orderid AND scid = :scid AND procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询指令单号:'+ls_ordercode+',工序:'+arg_procode+'已确认数失败,orderid:'+string(arg_orderid)+',scid:'+string(scid)+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(qty),0) INTO :ld_othertask_qty FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid AND u_scwg_taskwork_2_mx.mtrlid = :arg_mtrlid AND u_scwg_taskwork_2_mx.orderid = :arg_orderid AND u_scwg_taskwork_2_mx.procode = :arg_procode AND u_scwg_taskwork_2_mx.billid <> :billid And (u_scwg_taskwork_2.affirmflag = 0 OR :uo_option_taskwork_not_affirm = 1 ); IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询指令单号:'+ls_ordercode+',工序:'+arg_procode+'其它已开单未确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(qty),0) INTO :ld_Otherbill_qty FROM u_scwg_taskwork_day,u_scwg_taskwork_day_mx WHERE u_scwg_taskwork_day_mx.billid = u_scwg_taskwork_day.billid AND u_scwg_taskwork_day_mx.mtrlid = :arg_mtrlid AND u_scwg_taskwork_day_mx.orderid = :arg_orderid AND u_scwg_taskwork_day_mx.procode = :arg_procode AND u_scwg_taskwork_day.scid = :scid And ( u_scwg_taskwork_day.affirmflag = 0 OR :uo_option_taskwork_not_affirm = 1 ); IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询指令单号:'+ls_ordercode+',工序:'+arg_procode+'工作组产品日分配计件单开单未确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(Amount),0) INTO :ld_Otherbill_qty_2 FROM u_sc_taskwork,u_sc_taskworkmx WHERE u_sc_taskworkmx.scid = u_sc_taskwork.scid AND u_sc_taskworkmx.billid = u_sc_taskwork.billid AND u_sc_taskwork.mtrlid = :arg_mtrlid AND u_sc_taskwork.orderid = :arg_orderid AND u_sc_taskworkmx.procode = :arg_procode AND u_sc_taskwork.scid = :scid And (u_sc_taskwork.affirmflag = 0 OR :uo_option_taskwork_not_affirm = 1 ); IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询指令单号:'+ls_ordercode+',工序:'+arg_procode+'产品个人计件单开单未确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(u_data_wage.zx_qty),0) INTO :ld_collect_qty FROM u_data_collect INNER JOIN u_data_wage ON u_data_collect.collectid = u_data_wage.collectid WHERE u_data_collect.scid = :scid and u_data_collect.orderid = :arg_orderid and u_data_wage.procode = :arg_procode; IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+arg_procode+'注塑质检单杂项数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR l = 1 TO it_mxbt IF taskworkmx[l].procode = arg_procode AND & taskworkmx[l].orderid = arg_orderid THEN ld_mx_qty = ld_mx_qty + taskworkmx[l].qty END IF NEXT IF uo_option_taskwork_not_affirm = 1 THEN ld_finish_qty = 0 END IF IF arg_qty + ld_finish_qty + ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2 + ld_mx_qty + ld_collect_qty > ld_workqty THEN rslt = 0 IF uo_option_if_taskwork_acmpqty = 0 THEN arg_msg = '第 '+String(arg_printid)+' 行,指令单号:'+ls_ordercode+',工序:'+arg_procode+',计件数量不能大于计划生产数,计划工序数:'+String(ld_workqty,'####0.####')+',已完成数:'+String(ld_finish_qty,'####0.####')+',本单已开单:'+String(ld_mx_qty,'####0.####')+',其它单已开单:'+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2 + ld_collect_qty,'####0.####')+',不能开单:'+String(arg_qty,'####0.####') ELSE arg_msg = '第 '+String(arg_printid)+' 行,指令单号:'+ls_ordercode+',工序:'+arg_procode+',计件数量不能大于计划已进仓数,已进仓工序数:'+String(ld_workqty,'####0.####')+',已完成数:'+String(ld_finish_qty,'####0.####')+',本单已开单:'+String(ld_mx_qty,'####0.####')+',其它单已开单:'+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2 + ld_collect_qty,'####0.####')+',不能开单:'+String(arg_qty,'####0.####') END IF GOTO ext END IF END IF IF billtype = 0 OR billtype = 1 THEN Decimal ld_workprice //检查限价 IF uo_option_taskwork_price_if_mod = 1 THEN //启用检查限价选项 IF uo_option_taskwork_procode_order = 0 OR arg_orderid = 0 THEN //按工价表限价 SELECT workPrice INTO :ld_workprice FROM u_sc_workprice WHERE mtrlid = :arg_mtrlid AND procode = :arg_procode and wpcode = :arg_wpcode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_price THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序:'+arg_procode+' 工价表工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_price,'#,##0.00########') GOTO ext END IF ELSE SELECT workprice INTO :ld_workprice FROM u_sc_workprocedure WHERE code = :arg_procode AND ifpubl = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF ld_workprice <> arg_price THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_price,'#,##0.00########') GOTO ext END IF END IF ELSE //按生产计划工序明细限价 SELECT workPrice INTO :ld_workprice FROM U_OrderRqwp WHERE scid = :scid AND orderid = :arg_orderid AND procode = :arg_procode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_price THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序:'+arg_procode+' 生产计划工序明细工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_price,'#,##0.00########') GOTO ext END IF ELSE SELECT workprice INTO :ld_workprice FROM u_sc_workprocedure WHERE code = :arg_procode AND ifpubl = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF ld_workprice <> arg_price THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_price,'#,##0.00########') GOTO ext END IF END IF END IF END IF END IF //写入内容 it_mxbt++ taskworkmx[it_mxbt].mtrlid = arg_mtrlid taskworkmx[it_mxbt].procode = arg_procode taskworkmx[it_mxbt].proname = arg_proname taskworkmx[it_mxbt].qty = arg_qty taskworkmx[it_mxbt].price = arg_price taskworkmx[it_mxbt].mxdscrp = arg_mxdscrp taskworkmx[it_mxbt].printid = arg_printid taskworkmx[it_mxbt].status = arg_status taskworkmx[it_mxbt].woodcode = arg_woodcode taskworkmx[it_mxbt].pcode = arg_pcode taskworkmx[it_mxbt].ycreason = arg_ycreason taskworkmx[it_mxbt].orderid = arg_orderid taskworkmx[it_mxbt].ordercode = ls_ordercode taskworkmx[it_mxbt].reason = arg_reason taskworkmx[it_mxbt].unit = arg_unit taskworkmx[it_mxbt].failqty = arg_failqty taskworkmx[it_mxbt].facthours = arg_facthours taskworkmx[it_mxbt].wpcode = arg_wpcode ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer auditing_1 (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);//arg_wrkgrpid : -1 全部工作组 Long cnt,i Int rslt = 1 Decimal ls_emp_sumwage datastore ds_emp_sumwage uo_wage u_wage u_wage = Create uo_wage IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_check_noworkprice = -1000 THEN arg_msg = '选项:[240]计件单没有工价不能审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskwork_not_affirm = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth and (u_scwg_taskwork_2.scid = :arg_scid or :arg_scid = -1) AND u_scwg_taskwork_2.affirmflag = 0 AND u_scwg_taskwork_2.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单未确认操作失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '该月份存在未确认的单据('+String(cnt)+'),请先全部确认' GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth and (u_scwg_taskwork_2.scid = :arg_scid or :arg_scid = -1) AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单要审核操作失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '该月份不存在要审核的单据,请检查' GOTO ext END IF //SELECT count(*) // INTO :cnt // FROM u_scwg_taskwork_2 // WHERE u_scwg_taskwork_2.wageid = :arg_wageid // AND u_scwg_taskwork_2.wagemth = :arg_wagemth // AND u_scwg_taskwork_2.flag = 1 // AND u_scwg_taskwork_2.billtype = 1 // USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询是否有单已经审核操作失败,'+commit_transaction.SQLErrText // GOTO ext //END IF // //IF cnt > 0 THEN // rslt = 0 // arg_msg = '该月份的工资项目存在部分已审核的记录,请先撤审' // GOTO ext //END IF ds_emp_sumwage = Create datastore ds_emp_sumwage.DataObject = 'dw_emp_sumwage_12' ds_emp_sumwage.SetTransObject(sqlca) IF ds_emp_sumwage.Retrieve(arg_scid,arg_wagemth,arg_wageid,0) <= 0 THEN rslt = 0 arg_msg = '本月没有单据可审核或查询单据失败' GOTO ext END IF FOR i = 1 To ds_emp_sumwage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = ds_emp_sumwage.Object.sumwage[i] IF uo_option_check_noworkprice = 1 And ls_emp_sumwage = 0 THEN rslt = 0 arg_msg = '行'+String(i)+',没有填写工价,不允许审核' GOTO ext END IF IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumwage.Object.u_scwg_taskwork_2_empid[i],arg_wageid,ls_emp_sumwage,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate() WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth and (u_scwg_taskwork_2.scid = :arg_scid or :arg_scid = -1) AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 1 Using commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 1, u_scwg_taskwork_2.auditingrep = :publ_operator, u_scwg_taskwork_2.auditingdate = getdate(), u_scwg_taskwork_2.affirmdate = getdate(), u_scwg_taskwork_2.affirmemp = :publ_operator, u_scwg_taskwork_2.affirmflag = 1 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth and (u_scwg_taskwork_2.scid = :arg_scid or :arg_scid = -1) AND u_scwg_taskwork_2.flag = 0 AND u_scwg_taskwork_2.billtype = 1 Using commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy u_wage RETURN rslt end function public function integer c_auditing_1 (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flagnum,i Decimal ls_emp_sumwage DateTime ls_null SetNull(ls_null) IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF f_check_wage_audit(arg_wagemth,arg_scid,arg_msg) = 0 THEN rslt = 0 arg_msg = arg_msg + ',不能撤审' GOTO ext END IF Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_wage_change WHERE wagemth = :arg_wagemth And wageid = :arg_wageid; 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 uo_wage u_wage u_wage = Create uo_wage SELECT count(*) INTO :ll_flagnum FROM u_scwg_taskwork_2 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND u_scwg_taskwork_2.flag = 1 AND u_scwg_taskwork_2.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已有单据已审核操作失败,'+commit_transaction.SQLErrText GOTO ext END IF IF ll_flagnum <= 0 THEN rslt = 0 arg_msg = '该月份的工资项目不存在审核的记录' GOTO ext END IF //IF u_wage.f_wage_clear(arg_wageid,arg_wagemth,arg_msg,FALSE) = 0 THEN // rslt = 0 // GOTO ext //END IF datastore ds_emp_sumwage ds_emp_sumwage = Create datastore ds_emp_sumwage.DataObject = 'dw_emp_sumwage_12' ds_emp_sumwage.SetTransObject(sqlca) IF ds_emp_sumwage.Retrieve(arg_scid,arg_wagemth,arg_wageid,1) <= 0 THEN rslt = 0 arg_msg = '本月没有单据已审核或查询单据失败' GOTO ext END IF FOR i = 1 To ds_emp_sumwage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = 0 - ds_emp_sumwage.Object.sumwage[i] IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumwage.Object.u_scwg_taskwork_2_empid[i],arg_wageid,ls_emp_sumwage,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT //更新审核标志 IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND (u_scwg_taskwork_2.scid = :arg_scid OR :arg_scid = -1) AND u_scwg_taskwork_2.billtype = 1 And u_scwg_taskwork_2.flag = 1 Using commit_transaction; ELSE UPDATE u_scwg_taskwork_2 SET u_scwg_taskwork_2.flag = 0, u_scwg_taskwork_2.Auditingrep = '', u_scwg_taskwork_2.Auditingdate = :ls_null, u_scwg_taskwork_2.affirmemp = '', u_scwg_taskwork_2.affirmdate = :ls_null, u_scwg_taskwork_2.affirmflag = 0 WHERE u_scwg_taskwork_2.wageid = :arg_wageid AND u_scwg_taskwork_2.wagemth = :arg_wagemth AND (u_scwg_taskwork_2.scid = :arg_scid OR :arg_scid = -1) AND u_scwg_taskwork_2.billtype = 1 And u_scwg_taskwork_2.flag = 1 Using commit_transaction; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy u_wage RETURN rslt end function on uo_scwg_taskwork_2.create call super::create TriggerEvent( this, "constructor" ) end on on uo_scwg_taskwork_2.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('080',str_optionvalue,arg_msg) uo_option_taskwork_not_affirm = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('104',str_optionvalue,arg_msg) uo_option_taskwork2_noorder = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('106',str_optionvalue,arg_msg) uo_option_taskwork_person_noorder = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('064',str_optionvalue,arg_msg) uo_option_taskwork_procode_order = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('081',str_optionvalue,arg_msg) uo_option_taskwork_price_if_mod = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('202',str_optionvalue,arg_msg) uo_option_if_taskwork_acmpqty = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('240',str_optionvalue,arg_msg) uo_option_check_noworkprice = Long(str_optionvalue) end event