$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 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 uo_wage u_wage PRIVATE: s_taskworkmx taskworkmx[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE//修改标志 end variables forward prototypes public function integer p_clearmx () public function integer p_reset () public function integer c_auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) 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 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) 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 auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_scid, long arg_billid, 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='' it_newbegin=FALSE it_updatebegin=FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer c_auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0,i Int rslt = 1 DateTime null_server_dt SetNull(null_server_dt) //检查该月份,该工资项目是否已开工资变更单 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 = '不存在该工资项目,原因>>'+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 IF sys_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; 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; 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 save (ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: save(arg_msg,arg_ifcommit) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid 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(wagemth) THEN wagemth = 0 IF IsNull(orderid) THEN orderid = 0 if isnull(relid) then relid = 0 IF IsNull(relcode) THEN relcode = '' 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; //取得系统时间,借用操作员表 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 billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_sc_taskwork","billid",arg_msg,TRUE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,"JJ",Date(server_dt),TRUE,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 ) VALUES ( :scid, :ls_newid, :billcode, :Wagemth, :orderid, :wrkGrpid, :WrkGrpname, :wageid, :billdate, :dscrp, :server_dt, :publ_operator, :mtrlid, :relcode, :relid ); 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) 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); 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 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) 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); 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, relid INTO :billcode, :Wagemth, :orderid, :wrkGrpid, :WrkGrpname, :wageid, :billdate, :Dscrp, :mtrlid, :relcode, :flag, :affirmflag, :relid 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 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; 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; 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 sys_option_add_orderrqwp_fqty = 1 THEN IF orderid > 0 AND relid > 0 THEN FOR i = 1 TO it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,relid,& taskworkmx[i].procode,taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF 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 sys_option_add_orderrqwp_fqty = 1 THEN IF orderid > 0 AND relid > 0 THEN FOR i = 1 TO it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,relid,& taskworkmx[i].procode,0 - taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF 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 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); Long rslt = 1,cnt = 0,ls_i String ls_empname,ls_empcode Decimal lde_workqty,ld_othertask_qty Decimal ld_Otherbill_qty,ld_Otherbill_qty_2 Decimal ld_finish_qty Decimal lde_orderqty, lde_assignqty, lde_cp_rate, lde_gz_qty String ls_assmsg IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" 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 arg_amount = 0 THEN rslt = 1 GOTO ext END IF IF IsNull(arg_empcode) Or Trim(arg_empcode) = '' THEN rslt = 0 arg_msg = '员工编号不能为空' GOTO ext END IF IF Trim(arg_proname) = '' THEN rslt = 0 arg_msg = '工序名称不能为空' GOTO ext END IF IF arg_amount < 0 Or arg_workhour < 0 THEN //检查生产数量 rslt = 0 arg_msg = "数量或工时错误" 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 = '查询员工资料失败。>'+sqlca.SQLErrText GOTO ext END IF IF ls_empname <> arg_empname Or ls_empcode <> arg_empcode THEN rslt = 0 arg_msg = arg_empname+'>>该员工的编号或名称不正确。' GOTO ext END IF /////////////// // IF orderid > 0 THEN //选订单的 //查订单数 // u_saletaskmx.orderqty, u_saletaskmx.assignqty //按已进仓的比例, 限制计件总数 SELECT orderqty , assignqty INTO :lde_orderqty, :lde_assignqty FROM u_saletaskmx WHERE scid = :scid AND taskid = :orderid And printid = :relid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序:'+arg_procode+',订单相关信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //计划总数 lde_workqty //已完成数 ld_finish_qty IF sys_option_add_orderrqwp_fqty = 1 THEN //查数量顺带查是否有该工序 SELECT proqty, finishqty INTO :lde_workqty, :ld_finish_qty FROM U_OrderRqwp WHERE scid = :scid AND printid = :relid AND procode = :arg_procode AND taskid = :orderid And mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序:'+arg_procode+',计划数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF //计划总数 // IF sys_option_taskwork_procode_order = 0 THEN // SELECT workqty * :qty INTO :lde_workqty // FROM u_sc_workprice // WHERE mtrlid = :mtrlid // And procode = :arg_procode; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询产品工序数失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // ld_finish_qty = 0 // END IF IF sys_option_taskwork_not_affirm = 1 THEN ld_finish_qty = 0 END IF IF sys_opton_taskwork_gz_qty = 0 THEN //按订单已进仓数 开计件单 lde_gz_qty = lde_assignqty ls_assmsg = "订单已进仓数" ELSEIF sys_opton_taskwork_gz_qty = 1 THEN //按订单安排生产数 开计件单 IF sys_option_taskwork_procode_order = 1 THEN SELECT proqty INTO :lde_workqty FROM U_OrderRqwp WHERE scid = :scid AND printid = :relid AND procode = :arg_procode AND taskid = :orderid And mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序:'+arg_procode+',计划数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF lde_gz_qty = lde_workqty ELSE SELECT workqty INTO :lde_workqty FROM u_sc_workprice WHERE mtrlid = :mtrlid And procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询工序:'+arg_procode+',工价表数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF lde_gz_qty = lde_orderqty * lde_workqty END IF ls_assmsg = "订单安排生产数" ELSEIF sys_opton_taskwork_gz_qty = 2 THEN //不限制 lde_gz_qty =100000 END IF //产品个人工序 已开单数 And (u_sc_taskwork.affirmflag = 0 Or :sys_option_taskwork_not_affirm = 1 ) 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_taskwork.relid = :relid AND u_sc_taskworkmx.procode = :arg_procode AND u_sc_taskwork.billid <> :billid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序:'+arg_procode+'其它已开单未确认数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //个人产品工序 已开单数 And (u_scwg_taskwork_2.affirmflag = 0 Or :sys_option_taskwork_not_affirm = 1 ) 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_mx.relprintid = :relid AND u_scwg_taskwork_2.scid = :scid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序:'+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 arg_amount + Max(ld_finish_qty , ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2) + ld_mx_qty > lde_gz_qty THEN rslt = 0 arg_msg = '第 '+String(arg_printid)+' 行,工序:'+arg_procode+',员工:'+arg_empname+',计件数量不能大于'+ls_assmsg+', 系统选项[081]限制~r~n' & + '订单安排生产数:'+String(lde_orderqty,'####0.####')+',已进仓数:'+String(lde_assignqty,'####0.####')+',可计件总数:'+String(lde_gz_qty,'####0.####')+'~r~n' & + '计件已完成数:'+String(ld_finish_qty,'####0.####')+',本单已开单:'+String(ld_mx_qty,'####0.####')+',其他已开单数:'+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2,'####0.####')+'~r~n' & + '不能开单:'+String(arg_amount,'####0.####')+'~r~n' & + String(lde_gz_qty,'####0.####') +' < '+String(ld_finish_qty,'####0.####')+' + '+String(ld_mx_qty,'####0.####')+' + '+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2,'####0.####')+' + '+String(arg_amount,'####0.####') GOTO ext END IF END IF //***检查工价表工序是否已审核工价 Int ll_auditflag IF sys_option_taskwork_procode_order = 0 THEN SELECT auditflag INTO :ll_auditflag FROM u_sc_workprice WHERE mtrlid = :mtrlid And procode = :arg_procode; IF sqlca.SQLCode = 0 THEN IF ll_auditflag = 0 THEN arg_msg = '工序工价未审核:'+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 = '查询工序:'+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 sys_option_taskwork_price_if_mod = 1 THEN //启用检查限价选项 IF sys_option_taskwork_procode_order = 0 THEN //按工价表限价 SELECT workPrice INTO :ld_workprice FROM u_sc_workprice WHERE mtrlid = :mtrlid And procode = :arg_procode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '工序:'+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 = '查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '公共工序:'+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 taskid = :orderid AND printid = :relid And procode = :arg_procode; IF sqlca.SQLCode = 0 THEN IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '工序:'+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 = '查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF ld_workprice <> arg_workprice THEN rslt = 0 arg_msg = '公共工序:'+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 ext: IF rslt = 0 THEN p_clearmx() 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 uo_order_ml uo_ml uo_ml = Create uo_order_ml 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 sys_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 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 sys_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 IF sys_option_taskwork_not_affirm = 1 THEN IF sys_option_add_orderrqwp_fqty = 1 THEN IF orderid > 0 And relid > 0 THEN FOR i = 1 To it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,relid,& taskworkmx[i].procode,taskworkmx[i].amount,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF END IF 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 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) uo_order_ml uo_ml uo_ml = Create uo_order_ml 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 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 sys_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 IF sys_option_taskwork_not_affirm = 1 THEN IF sys_option_add_orderrqwp_fqty = 1 THEN IF orderid > 0 And relid > 0 THEN FOR i = 1 To it_mxbt IF uo_ml.uof_add_procode_qty(scid,orderid,relid,& taskworkmx[i].procode,0 - taskworkmx[i].amount,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF END IF 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 auditing (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 sys_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 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 = '不存在该工资项目!原因>>'+sqlca.SQLErrText GOTO ext 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_wagemth,arg_wageid) <= 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 sys_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; 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; 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 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 end event event destructor;DESTROY u_wage end event