$PBExportHeader$uo_taskwork.sru forward global type uo_taskwork from nonvisualobject end type type s_taskworkmx from structure within uo_taskwork end type end forward type s_taskworkmx from structure long empid string procode string proname string empcode string empname decimal { 10 } amount decimal { 10 } workprice decimal { 5 } workhour string mxdscrp long printid string status long proorder string appendname decimal { 5 } appendprice string wpcode end type global type uo_taskwork from nonvisualobject end type global uo_taskwork uo_taskwork type variables Public ProtectedWrite Long scid //分部 Public ProtectedWrite Long billid //计件单自动增量id //工资月份 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 DateTime affirmdate //确认时间 Public ProtectedWrite String affirmemp //确认人 Public ProtectedWrite Int affirmflag //确认标志 Long wagemth Long orderid //订单号 DateTime billdate //计件日期 Long wrkgrpid //工组id String wrkgrpname = '' //工组 Long wageid //工资项目id Long mtrlid // 产品id Decimal qty //数量 String dscrp = '' //备注 String relcode = '' //相关号码  Long relid = 0 String status String woodcode String pcode long wkpid uo_wage u_wage Boolean if_getid_ture = True Private: s_taskworkmx taskworkmx[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = False //新建标志 Boolean it_updatebegin = False //修改标志 Int uo_option_taskwork_not_affirm Int uo_option_task_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 save (ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_empid, string arg_empcode, string arg_empname, string arg_procode, string arg_proname, decimal arg_amount, decimal arg_workprice, decimal arg_workhour, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, long arg_proorder, string arg_appendname, decimal arg_appendprice, string arg_wpcode) public function integer auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (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 orderid=0 wrkgrpid=0 wrkgrpname='' wageid=0 mtrlid=0 qty=0 dscrp='' relcode='' status = '' woodcode = '' pcode = '' wkpid = 0 it_newbegin=FALSE it_updatebegin=FALSE //清除明细 P_CLEARMX() RETURN 1 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(orderid) THEN orderid = 0 IF IsNull(wrkgrpid) THEN wrkgrpid = 0 IF IsNull(wrkgrpname) THEN wrkgrpname = '' IF IsNull(wageid) THEN wageid = 0 IF IsNull(mtrlid) THEN mtrlid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(wagemth) THEN wagemth = 0 if isnull(relid) then relid = 0 if isnull(status) then status = '' if isnull(woodcode) then woodcode = '' if isnull(pcode) then pcode = '' if isnull(wkpid) then wkpid = 0 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF uo_option_task_noorder = -1000 THEN arg_msg = '选项:[018]产品个人计件单可不选生产计划,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF mtrlid <= 0 THEN rslt = 0 arg_msg = '请先选择产品' GOTO ext END IF if wagemth = 0 then rslt = 0 arg_msg = '请输入工资月份' GOTO ext END IF IF it_mxbt = 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 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工资项目失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在工资项目!" GOTO ext END IF IF uo_option_task_noorder = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml WHERE orderid = :orderid AND mtrlid = :mtrlid AND scid = :scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询生产计划失败!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "不存在生产计划!" GOTO ext END IF END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_sc_taskwork","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,"JJ",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取计件单编号" GOTO ext END IF INSERT INTO u_sc_taskwork ( scid, billid, billcode, Wagemth, orderid, wrkGrpid, WrkGrpname, wageid, billdate, Dscrp, opdate, opemp, mtrlid, relcode, relid, status, woodcode, pcode, wkpid) VALUES ( :scid, :ls_newid, :billcode, :Wagemth, :orderid, :wrkGrpid, :WrkGrpname, :wageid, :billdate, :dscrp, :server_dt, :publ_operator, :mtrlid, :relcode, :relid, :status, :woodcode, :pcode, :wkpid); IF sqlca.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_sc_taskworkmx ( scid, billid, empid, empcode, empname, procode, proname, amount, workprice, workhour, mxdscrp, printid, status, proorder, appendname, appendprice, wpcode) VALUES ( :scid, :ls_newid, :taskworkmx[i].empid, :taskworkmx[i].empcode, :taskworkmx[i].empname, :taskworkmx[i].procode, :taskworkmx[i].proname, :taskworkmx[i].amount, :taskworkmx[i].workprice, :taskworkmx[i].workhour, :taskworkmx[i].mxdscrp, :taskworkmx[i].printid, :taskworkmx[i].status, :taskworkmx[i].proorder, :taskworkmx[i].appendname, :taskworkmx[i].appendprice, :taskworkmx[i].wpcode); IF sqlca.SQLCode <> 0 THEN billid = 0 //还原noticeid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK ; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_sc_taskwork SET orderid = :orderid, Mtrlid = :Mtrlid, wrkGrpid = :wrkGrpid, WrkGrpname = :WrkGrpname, wageid = :wageid, billdate = :billdate, Dscrp = :Dscrp, moddate = :server_dt, modemp = :publ_operator, relcode = :relcode, wagemth = :wagemth, relid = :relid, status = :status, woodcode = :woodcode, pcode = :pcode, wkpid = :wkpid WHERE u_sc_taskwork.billid = :billid AND u_sc_taskwork.scid = :scid AND Auditingflag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_sc_taskworkmx Where u_sc_taskworkmx.billid = :billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_sc_taskworkmx (scid, billid, empid, empcode, empname, procode, proname, amount, workprice, workhour, mxdscrp, printid, status, proorder, appendname, appendprice, wpcode) VALUES ( :scid, :billid, :taskworkmx[i].empid, :taskworkmx[i].empcode, :taskworkmx[i].empname, :taskworkmx[i].procode, :taskworkmx[i].proname, :taskworkmx[i].amount, :taskworkmx[i].workprice, :taskworkmx[i].workhour, :taskworkmx[i].mxdscrp, :taskworkmx[i].printid, :taskworkmx[i].status, :taskworkmx[i].proorder, :taskworkmx[i].appendname, :taskworkmx[i].appendprice, :taskworkmx[i].wpcode); IF sqlca.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 add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//==================================================================== // 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 select u_sc_taskwork.auditingflag into :flag from u_sc_taskwork where u_sc_taskwork.billid = :arg_billid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '查询计件单操作失败' goto ext end if if flag = 0 then rslt = 0 arg_msg = "非审核状态下不可用" goto ext end if update u_sc_taskwork set dscrp = dscrp+' '+:arg_newdescppart where u_sc_taskwork.billid = :billid; if sqlca.sqlcode <> 0 then rollback ; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.sqlerrtext goto ext end if commit; dscrp = dscrp+' '+arg_newdescppart ext: 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 p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法的单据唯一码" GOTO ext END IF SELECT billcode, Wagemth, orderid, wrkGrpid, WrkGrpname, wageid, billdate, Dscrp, mtrlid, relcode, AuditingFlag, affirmflag, status, woodcode, pcode, wkpid INTO :billcode, :Wagemth, :orderid, :wrkGrpid, :WrkGrpname, :wageid, :billdate, :Dscrp, :mtrlid, :relcode, :flag, :affirmflag, :status, :woodcode, :pcode, :wkpid FROM u_sc_taskwork Where billid = :arg_billid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码),单据"+sqlca.SQLErrText GOTO ext END IF billid = arg_billid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_scid, long arg_billid, ref 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_scid,arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext DECLARE cur_mx CURSOR FOR SELECT Empid, Procode, Proname, Empcode, Empname, Amount, Workprice, Workhour, MXDscrp, printid,status,proorder,appendname,appendprice,wpcode FROM u_sc_taskworkmx Where billid = :arg_billid; OPEN cur_mx; FETCH cur_mx INTO :taskworkmx[i].empid,:taskworkmx[i].procode,:taskworkmx[i].proname, :taskworkmx[i].empcode,:taskworkmx[i].empname,:taskworkmx[i].amount,:taskworkmx[i].workprice, :taskworkmx[i].Workhour,:taskworkmx[i].MXDscrp,:taskworkmx[i].printid,:taskworkmx[i].status,:taskworkmx[i].proorder, :taskworkmx[i].appendname,:taskworkmx[i].appendprice,:taskworkmx[i].wpcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :taskworkmx[i].empid,:taskworkmx[i].procode,:taskworkmx[i].proname, :taskworkmx[i].empcode,:taskworkmx[i].empname,:taskworkmx[i].amount,:taskworkmx[i].workprice, :taskworkmx[i].Workhour,:taskworkmx[i].MXDscrp,:taskworkmx[i].printid,:taskworkmx[i].status,:taskworkmx[i].proorder, :taskworkmx[i].appendname,:taskworkmx[i].appendprice,:taskworkmx[i].wpcode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_sc_taskworkmx WHERE u_sc_taskworkmx.billid = :arg_billid; IF sqlca.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 affirm (long arg_scid, 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_scid,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_sc_taskwork SET affirmemp = :publ_operator, affirmdate = getdate(), affirmflag = 1 WHERE u_sc_taskwork.billid = :arg_billid AND affirmflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF orderid > 0 THEN FOR i = 1 TO it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,& taskworkmx[i].procode,billdate,taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN arg_msg = '第'+string(i)+'行,'+arg_msg rslt = 0 GOTO ext END IF NEXT END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_ml RETURN rslt end function public function integer c_affirm (long arg_scid, 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_scid,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_sc_taskwork SET affirmemp = '', affirmdate = :null_dt, affirmflag = 0 WHERE u_sc_taskwork.billid = :arg_billid AND u_sc_taskwork.scid = :arg_scid AND affirmflag = 1 AND AuditingFlag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在反确认,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF orderid > 0 THEN FOR i = 1 TO it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,& taskworkmx[i].procode,billdate,0 - taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF ext: IF rslt = 0 THEN ROLLBACK ; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT ; END IF DESTROY uo_ml RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: updatebegin(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt = 1 if arg_billid <= 0 then billid = 0 goto ext end if if p_getinfo(arg_scid,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 auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0,i Int rslt = 1 Decimal ls_emp_sumwage 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_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF wagemth = 0 THEN rslt = 0 arg_msg = '请输入工资月份' 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 cnt = 0 SELECT count(*) INTO :cnt From u_gz_wageitem Where useflag = 1 And wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = taskworkmx[i].amount * taskworkmx[i].workprice IF uo_option_check_noworkprice = 1 THEN IF taskworkmx[i].workprice = 0 THEN rslt = 0 arg_msg = '行'+String(i)+',没有填写工价,不允许审核' GOTO ext END IF END IF IF u_wage.f_setwagemxdata(wagemth,taskworkmx[i].empid,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_sc_taskwork SET Auditingflag = 1, Auditingrep = :publ_operator, Auditingdate = getdate() WHERE Auditingflag = 0 AND billid = :arg_billid And scid = :arg_scid; ELSE UPDATE u_sc_taskwork SET Auditingflag = 1, Auditingrep = :publ_operator, Auditingdate = getdate(), affirmdate = getdate(), affirmemp = :publ_operator, affirmflag = 1 WHERE Auditingflag = 0 AND billid = :arg_billid And scid = :arg_scid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新计件明细单失败,原因>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0,i Int rslt = 1 DateTime null_server_dt Decimal ls_emp_sumwage SetNull(null_server_dt) IF uo_option_taskwork_not_affirm = -1000 THEN arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF getinfo(arg_scid,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,arg_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 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where useflag = 1 AND wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败,原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目,原因>>'+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = taskworkmx[i].amount * taskworkmx[i].workprice IF u_wage.f_setwagemxdata(wagemth,taskworkmx[i].empid,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_sc_taskwork SET Auditingflag = 0, Auditingrep = '', Auditingdate = :null_server_dt WHERE Auditingflag = 1 AND scid = :arg_scid AND billid = :arg_billid; ELSE UPDATE u_sc_taskwork SET Auditingflag = 0, Auditingrep = '', Auditingdate = :null_server_dt, affirmdate = :null_server_dt, affirmemp = '', affirmflag = 0 WHERE Auditingflag = 1 AND scid = :arg_scid AND billid = :arg_billid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新计件明细单失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: del(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF IF p_getinfo(arg_scid,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 DELETE FROM u_sc_taskwork WHERE u_sc_taskwork.billid = :arg_billid AND u_sc_taskwork.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计件单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_sc_taskworkmx WHERE u_sc_taskworkmx.billid = :arg_billid AND u_sc_taskworkmx.scid = :arg_scid; IF sqlca.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 integer acceptmx (long arg_empid, string arg_empcode, string arg_empname, string arg_procode, string arg_proname, decimal arg_amount, decimal arg_workprice, decimal arg_workhour, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, long arg_proorder, string arg_appendname, decimal arg_appendprice, string arg_wpcode); Long rslt = 1,cnt = 0,ls_i,ll_i String ls_empname,ls_empcode Decimal ls_workqty,ld_othertask_qty Decimal ld_Otherbill_qty,ld_Otherbill_qty_2 Decimal ld_finish_qty,ld_collect_qty 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_taskwork_procode_order = -1000 THEN arg_msg = '选项:[064]计件单按生产计划工序,读取初始默认值失败,操作取消!' 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_if_taskwork_acmpqty = -1000 THEN arg_msg = '选项:[202]计件单选生产计划时按已进仓数限制,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF IsNull(arg_empid) THEN arg_empid = 0 IF IsNull(arg_empcode) THEN arg_empcode = '' IF IsNull(arg_empname) THEN arg_empname = '' IF IsNull(arg_procode) THEN arg_procode = '' IF IsNull(arg_proname) THEN arg_proname = '' IF IsNull(arg_amount) THEN arg_amount = 0 IF IsNull(arg_workprice) THEN arg_workprice = 0 IF IsNull(arg_workhour) THEN arg_workhour = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_appendname) THEN arg_appendname = '' IF IsNull(arg_appendprice) THEN arg_appendprice = 0 IF arg_amount = 0 THEN rslt = 1 GOTO ext END IF IF IsNull(arg_empcode) Or Trim(arg_empcode) = '' 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 IF arg_amount < 0 Or arg_workhour < 0 THEN //检查生产数量 rslt = 0 arg_msg = '行:'+String(arg_printid)+",数量或工时错误" GOTO ext END IF SELECT empcode,empname INTO :ls_empcode,:ls_empname FROM u_rs_empinfo Where empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',查询员工资料失败。>'+sqlca.SQLErrText GOTO ext END IF IF ls_empname <> arg_empname Or ls_empcode <> arg_empcode THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+','+arg_empname+'>>该员工的编号或名称不正确。' GOTO ext END IF IF arg_appendprice <> 0 And arg_appendname = '' THEN rslt = 0 arg_msg = '第'+String(arg_printid)+'行,请输入附加工序内容' GOTO ext END IF Decimal ld_orderqty,ld_acmpqty,ld_trueqty IF orderid > 0 THEN SELECT orderqty,acmpqty INTO :ld_orderqty,:ld_acmpqty FROM u_order_ml WHERE orderid = :orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划相关数量失败,'+sqlca.SQLErrText GOTO ext END IF IF uo_option_if_taskwork_acmpqty = 1 THEN ld_trueqty = ld_acmpqty ELSE ld_trueqty = ld_orderqty END IF IF uo_option_taskwork_procode_order = 1 THEN SELECT (proqty / :ld_orderqty) * :ld_trueqty INTO :ls_workqty FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid And procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+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 = :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 = :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(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 :ls_workqty FROM u_sc_workprice WHERE mtrlid = :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 = :orderid AND scid = :scid And procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+arg_procode+'已确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(Amount),0) INTO :ld_othertask_qty FROM u_sc_taskworkmx,u_sc_taskwork WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid AND u_sc_taskworkmx.scid = u_sc_taskwork.scid AND u_sc_taskwork.mtrlid = :mtrlid AND u_sc_taskwork.orderid = :orderid AND u_sc_taskworkmx.procode = :arg_procode AND u_sc_taskwork.billid <> :billid And (u_sc_taskwork.affirmflag = 0 Or :uo_option_taskwork_not_affirm = 1 ); IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+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 = :mtrlid AND u_scwg_taskwork_day_mx.orderid = :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)+',查询工序:'+arg_procode+'工作组产品日分配计件单开单未确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(qty),0) INTO :ld_Otherbill_qty_2 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 = :mtrlid AND u_scwg_taskwork_2_mx.orderid = :orderid AND u_scwg_taskwork_2_mx.procode = :arg_procode AND u_scwg_taskwork_2.scid = :scid And (u_scwg_taskwork_2.affirmflag = 0 Or :uo_option_taskwork_not_affirm = 1 ); IF sqlca.SQLCode = -1 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+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 = :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 Decimal ld_mx_qty = 0 Long l FOR l = 1 To it_mxbt IF taskworkmx[l].procode = arg_procode THEN ld_mx_qty = ld_mx_qty + taskworkmx[l].Amount END IF NEXT IF uo_option_taskwork_not_affirm = 1 THEN ld_finish_qty = 0 END IF IF arg_amount + ld_finish_qty + ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2 + ld_mx_qty + ld_collect_qty > ls_workqty THEN rslt = 0 IF uo_option_if_taskwork_acmpqty = 0 THEN arg_msg = '第 '+String(arg_printid)+' 行,工序:'+arg_procode+',员工:'+arg_empname+'计件数量不能大于计划生产数,计划工序数:'+String(ls_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_amount,'####0.####') ELSE arg_msg = '第 '+String(arg_printid)+' 行,工序:'+arg_procode+',员工:'+arg_empname+'计件数量不能大于计划已进仓数,计划进仓数:'+String(ls_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_amount,'####0.####') END IF GOTO ext END IF END IF //***检查工价表工序是否已审核工价 Int ll_auditflag IF uo_option_taskwork_procode_order = 0 THEN SELECT auditflag INTO :ll_auditflag FROM u_sc_workprice WHERE mtrlid = :mtrlid AND procode = :arg_procode And wpcode = :arg_wpcode; IF sqlca.SQLCode = 0 THEN IF ll_auditflag = 0 THEN arg_msg = '行:'+String(arg_printid)+',工序工价未审核:'+arg_procode+arg_proname rslt = 0 GOTO ext END IF ELSE cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_workprocedure WHERE code = :arg_procode And ifpubl = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+arg_procode+arg_proname+' 审核标记失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '查询工序:'+arg_procode+arg_proname+' 审核标记失败' rslt = 0 GOTO ext END IF END IF END IF //****************************** Decimal ld_workprice //检查限价 IF uo_option_taskwork_price_if_mod = 1 THEN //启用检查限价选项 IF uo_option_taskwork_procode_order = 0 Or orderid = 0 THEN //按工价表限价 SELECT workPrice INTO :ld_workprice FROM u_sc_workprice WHERE mtrlid = :mtrlid AND procode = :arg_procode And wpcode = :arg_wpcode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序:'+arg_procode+' 工价表工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##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_workprice THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########') GOTO ext END IF END IF ELSE //按生产计划工序明细限价 SELECT workPrice INTO :ld_workprice FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid And procode = :arg_procode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',工序:'+arg_procode+' 生产计划工序明细工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##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_workprice THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########') GOTO ext END IF END IF END IF END IF FOR ls_i = 1 To it_mxbt //合并重复项 IF taskworkmx[ls_i].empid = arg_empid And & taskworkmx[ls_i].procode = arg_procode THEN taskworkmx[ls_i].Amount = taskworkmx[ls_i].Amount+arg_amount taskworkmx[ls_i].workhour = taskworkmx[ls_i].workhour+arg_workhour rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt++ taskworkmx[it_mxbt].empid = arg_empid taskworkmx[it_mxbt].empcode = arg_empcode taskworkmx[it_mxbt].empname = arg_empname taskworkmx[it_mxbt].procode = arg_procode taskworkmx[it_mxbt].proname = arg_proname taskworkmx[it_mxbt].Amount = arg_amount taskworkmx[it_mxbt].workPrice = arg_workprice taskworkmx[it_mxbt].workhour = arg_workhour taskworkmx[it_mxbt].mxdscrp = arg_mxdscrp taskworkmx[it_mxbt].printid = arg_printid taskworkmx[it_mxbt].status = arg_status taskworkmx[it_mxbt].proorder = arg_proorder taskworkmx[it_mxbt].appendname = arg_appendname taskworkmx[it_mxbt].appendprice = arg_appendprice taskworkmx[it_mxbt].wpcode = arg_wpcode ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0,i Int rslt = 1 Decimal ls_emp_sumwage datastore ds_emp_sumworktaskwage 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_sc_taskwork WHERE wagemth = :arg_wagemth AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1) And affirmflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有单未确认操作失败,'+sqlca.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_sc_taskwork // WHERE wagemth = :arg_wagemth // AND wageid = :arg_wageid // AND Auditingflag = 1; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询计件单明细失败!原因:'+sqlca.SQLErrText // GOTO ext //END IF // //IF cnt > 0 THEN // rslt = 0 // arg_msg = '该月的计件单已审核,审核前请先执行撤审!' // GOTO ext //END IF cnt = 0 SELECT count(*) INTO :cnt From u_gz_wageitem Where useflag = 1 And wageid = :arg_wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目!' GOTO ext END IF IF uo_option_check_noworkprice = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_taskwork INNER JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.Billid WHERE u_sc_taskwork.wagemth = :arg_wagemth AND u_sc_taskwork.Auditingflag = 0 AND u_sc_taskwork.wageid = :arg_wageid and (u_sc_taskwork.scid = :arg_scid or :arg_scid = -1) And u_sc_taskworkmx.Workprice = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否存在没填工价的单据失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '当月存在没有填工价的计件单,不能审核!' GOTO ext END IF END IF ds_emp_sumworktaskwage = Create datastore ds_emp_sumworktaskwage.DataObject = 'dw_emp_sumtaskworkwage' ds_emp_sumworktaskwage.SetTransObject(sqlca) IF ds_emp_sumworktaskwage.Retrieve(arg_scid,arg_wagemth,arg_wageid,0) <= 0 THEN rslt = 0 arg_msg = '本月没有计件单可审核或查询计件单失败' GOTO ext END IF FOR i = 1 To ds_emp_sumworktaskwage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = ds_emp_sumworktaskwage.Object.sumwage[i] IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumworktaskwage.Object.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_sc_taskwork SET Auditingflag = 1, Auditingrep = :publ_operator, Auditingdate = getdate() WHERE wagemth = :arg_wagemth AND Auditingflag = 0 And wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); ELSE UPDATE u_sc_taskwork SET Auditingflag = 1, Auditingrep = :publ_operator, Auditingdate = getdate(), affirmdate = getdate(), affirmemp = :publ_operator, affirmflag = 1 WHERE wagemth = :arg_wagemth AND Auditingflag = 0 And wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新计件明细单失败,原因>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0,i Int rslt = 1 DateTime null_server_dt decimal ls_emp_sumwage SetNull(null_server_dt) 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 //检查该月份,该工资项目是否已开工资变更单 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 :cnt FROM u_sc_taskwork WHERE wagemth = :arg_wagemth AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1) AND Auditingflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询计件单明细失败,原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '该月的计件单未审核,不用撤审!' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where useflag = 1 AND wageid = :arg_wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败,原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目,原因>>'+sqlca.SQLErrText 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_sumworktaskwage ds_emp_sumworktaskwage = Create datastore ds_emp_sumworktaskwage.DataObject = 'dw_emp_sumtaskworkwage' ds_emp_sumworktaskwage.SetTransObject(sqlca) IF ds_emp_sumworktaskwage.Retrieve(arg_scid,arg_wagemth,arg_wageid,1) <= 0 THEN rslt = 0 arg_msg = '本月没有计件单已审核或查询计件单失败' GOTO ext END IF FOR i = 1 To ds_emp_sumworktaskwage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = 0 - ds_emp_sumworktaskwage.Object.sumwage[i] IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumworktaskwage.Object.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_sc_taskwork SET Auditingflag = 0, Auditingrep = '', Auditingdate = :null_server_dt Where wagemth = :arg_wagemth AND Auditingflag = 1 AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); ELSE UPDATE u_sc_taskwork SET Auditingflag = 0, Auditingrep = '', Auditingdate = :null_server_dt, affirmdate = :null_server_dt, affirmemp = '', affirmflag = 0 Where wagemth = :arg_wagemth AND Auditingflag = 1 AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新计件明细单失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_taskwork.create call super::create TriggerEvent( this, "constructor" ) end on on uo_taskwork.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;u_wage = Create uo_wage 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('018',str_optionvalue,arg_msg) uo_option_task_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 event destructor;DESTROY u_wage end event