$PBExportHeader$uo_sc_task.sru forward global type uo_sc_task from nonvisualobject end type end forward global type uo_sc_task from nonvisualobject end type global uo_sc_task uo_sc_task type variables Long taskid String taskcode Long orderid Long mtrlid Long flag String taskrep DateTime taskdate String opemp DateTime opdate String modemp DateTime moddate String auditingrep DateTime auditingdate Long LastFlag Long empid Long scid Long wrkgrpid Long proid String procode String proname Dec qty Dec fqty Long tasktype Long workgroupid Long modelid DateTime rqdate String dscrp datetime cfdate String status String woodcode String pcode string partname long Proorder int kind int queue string teamorder decimal empqty,before_time,order_time,work_time long squadid string relcode,pbarcode long reltechid int billtype //<单据类型>0-派工(默认),1-退回,2-返工 int billkind //<派工类型>0-自制(默认),1-外协 long reloutid //相关派工ID decimal workprice Boolean if_getid_ture = FALSE end variables forward prototypes public function integer p_reset () public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer p_getinfo (long arg_taskid, ref string arg_msg) public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_taskid, ref string arg_msg) public function integer audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer c_audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer c_finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer stoptask (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask (long arg_taskid, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit) public function integer addcmpl (long arg_taskid, decimal arg_addqty, datetime arg_finishdate, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit) public function integer tryfinish (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer del_queue (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer update_tasktype (long arg_taskid, long arg_tasktype, ref string arg_msg, boolean arg_ifcommit) public function integer update_workgroupid (long arg_taskid, long arg_workgroupid, ref string arg_msg, boolean arg_ifcommit) public function integer update_empid (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit) public function integer update_groupstr (long arg_taskid[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit) public function integer uof_emp_del (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_emp_create (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_emp_add (long arg_taskid, long arg_empid, decimal arg_assignamt, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_qty (long arg_taskid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_chk (long arg_taskid, string arg_chkemp, integer arg_ifpass, string arg_chkrslt, ref string arg_msg, boolean arg_ifcommit, ref long arg_printid) public function integer uof_prechk (long arg_taskid, long arg_empid, string arg_prechkdscrp, string arg_carcode, string arg_locode, string arg_othercode, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_reset ();taskid = 0 taskcode = '' orderid = 0 mtrlid = 0 flag = 0 taskrep = '' opemp = '' modemp = '' auditingrep = '' LastFlag = 0 empid = 0 scid = 0 wrkgrpid = 0 proid = 0 procode = '' proname = '' qty = 0 fqty = 0 tasktype = 0 workgroupid = 0 modelid = 0 dscrp = '' status = '' woodcode = '' pcode = '' SetNull( opdate) SetNull( moddate) SetNull( taskdate) SetNull( auditingdate) SetNull( rqdate) reltechid = 0 RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_dt Long ll_taskid String ls_taskcode Long cnt DateTime ld_taskdate Decimal ld_period,ld_modelqty String ls_modelcode Decimal ld_orderqty = 0,ld_sumqty = 0,ld_thisqty = 0 String ls_groupstr IF IsNull(taskrep) THEN taskrep = '' IF IsNull(qty) THEN qty = 0 IF IsNull(fqty) THEN fqty = 0 IF Year(Date(taskdate)) < 2001 THEN arg_msg = '生产派工单日期为空或不合理!' rslt = 0 GOTO ext END IF IF qty = 0 THEN arg_msg = '没有正确的计划生产数' rslt = 0 GOTO ext END IF cnt = 0 SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF billkind = 0 THEN //自制 IF tasktype = 0 THEN IF empid > 0 And workgroupid = 0 THEN tasktype = 3 END IF IF empid = 0 And workgroupid > 0 THEN tasktype = 1 END IF IF tasktype = 0 THEN IF empid <> 0 Or workgroupid <> 0 THEN rslt = 0 arg_msg = "设置了员工或工作中心,请选择相应的派工类型 " GOTO ext END IF END IF ELSEIF tasktype = 1 THEN IF workgroupid = 0 THEN rslt = 0 arg_msg = "工作中心派工,请选择相应的工作中心派工 " GOTO ext END IF empid = 0 ELSEIF tasktype = 3 THEN IF empid = 0 THEN rslt = 0 arg_msg = "个人派工,请选择相应的员工 " GOTO ext END IF workgroupid = 0 END IF ELSEIF billkind = 1 THEN //外协 IF empid = 0 THEN rslt = 0 arg_msg = "外协派工,请选择相应的供应商 " GOTO ext END IF IF billtype = 0 THEN //1.派工 ELSEIF billtype = 1 THEN //2.退回 IF reloutid = 0 THEN rslt = 0 arg_msg = "外协退回,请选择相应的外协派工单 " GOTO ext END IF ELSEIF billtype = 2 THEN //3.返工 END IF END IF IF Kind = 0 THEN SELECT outtypestr INTO :ls_groupstr FROM u_order_ml WHERE scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划/指令单成组号失败,'+sqlca.SQLErrText GOTO ext END IF SELECT proqty INTO :ld_orderqty FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid AND procode = :procode And mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划工序明细计划生产数失败,'+sqlca.SQLErrText GOTO ext END IF IF taskid > 0 THEN SELECT qty INTO :ld_thisqty FROM u_sc_task Where taskid = :taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询安排生产数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT qty INTO :ld_sumqty FROM uv_sc_task_qty WHERE scid = :scid AND orderid = :orderid AND mtrlid = :mtrlid And procode = :procode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询已安排生产数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_sumqty = 0 END IF IF ld_sumqty - ld_thisqty + qty > ld_orderqty THEN arg_msg = '待安排生产数:'+String(ld_orderqty - (ld_sumqty - ld_thisqty),'#,##0.#########')+',不能再安排 '+String(qty,'#,##0.#########') rslt = 0 GOTO ext END IF ELSEIF Kind = 1 THEN //排机台 IF workgroupid = 0 THEN arg_msg = '错误的机台编号ID,请重新选择机台' rslt = 0 GOTO ext END IF IF modelid = 0 THEN arg_msg = "错误的模具唯一码,请选择模具" rslt = 0 GOTO ext END IF IF squadid = 0 THEN arg_msg = '请选择班类型' rslt = 0 GOTO ext END IF SELECT proqty INTO :ld_orderqty FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid AND procode = :procode And mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划工序明细计划生产数失败,'+sqlca.SQLErrText GOTO ext END IF SELECT sum(qty) INTO :ld_sumqty FROM u_sc_task WHERE scid = :scid AND orderid = :orderid AND mtrlid = :mtrlid AND procode = :procode AND kind = 1 And flag <> 2; IF sqlca.SQLCode = -1 THEN arg_msg = '查询机台已安排生产数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_sumqty = 0 END IF IF taskid > 0 THEN SELECT qty INTO :ld_thisqty FROM u_sc_task Where taskid = :taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询机台安排生产数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF ld_sumqty - ld_thisqty + qty > ld_orderqty THEN arg_msg = '待安排生产数:'+String(ld_orderqty - (ld_sumqty - ld_thisqty),'#,##0.#########')+',不能再安排 '+String(qty,'#,##0.#########') rslt = 0 GOTO ext END IF //.......计算计划需时 SELECT period INTO :ld_period FROM u_mtrldef_sl Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品标准生产周期失败' rslt = 0 GOTO ext END IF SELECT modelqty INTO :ld_modelqty FROM u_model_mtrl WHERE modelid = :modelid And mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询模腔数失败' rslt = 0 GOTO ext END IF SELECT modelcode INTO :ls_modelcode FROM u_modeldef Where modelid = :modelid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询模具编号失败' rslt = 0 GOTO ext END IF IF ld_period = 0 Or ld_modelqty = 0 THEN order_time = 0 ELSE order_time = qty / (3600 / ld_period * ld_modelqty ) // 计划需时 END IF work_time = before_time + order_time //实际需时 //// SELECT max(queue) INTO :queue FROM u_sc_task WHERE u_sc_task.workgroupid = :workgroupid And u_sc_task.Kind = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '错误的机台唯一码' rslt = 0 GOTO ext END IF IF IsNull(queue) THEN queue = 0 IF queue = - 1 THEN queue = 0 queue++ END IF // // 080915 某些车间工作日期按指令单下单日期 //uf_get_sc_workdate(orderid, taskdate) IF taskid = 0 THEN //新建 ll_taskid = f_sys_scidentity(0,"u_sc_task","taskid",arg_msg,True,id_sqlca) IF ll_taskid <= 0 THEN rslt = 0 GOTO ext END IF IF billkind = 0 THEN IF Kind = 0 THEN ls_taskcode = getid(scid,"PP",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 pbarcode = getid(scid,"P",Date(server_dt),if_getid_ture,sqlca) ELSE ls_taskcode = getid(scid,"PJ",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 END IF ELSE IF billtype = 0 THEN ls_taskcode = getid(scid,"PA",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 派工 ELSEIF billtype = 1 THEN ls_taskcode = getid(scid,"PB",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 退回 ELSEIF billtype = 2 THEN ls_taskcode = getid(scid,"PE",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 返工 END IF END IF IF ls_taskcode = "err" THEN rslt = 0 arg_msg = "无法获取工序派工单编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_sc_task (taskid , taskcode, scid, orderid, wrkgrpid, procode, proname, LastFlag, qty, tasktype, workgroupid, modelid, empid, taskdate, rqdate, taskrep, dscrp, opemp, opdate, proid, mtrlid, status, woodcode, pcode, kind, teamorder, empqty, before_time, order_time, work_time, squadid, queue, relcode, pbarcode, reltechid, groupstr, cfdate, billtype, billkind, reloutid, workprice) VALUES ( :ll_taskid, :ls_taskcode, :scid, :orderid, :wrkgrpid, :procode, :proname, :LastFlag, :qty, :tasktype, :workgroupid, :modelid, :empid, :taskdate, :rqdate, :taskrep, :dscrp, :publ_operator, :server_dt, :proid, :mtrlid, :status, :woodcode, :pcode, :Kind, :teamorder, :empqty, :before_time, :order_time, :work_time, :squadid, :queue, :relcode, :pbarcode, :reltechid, :ls_groupstr, :cfdate, :billtype, :billkind, :reloutid, :workprice); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入生产派工单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF taskid = ll_taskid taskcode = ls_taskcode ELSE //修改 UPDATE u_sc_task SET orderid = :orderid, wrkgrpid = :wrkgrpid, procode = :procode , proname = :proname, LastFlag = :LastFlag, qty = :qty, tasktype = :tasktype, workgroupid = :workgroupid, modelid = :modelid, empid = :empid, taskdate = :taskdate, rqdate = :rqdate, taskrep = :taskrep, dscrp = :dscrp, mtrlid = :mtrlid, status = :status, woodcode = :woodcode, pcode = :pcode, teamorder = :teamorder, empqty = :empqty, before_time = :before_time, order_time = :order_time, work_time = :work_time, squadid = :squadid, modemp = :publ_operator, moddate = :server_dt, relcode = :relcode, reltechid = :reltechid, groupstr = :ls_groupstr, cfdate = :cfdate, billtype = :billtype, billkind = :billkind, reloutid = :reloutid, workprice = :workprice WHERE taskid = :taskid And flag = 0 ; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新生产派工单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF billkind = 0 THEN //工作中心派工, 实例化工作中心员工 IF tasktype = 1 THEN IF uof_emp_create(taskid, arg_msg, False) = 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+arg_msg GOTO ext END IF END IF END IF UPDATE u_order_ml SET u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '') FROM u_Order_ml LEFT OUTER JOIN uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid AND u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID WHERE u_Order_ml.scid = :scid And u_order_ml.orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新生产指令单派工状态失败,原因:'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer p_getinfo (long arg_taskid, ref string arg_msg);Int rslt = 1 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误生产任务单唯一码' GOTO ext END IF SELECT u_sc_task.taskid, u_sc_task.taskcode, u_sc_task.scid, u_sc_task.orderid, u_sc_task.wrkgrpid, u_sc_task.procode, u_sc_task.proname, u_sc_task.LastFlag, u_sc_task.qty, u_sc_task.fqty, u_sc_task.tasktype, u_sc_task.workgroupid, u_sc_task.modelid, u_sc_task.empid, u_sc_task.taskdate, u_sc_task.rqdate, u_sc_task.taskrep, u_sc_task.dscrp, u_sc_task.opemp, u_sc_task.opdate, u_sc_task.flag, u_sc_task.proid, u_sc_task.mtrlid, u_sc_task.status, u_sc_task.woodcode, u_sc_task.pcode, U_OrderRqwp.partname, U_OrderRqwp.Proorder, u_sc_task.billtype, u_sc_task.billkind, u_sc_task.reloutid INTO :taskid, :taskcode, :scid, :orderid, :wrkgrpid, :procode, :proname, :LastFlag, :qty, :fqty, :tasktype, :workgroupid, :modelid, :empid, :taskdate, :rqdate, :taskrep, :dscrp, :opemp, :opdate, :flag, :proid, :mtrlid, :status, :woodcode, :pcode, :partname, :Proorder, :billtype, :billkind, :reloutid FROM u_sc_task LEFT OUTER JOIN U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND u_sc_task.orderid = U_OrderRqwp.orderid AND u_sc_task.procode = U_OrderRqwp.Procode AND u_sc_task.mtrlid = U_OrderRqwp.Mtrlid Where u_sc_task.taskid = :arg_taskid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产任务单内容失败(错误生产任务单唯一码)' GOTO ext END IF taskdate = DateTime(Date(taskdate),Time(0)) taskid = arg_taskid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt uo_order_ml uo_orderml uo_orderml = Create uo_order_ml rslt = p_getinfo(arg_taskid, arg_msg) IF rslt = 0 THEN GOTO ext IF flag <> 0 THEN rslt = 0 arg_msg = "生产派工单已经审核,不可以删除" GOTO ext END IF UPDATE u_ordermtrl_workgroup_barcode SET relcode = '' Where relcode = :taskcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "清空\部件条码的相关号码失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产任务单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //工作中心派工, 实例化工作中心员工 //IF tasktype = 1 THEN DELETE From u_sc_task_emp Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 删除工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //END IF //IF uo_orderml.f_addschour(orderid,proid,queue,tolqueue,0 - taskqty ,arg_msg ,FALSE) = 0 THEN // rslt = 0 // GOTO ext //END IF //IF uo_orderml.f_update_taskflag(orderid,arg_msg ,FALSE) = 0 THEN // rslt = 0 // GOTO ext //END IF UPDATE u_order_ml SET u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '') FROM u_Order_ml LEFT OUTER JOIN uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid AND u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID WHERE u_Order_ml.scid = :scid And u_order_ml.orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新生产指令单派工状态失败,原因:'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_orderml Return (rslt) end function public function integer updatebegin (long arg_taskid, ref string arg_msg);Long rslt = 1 p_reset() rslt = p_getinfo(arg_taskid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag <> 0 THEN rslt = 0 arg_msg = '已经处于审核或完成等状态,不可以修改' GOTO ext END IF ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_j,cnt uo_order_ml uo_orderml uo_orderml = Create uo_order_ml uo_sc_task uo_st uo_st = Create uo_sc_task datastore ds_barcode ds_barcode = Create datastore ds_barcode.DataObject = 'ds_barcode_sc_task_print_no_inherit' ds_barcode.SetTransObject(sqlca) IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = "只有在待审批状态才可以执行审批,请核对" GOTO ext END IF UPDATE u_sc_task SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE taskid = :arg_taskid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "工序派工单审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF billkind = 1 And billtype = 1 THEN IF reloutid <= 0 THEN //外协退回, 更新源派工单的 安排数 rslt = 0 arg_msg = "相关外协工序派工单ID错误" GOTO ext END IF IF uo_st.uof_update_qty(reloutid, 0 - qty, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ELSE // //更新安排数 IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,qty ,arg_msg ,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //更新条码相关号 Long ll_printid,ll_pid String ls_barcode Decimal ld_barcode_qty,ld_qty_tmp ld_qty_tmp = qty IF partname <> '' THEN SELECT count(*) INTO :cnt FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid AND partname = :partname And proorder < :proorder; IF sqlca.SQLCode <> 0 THEN cnt = 1 IF cnt = 0 THEN ds_barcode.Retrieve(scid,orderid,partname,taskcode) FOR ll_j = 1 To ds_barcode.RowCount() IF ld_qty_tmp <= 0 THEN EXIT ll_printid = ds_barcode.Object.printid[ll_j] ll_pid = ds_barcode.Object.pid[ll_j] ls_barcode = ds_barcode.Object.barcode[ll_j] ld_barcode_qty = ds_barcode.Object.qty[ll_j] UPDATE u_ordermtrl_workgroup_barcode SET relcode = :taskcode WHERE scid = :scid AND orderid = :orderid AND printid = :ll_printid And pid = :ll_pid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新条码相关号失败,'+sqlca.SQLErrText GOTO ext END IF ld_qty_tmp = ld_qty_tmp - ld_barcode_qty NEXT END IF END IF //如果是外协退回,直接完成了它 IF billkind = 1 And billtype = 1 THEN UPDATE u_sc_task SET flag = 3 Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "外协工序退回单完成操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_orderml Destroy uo_st RETURN rslt end function public function integer c_audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long cnt DateTime null_dt SetNull(null_dt) uo_order_ml uo_orderml uo_orderml = Create uo_order_ml uo_sc_task uo_st uo_st = Create uo_sc_task IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //如果是外协退回,直接完成了它 IF billkind = 1 And billtype = 1 THEN IF flag = 3 THEN UPDATE u_sc_task SET flag = 1 Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "外协工序退回单取消完成操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF flag = 1 END IF END IF IF flag <> 1 THEN rslt = 0 arg_msg = "只有在审批状态才可以执行撤审,请核对" GOTO ext END IF IF fqty > 0 THEN rslt = 0 arg_msg = "派工单已有完成数,不能撤审,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_finishmx Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 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 IF billkind = 1 THEN SELECT count(*) INTO :cnt FROM u_sc_task Where reloutid = :arg_taskid; 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 END IF UPDATE u_sc_task SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE taskid = :arg_taskid And flag = 1; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "派工单撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF billkind = 1 And billtype = 1 THEN IF reloutid <= 0 THEN //外协退回, 更新源派工单的 安排数 rslt = 0 arg_msg = "相关外协工序派工单ID错误" GOTO ext END IF IF uo_st.uof_update_qty(reloutid, qty, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,0 - qty ,arg_msg ,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //更新条码相关号 UPDATE u_ordermtrl_workgroup_barcode SET relcode = '' WHERE relcode = :taskcode AND scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新条码相关号失败,'+sqlca.SQLErrText GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_st Destroy uo_orderml RETURN rslt end function public function integer c_finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 DateTime null_dt SetNull(null_dt) uo_order_ml uo_orderml uo_orderml = CREATE uo_order_ml IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 4 THEN rslt = 0 arg_msg = "该派工单只有在已完成状态下才能执行操作" GOTO ext END IF UPDATE u_sc_task SET accomplishdate = :taskdate, accomplishemp = '' , flag = 1 WHERE taskid = :arg_taskid; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ////更新完成数 IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode,taskdate, fqty - qty ,arg_msg ,FALSE) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_orderml RETURN rslt end function public function integer stoptask (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 uo_order_ml uo_orderml uo_orderml = CREATE uo_order_ml IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = "派工单"+taskcode+"处于非在进行状态,不能执行终止操作" GOTO ext END IF UPDATE u_sc_task SET Stopdate = getdate(), Stopemp = :arg_emp, flag = 2 WHERE taskid = :arg_taskid AND flag = 1; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //IF uo_orderml.f_cmpschour(orderid,proid,queue, tolqueue,taskqty ,arg_msg ,FALSE) = 0 THEN // rslt = 0 // GOTO ext //END IF // ////更新派工状态 // IF uo_orderml.f_update_taskflag(orderid,arg_msg ,FALSE) = 0 THEN // rslt = 0 // GOTO ext // END IF flag = 2 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_orderml RETURN rslt end function public function integer finishtask (long arg_taskid, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 datetime arg_finishdate uo_order_ml uo_orderml uo_orderml = CREATE uo_order_ml arg_finishdate = datetime(today(),now()) IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF IsNull(arg_finishdate) THEN rslt = 0 arg_msg = '请输入实际完成日期' GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = "派工单"+taskcode+"处于非在进行状态,操作取消" GOTO ext END IF IF arg_finishdate < taskdate THEN rslt = 0 arg_msg = '实际完成日期不能早于工作日期,请核对' GOTO ext END IF UPDATE u_sc_task SET accomplishdate = :arg_finishdate, Accomplishemp = :arg_finishemp , flag = 4 Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ////更新完成数 IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode,arg_finishdate, qty - fqty ,arg_msg ,FALSE) = 0 THEN rslt = 0 GOTO ext END IF flag = 4 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_orderml RETURN rslt end function public function integer addcmpl (long arg_taskid, decimal arg_addqty, datetime arg_finishdate, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 DateTime ld_finishdate,ld_null uo_order_ml uo_orderml uo_orderml = Create uo_order_ml uo_order_plan_tech uo_plan uo_plan = Create uo_order_plan_tech ld_finishdate = DateTime(Today(),Now()) ld_finishdate = arg_finishdate IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有完成对象" GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_addqty = 0 THEN GOTO ext END IF IF flag = 1 THEN IF fqty + arg_addqty > qty THEN rslt = 0 arg_msg = '工序派工单:'+taskcode+'未派工数只有:'+String(qty - fqty,'#,##0.##########')+',不能再派工'+String(arg_addqty,'#,##0.##########') GOTO ext END IF END IF UPDATE u_sc_task SET fqty = fqty + :arg_addqty Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF tryfinish(arg_taskid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新完成数 IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode, ld_finishdate,arg_addqty,arg_msg ,False) = 0 THEN rslt = 0 GOTO ext END IF Long ll_maxProorder,ll_Proorder String ls_partname Long ll_billid[],ll_printid Decimal ld_noqty[],ld_oriqty,ld_argqty Long ll_mxbt,ll_i Int li_if_barcode Int li_flag IF orderid > 0 THEN ld_oriqty = arg_addqty SELECT partname,Proorder INTO :ls_partname,:ll_Proorder FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid AND mtrlid = :mtrlid And procode = :procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工序进度信息失败 '+sqlca.SQLErrText GOTO ext END IF IF Trim(ls_partname) <> '' THEN SELECT top 1 if_barcode,printid INTO :li_if_barcode,:ll_printid FROM u_OrderMtrl_workgroup_tree WHERE scid = :scid AND orderid = :orderid AND partname = :ls_partname Order By if_barcode Desc; IF sqlca.SQLCode <> 0 THEN li_if_barcode = 0 END IF IF li_if_barcode = 2 THEN SELECT max(proorder) INTO :ll_maxProorder FROM U_OrderRqwp WHERE scid = :scid AND orderid = :orderid AND mtrlid = :mtrlid And partname = :ls_partname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工序进度最大序号失败 '+sqlca.SQLErrText GOTO ext END IF IF ll_Proorder = ll_maxProorder THEN ll_mxbt = 1 IF arg_addqty > 0 THEN DECLARE cur_audit CURSOR FOR SELECT billid,qty - fqty FROM u_order_plan_tech WHERE scid = :scid AND orderid = :orderid AND printid = :ll_printid And qty > fqty; OPEN cur_audit; FETCH cur_audit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_audit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt]; LOOP CLOSE cur_audit; FOR ll_i = 1 To ll_mxbt - 1 IF ld_oriqty > ld_noqty[ll_i] THEN ld_argqty = ld_noqty[ll_i] ld_oriqty = ld_oriqty - ld_noqty[ll_i] ELSE ld_argqty = ld_oriqty ld_oriqty = 0 END IF IF uo_plan.addcmpqty(ll_billid[ll_i],ld_argqty,arg_msg,False) = 0 THEN arg_msg = '更新工组条码进度已完成数及相关工艺派工单失败,'+arg_msg rslt = 0 GOTO ext END IF IF ld_oriqty <= 0 THEN EXIT NEXT ELSE DECLARE cur_caudit CURSOR FOR SELECT billid,fqty FROM u_order_plan_tech WHERE scid = :scid AND orderid = :orderid AND printid = :ll_printid AND fqty > 0 Order By fqty Desc; OPEN cur_caudit; FETCH cur_caudit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_caudit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt]; LOOP CLOSE cur_caudit; FOR ll_i = 1 To ll_mxbt - 1 IF 0 - ld_oriqty > ld_noqty[ll_i] THEN ld_argqty = 0 - ld_noqty[ll_i] ld_oriqty = ld_oriqty + ld_noqty[ll_i] ELSE ld_argqty = ld_oriqty ld_oriqty = 0 END IF IF uo_plan.addcmpqty(ll_billid[ll_i],ld_argqty,arg_msg,False) = 0 THEN arg_msg = '更新工组条码进度已完成数及相关工艺派工单失败,'+arg_msg rslt = 0 GOTO ext END IF IF ld_oriqty <= 0 THEN EXIT NEXT END IF END IF END IF END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_orderml Destroy uo_plan Return (rslt) end function public function integer tryfinish (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的工序派工单唯一码' GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 AND flag <> 3 THEN rslt = 0 IF flag <> 1 THEN arg_msg = '工序派工单只有在进行状态下才能设置完成状态' ELSEIF flag <> 3 THEN arg_msg = '工序派工单只有在自动完成状态下才能撤销完成状态' END IF GOTO ext END IF IF flag = 1 AND fqty >= qty THEN UPDATE u_sc_task SET flag = 3, accomplishdate = getdate(), accomplishemp = :publ_operator Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因导致工序派工单完成状态设置操作失败'+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF flag = 3 AND fqty < qty THEN UPDATE u_sc_task SET flag = 1, accomplishdate = :null_dt, accomplishemp = '' Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因导致工序派工单完成状态设置操作失败'+"~n"+sqlca.SQLErrText GOTO ext END IF 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_queue (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt rslt = p_getinfo(arg_taskid, arg_msg) IF rslt = 0 THEN GOTO ext IF flag <> 0 THEN rslt = 0 arg_msg = "机台任务已经开启,不可以删除,如要删除,请先更改状态" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_data_collect Where taskid = :arg_taskid; 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 DELETE FROM u_sc_task Where taskid = :arg_taskid; 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 update_tasktype (long arg_taskid, long arg_tasktype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag SELECT flag INTO :ll_flag FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 arg_msg = '工序派工单不在待审核状态,不能修改派工类型' GOTO ext END IF UPDATE u_sc_task SET tasktype = :arg_tasktype, modemp = :publ_operator, moddate = getdate() Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致更新派工类型失败,' + sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer update_workgroupid (long arg_taskid, long arg_workgroupid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag SELECT flag INTO :ll_flag FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 arg_msg = '工序派工单不在待审核状态,不能修改工作中心' GOTO ext END IF UPDATE u_sc_task SET workgroupid = :arg_workgroupid, modemp = :publ_operator, moddate = getdate() Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致更新工作中心失败,' + sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer update_empid (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag SELECT flag INTO :ll_flag FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 arg_msg = '工序派工单不在待审核状态,不能修改员工' GOTO ext END IF UPDATE u_sc_task SET empid = :arg_empid, modemp = :publ_operator, moddate = getdate() Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致更新员工失败,' + sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer update_groupstr (long arg_taskid[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,cnt Decimal ld_fqty String ls_taskcode,ls_groupstr DateTime server_dt //arg_kind 0-成组 1-清空 For ll_i = 1 To UpperBound(arg_taskid) Select fqty ,taskcode Into :ld_fqty,:ls_taskcode From u_sc_task Where taskid = :arg_taskid[ll_i]; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询工序派工单信息失败,ID:'+String(arg_taskid[ll_i])+','+sqlca.SQLErrText Goto ext End If If ld_fqty > 0 Then rslt = 0 arg_msg = '单号:'+ls_taskcode+' 已有完工数,不能再更改成组号' Goto ext End If Select count(*) Into :cnt From u_sc_task Inner JOIN u_finishmx ON u_sc_task.taskid = u_finishmx.taskid Where u_sc_task.taskid = :arg_taskid[ll_i]; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '单号:'+ls_taskcode+' 已开完工单,不能再更改成组号' Goto ext End If Next If arg_kind = 0 Then Select Top 1 getdate() Into :server_dt From u_user ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,日期 " Goto ext End If ls_groupstr = getid(scid,"G1",Date(server_dt),if_getid_ture,sqlca) If ls_groupstr = "err" Then rslt = 0 arg_msg = "无法获取工序派工单成组号"+"~n"+sqlca.SQLErrText Goto ext End If Else ls_groupstr = '' End If For ll_i = 1 To UpperBound(arg_taskid) Update u_sc_task Set groupstr = :ls_groupstr Where taskid = :arg_taskid[ll_i]; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "更新工序派工单成组号失败,ID:"+String(arg_taskid[ll_i])+"~n"+sqlca.SQLErrText Goto ext End If Next ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return rslt end function public function integer uof_emp_del (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DELETE From u_sc_task_emp Where taskid = :arg_taskid And empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 删除工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_emp_create (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_workgroupid DELETE FROM u_sc_task_emp Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 删除工序派工单工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF SELECT workgroupid INTO :ll_workgroupid FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "工作中心派工类型,查找工序派工单工作中心操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_sc_task_emp (taskid, empid, assignamt) SELECT :arg_taskid, empid, assignamt FROM u_workgroupmx Where (workgroupid = :ll_workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //IF sqlca.SQLNRows <= 0 THEN // rslt = 0 // arg_msg = "工作中心派工类型, 工作中心员工没有相应工作人员" // GOTO ext //END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_emp_add (long arg_taskid, long arg_empid, decimal arg_assignamt, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt //SELECT count(*) // INTO :cnt // FROM u_sc_task_emp // WHERE taskid = :arg_taskid // And empid = :arg_empid; //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 UPDATE u_sc_task_emp SET assignamt = :arg_assignamt WHERE taskid = :arg_taskid And empid = :arg_empid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_sc_task_emp (taskid, empid, assignamt) Values(:arg_taskid, :arg_empid, :arg_assignamt); IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = "工作中心派工类型, 更新工作中心员工操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEif arg_ifcommit then COMMIT; END IF RETURN rslt end function public function integer uof_update_qty (long arg_taskid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 DateTime ld_finishdate,ld_null uo_order_ml uo_orderml uo_orderml = Create uo_order_ml IF arg_taskid = 0 THEN rslt = 0 arg_msg = "没有完成对象" GOTO ext END IF IF arg_addqty = 0 THEN GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //Decimal lde_qty, lde_fqty //String ls_taskcode // //SELECT taskcode, qty, fqty // INTO :ls_taskcode, :lde_qty, :lde_fqty // FROM u_sc_task // Where taskid = :arg_taskid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询源派工单信息失败,"+sqlca.SQLErrText // GOTO ext //END IF IF fqty > qty - arg_addqty THEN rslt = 0 arg_msg = '工序派工单:'+taskcode+'未派工数只有:'+String(qty - fqty,'#,##0.##########')+',不能减少派工'+String(arg_addqty,'#,##0.##########') GOTO ext END IF UPDATE u_sc_task SET qty = qty - :arg_addqty Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新源派工单计划数量失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF tryfinish(arg_taskid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF // //更新安排数 IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,0 - arg_addqty ,arg_msg ,False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_orderml Return (rslt) end function public function integer uof_chk (long arg_taskid, string arg_chkemp, integer arg_ifpass, string arg_chkrslt, ref string arg_msg, boolean arg_ifcommit, ref long arg_printid);Int rslt = 1 Long ll_printid Int li_chkrsltflag Int li_prechkflag uo_finish uo_finish_wg uo_finish_wg = Create uo_finish Long cur_scid, ll_wrkgrpid, ll_wagemth, ll_tasktype, ll_workgroupid, ll_empid s_finish_mx s_mx[] Decimal ld_addqty, ld_workprice String ls_procode, ls_proname Boolean lb_find Long ll_wageid SELECT prechkflag, scid, wrkgrpid, qty - fqty, tasktype, workgroupid, empid INTO :li_prechkflag, :cur_scid, :ll_wrkgrpid, :ld_addqty , :ll_tasktype, :ll_workgroupid, :ll_empid FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单待质检状态失败,'+sqlca.SQLErrText GOTO ext END IF IF li_prechkflag <> 1 THEN rslt = 0 arg_msg = '工序派工单不是在待质检状态,不能质检' GOTO ext END IF SELECT isnull(max(printid),0) INTO :ll_printid FROM u_sc_task_chkmx Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN ll_printid = 0 ll_printid++ INSERT INTO u_sc_task_chkmx (taskid, printid, chkemp, chkdate, chkrslt, ifpass) VALUES (:arg_taskid, :ll_printid, :arg_chkemp, getdate(), :arg_chkrslt, :arg_ifpass); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入质检明细失败,'+sqlca.SQLErrText GOTO ext END IF //返回新的printid, 可用于附件保存 arg_printid = ll_printid IF arg_ifpass = 0 THEN //不合格,返工 li_chkrsltflag = 2 ELSE //合格 li_chkrsltflag = 1 END IF UPDATE u_sc_task SET chkemp = :arg_chkemp, chkdate = getdate(), chkrsltflag = :li_chkrsltflag, prechkflag = 0 Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工序派工单质检标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_chkrsltflag = 1 THEN // 合格,自动生成完工单 ll_wagemth = Long(String(Today(), 'yyyyMM')) SELECT ISNULL(U_OrderRqwp.workPrice, 0), u_sc_task.procode, u_sc_task.proname INTO :ld_workprice, :ls_procode, :ls_proname FROM u_sc_task LEFT OUTER JOIN U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND u_sc_task.orderid = U_OrderRqwp.orderid AND u_sc_task.procode = U_OrderRqwp.Procode AND u_sc_task.mtrlid = U_OrderRqwp.Mtrlid Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单工价失败,'+sqlca.SQLErrText GOTO ext END IF lb_find = False IF ll_tasktype = 1 THEN IF ll_workgroupid > 0 THEN SELECT u_workgroup.wageid INTO :ll_wageid FROM u_workgroup INNER JOIN u_gz_wageitem ON u_workgroup.wageid = u_gz_wageitem.wageid Where (u_workgroup.workgroupid = :ll_workgroupid); IF sqlca.SQLCode = 0 THEN lb_find = True END IF END IF IF Not lb_find THEN SELECT top 1 wageid INTO :ll_wageid FROM u_gz_wageitem WHERE (u_gz_wageitem.wagemode = 16 ) AND ( u_gz_wageitem.useflag = 1 ) ; IF sqlca.SQLCode <> 0 THEN ll_wageid = 0 ELSE lb_find = True END IF END IF ELSE SELECT top 1 wageid INTO :ll_wageid FROM u_gz_wageitem WHERE (u_gz_wageitem.wagemode = 12 ) AND ( u_gz_wageitem.useflag = 1 ) ; IF sqlca.SQLCode <> 0 THEN ll_wageid = 0 END IF END IF IF uo_finish_wg.newbegin(cur_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_finish_wg.scid = cur_scid uo_finish_wg.relcode = '' uo_finish_wg.assign_emp = publ_operator uo_finish_wg.wrkgrpid = ll_wrkgrpid uo_finish_wg.wagemth = ll_wagemth uo_finish_wg.dscrp = '' uo_finish_wg.finishdate = DateTime(Today(),Now()) s_mx[1].taskid = arg_taskid s_mx[1].printid = 1 s_mx[1].comqty = ld_addqty s_mx[1].mxdscrp = '' s_mx[1].wageid = ll_wageid s_mx[1].empid = ll_empid s_mx[1].workgroupid = ll_workgroupid s_mx[1].workPrice = ld_workprice s_mx[1].procode = ls_procode s_mx[1].proname = ls_proname s_mx[1].storageid = 0 s_mx[1].Location = '' s_mx[1].starttime = DateTime(Today(),Now()) s_mx[1].endtime = DateTime(Today(),Now()) s_mx[1].workhour = 0 s_mx[1].beforehour = 0 s_mx[1].afterhour = 0 s_mx[1].waithour = 0 s_mx[1].TechLevel = '' IF uo_finish_wg.Save(s_mx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF // 自动确认 // IF uo_finish_wg.audit(uo_finish_wg.finishid,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF END IF ext: Destroy uo_finish_wg IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_prechk (long arg_taskid, long arg_empid, string arg_prechkdscrp, string arg_carcode, string arg_locode, string arg_othercode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_taskcode String ls_empname Long ll_pempid Int li_flag uo_phone_push uo_push uo_push = Create uo_phone_push SELECT flag, taskcode INTO :li_flag, :ls_taskcode FROM u_sc_task Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工序派工单状态失败,'+sqlca.SQLErrText GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 arg_msg = '工序派工单不是在进行状态,不能申请质检' GOTO ext END IF IF arg_empid > 0 THEN SELECT empname, pempid INTO :ls_empname, :ll_pempid FROM u_rs_empinfo Where empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询员工信息失败,'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_sc_task SET prechkflag = 1 , prechkdate = getdate(), empid = :arg_empid, prechkdscrp = :arg_prechkdscrp, carcode = :arg_carcode, locode = :arg_locode, othercode = :arg_othercode Where taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新待质检标记失败,'+sqlca.SQLErrText GOTO ext END IF // DONE: 通知上司 Long ll_pushid Long arr_empids[] String ls_content IF ll_pempid > 0 THEN arr_empids[1] = ll_pempid ls_content = '派工单号:'+ls_taskcode IF arg_carcode <> '' THEN ls_content += ',车/袋号:'+arg_carcode IF arg_locode <> '' THEN ls_content += ',仓位:'+arg_locode IF arg_othercode <> '' THEN ls_content += ',其它:'+arg_othercode IF uo_push.uf_add(arr_empids, ls_empname + '申请了工序派工质检', ls_content, 'sc_task_prechk', String(arg_taskid), ll_pushid, arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF END IF ext: Destroy uo_push IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_sc_task.create call super::create TriggerEvent( this, "constructor" ) end on on uo_sc_task.destroy TriggerEvent( this, "destructor" ) call super::destroy end on