$PBExportHeader$uo_order_ml_stop.sru forward global type uo_order_ml_stop from nonvisualobject end type end forward global type uo_order_ml_stop from nonvisualobject end type global uo_order_ml_stop uo_order_ml_stop type variables Long uo_billid String uo_billcode Int uo_option_order_bh_use_yc end variables forward prototypes public function integer save (s_order_ml_stop arg_stop, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_order_ml_stop_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer getinfo_order (long arg_scid, long arg_orderid, ref s_order_ml_mx arg_order_mx[], ref long arg_cnt_arr, ref string arg_msg) end prototypes public function integer save (s_order_ml_stop arg_stop, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 DateTime server_dt Long ll_billid String ls_sccode,ls_billcode Long it_mxbt,i IF IsNull(arg_stop.scid) THEN arg_stop.scid = 0 IF IsNull(arg_stop.billid) THEN arg_stop.billid = 0 IF IsNull(arg_stop.billemp) THEN arg_stop.billemp = '' IF IsNull(arg_stop.relcode) THEN arg_stop.relcode = '' IF IsNull(arg_stop.dscrp) THEN arg_stop.dscrp = '' IF IsNull(arg_stop.orderid) THEN arg_stop.orderid = 0 IF IsNull(arg_stop.oriqty) THEN arg_stop.oriqty = 0 IF IsNull(arg_stop.stopqty) THEN arg_stop.stopqty = 0 IF IsNull(arg_stop.ifchange) THEN arg_stop.ifchange = 0 IF IsNull(arg_stop.ifstoppro) THEN arg_stop.ifstoppro = 0 IF arg_stop.orderid = 0 THEN rslt = 0 arg_msg = '请选择要终止数量的生产计划' GOTO ext END IF Long ll_status Decimal ld_orderqty,ld_acmpqty SELECT status,orderqty,acmpqty INTO :ll_status,:ld_orderqty,:ld_acmpqty FROM u_order_ml WHERE scid = :arg_stop.scid AND orderid = :arg_stop.orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划状态失败'+sqlca.SQLErrText GOTO ext END IF IF ll_status <> 1 THEN rslt = 0 arg_msg = '生产计划不是在进行状态,不能终止数量' GOTO ext END IF arg_stop.oriqty = ld_orderqty IF ld_orderqty - ld_acmpqty < arg_stop.stopqty THEN rslt = 0 arg_msg = '生产计划未完成数:'+String(ld_orderqty - ld_acmpqty,'#,##0.##########')+',不能终止数量:'+String( arg_stop.stopqty,'#,##0.##########') GOTO ext END IF IF arg_stop.billemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF it_mxbt = UpperBound(arg_stop.arg_s_stopmx) FOR i = 1 TO it_mxbt IF arg_stop.arg_s_stopmx[i].qty_stop > arg_stop.arg_s_stopmx[i].qty THEN rslt = 0 arg_msg = '第'+String(i)+'行,终止数量不能大于原计划数量' GOTO ext END IF NEXT SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF arg_stop.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_order_ml_stop","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_stop.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_stop.scid,ls_sccode + 'OS',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_order_ml_stop (scid, billid, billcode, billdate, billemp, opdate, opemp, relcode, dscrp, orderid, oriqty, stopqty, ifchange, ifstoppro) VALUES ( :arg_stop.scid, :ll_billid, :ls_billcode, :arg_stop.billdate, :arg_stop.billemp, getdate(), :arg_opemp, :arg_stop.relcode, :arg_stop.dscrp, :arg_stop.orderid, :arg_stop.oriqty, :arg_stop.stopqty, :arg_stop.ifchange, :arg_stop.ifstoppro) ; 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_order_ml_stop_mx (billid, printid, taskid, scid, orderid, taskcode, qty, cusid, taskmxid, taskscid, qty_stop) VALUES ( :ll_billid, :arg_stop.arg_s_stopmx[i].printid, :arg_stop.arg_s_stopmx[i].taskid, :arg_stop.scid, :arg_stop.arg_s_stopmx[i].orderid, :arg_stop.arg_s_stopmx[i].taskcode, :arg_stop.arg_s_stopmx[i].qty, :arg_stop.arg_s_stopmx[i].cusid, :arg_stop.arg_s_stopmx[i].taskmxid, :arg_stop.arg_s_stopmx[i].taskscid, :arg_stop.arg_s_stopmx[i].qty_stop); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_order_ml_stop SET billdate = :arg_stop.billdate, billemp = :arg_stop.billemp, moddate = getdate(), modemp = :arg_opemp, relcode = :arg_stop.relcode, dscrp = :arg_stop.dscrp, orderid = :arg_stop.orderid, oriqty = :arg_stop.oriqty, stopqty = :arg_stop.stopqty, ifchange = :arg_stop.ifchange, ifstoppro = :arg_stop.ifstoppro WHERE billid = :arg_stop.billid AND flag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_stop_mx WHERE billid = :arg_stop.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_order_ml_stop_mx (billid, printid, taskid, scid, orderid, taskcode, qty, cusid, taskmxid, taskscid, qty_stop) VALUES ( :arg_stop.billid, :arg_stop.arg_s_stopmx[i].printid, :arg_stop.arg_s_stopmx[i].taskid, :arg_stop.scid, :arg_stop.arg_s_stopmx[i].orderid, :arg_stop.arg_s_stopmx[i].taskcode, :arg_stop.arg_s_stopmx[i].qty, :arg_stop.arg_s_stopmx[i].cusid, :arg_stop.arg_s_stopmx[i].taskmxid, :arg_stop.arg_s_stopmx[i].taskscid, :arg_stop.arg_s_stopmx[i].qty_stop); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_stop.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_order_ml_stop WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 Int li_flag Long cnt IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再修改' GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据不是在待审状态,不可以删除' GOTO ext END IF DELETE FROM u_order_ml_stop WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText 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 add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml_stop SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_order_ml_stop.billid = :arg_billid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long ll_i Long ll_arr_cnt Decimal ld_stopqty,ld_stopqty_ori datastore ds_pro ds_pro = Create datastore ds_pro.DataObject = 'ds_order_ml_stop_proqty' ds_pro.SetTransObject(sqlca) uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca uo_order_ml uo_order uo_order = Create uo_order_ml IF uo_option_order_bh_use_yc = -1000 THEN rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以再审' GOTO ext END IF //更新审核标记 UPDATE u_order_ml_stop SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid And flag = 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 //更新计划数量,需求表,领料明细 Long ll_scid,ll_orderid Decimal ld_orderqty,ld_acmpqty,ld_stopqty_zl Long ll_ordertype Int li_ifchange,li_ifstoppro SELECT stopqty,scid,orderid,ifchange,ifstoppro INTO :ld_stopqty,:ll_scid,:ll_orderid,:li_ifchange,:li_ifstoppro FROM u_order_ml_stop Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败'+"~n"+sqlca.SQLErrText GOTO ext END IF SELECT orderqty,acmpqty,ordertype,stopqty INTO :ld_orderqty,:ld_acmpqty,:ll_ordertype,:ld_stopqty_zl FROM u_order_ml WHERE orderid = :ll_orderid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划信息失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_orderqty <= 0 THEN rslt = 0 arg_msg = '生产计划数为0,不允许再终止' GOTO ext END IF IF ld_orderqty - ld_acmpqty - ld_stopqty_zl < ld_stopqty THEN rslt = 0 arg_msg = '未进仓数只有:'+String(ld_orderqty - ld_acmpqty - ld_stopqty_zl,'#,##0.##########')+',不能终止:'+String(ld_stopqty,'#,##0.##########') GOTO ext END IF UPDATE u_order_ml SET stopqty = stopqty + :ld_stopqty WHERE orderid = :ll_orderid And scid = :ll_scid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '更新生产计划数,终止数失败'+"~n"+sqlca.SQLErrText GOTO ext END IF Decimal ld_rate ld_rate = (ld_orderqty - ld_stopqty - ld_stopqty_zl) / (ld_orderqty - ld_stopqty_zl) IF li_ifchange = 1 Or li_ifchange = 2 THEN IF uo_order.uof_mtrl_change(ll_scid,ll_orderid,ld_rate,0,li_ifchange,0,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '建立相关变更类型的生产指令单换料单失败,'+arg_msg GOTO ext END IF ELSE UPDATE u_OrderRqMtrl_scll SET truerqqty = truerqqty * :ld_rate WHERE orderid = :ll_orderid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新领料明细失败'+"~n"+sqlca.SQLErrText GOTO ext END IF END IF //UPDATE u_OrderRqMtrl_scll // SET truerqqty = truerqqty * :ld_rate // WHERE orderid = :ll_orderid // And scid = :ll_scid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // ARG_MSG = '更新领料明细失败'+"~n"+sqlca.SQLErrText // GOTO ext //END IF // //IF ll_ordertype <> 4 THEN // UPDATE u_OrderRqMtrl // SET truerqqty = truerqqty * :ld_rate, // RqQty = RqQty * :ld_rate // WHERE orderid = :ll_orderid // And scid = :ll_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // ARG_MSG = '更新需求表失败'+"~n"+sqlca.SQLErrText // GOTO ext // END IF //END IF IF ld_orderqty - ld_acmpqty - ld_stopqty_zl = ld_stopqty THEN UPDATE u_order_ml SET status = 3, Accomplishdate = getdate(), stopemp = :publ_operator WHERE orderid = :ll_orderid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF s_order_ml_stop_mx s_stop_mx[] IF getinfo(arg_billid,s_stop_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To ll_arr_cnt IF ll_ordertype <> 4 THEN UPDATE u_SaleTaskMx SET AssignQty = AssignQty - :s_stop_mx[ll_i].qty_stop WHERE scid = :s_stop_mx[ll_i].taskscid AND taskid = :s_stop_mx[ll_i].taskid AND printid = :s_stop_mx[ll_i].taskmxid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新订单已排产数失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_ordertype = 0 And uo_option_order_bh_use_yc = 1 THEN IF s_stop_mx[ll_i].taskid > 0 THEN SELECT stopqty INTO :ld_stopqty_ori FROM u_saletaskmx WHERE scid = :s_stop_mx[ll_i].taskscid AND taskid = :s_stop_mx[ll_i].taskid And printid = :s_stop_mx[ll_i].taskmxid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText GOTO ext END IF ld_stopqty = ld_stopqty_ori + s_stop_mx[ll_i].qty_stop IF uo_task.stopqty(s_stop_mx[ll_i].taskscid,s_stop_mx[ll_i].taskid,s_stop_mx[ll_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF ELSE Int li_plantype Long ll_wrkGrpid_scll Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode SELECT plantype, wrkGrpid, mtrlid, status, woodcode, pcode INTO :li_plantype, :ll_wrkGrpid_scll, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode FROM u_OrderRqMtrl WHERE scid = :s_stop_mx[ll_i].scid AND orderid = :s_stop_mx[ll_i].taskid And mxpkid = :s_stop_mx[ll_i].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_OrderRqMtrl SET consignedqty = consignedqty - :s_stop_mx[ll_i].qty_stop WHERE orderid = :s_stop_mx[ll_i].taskid AND wrkGrpid = :ll_wrkGrpid_scll AND mtrlid = :ll_mtrlid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND scid = :s_stop_mx[ll_i].scid And plantype = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产计划自制需求已排产数失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF UPDATE u_order_ml_mx SET qty = qty - :s_stop_mx[ll_i].qty_stop WHERE orderid = :s_stop_mx[ll_i].orderid AND scid = :s_stop_mx[ll_i].scid And taskid = :s_stop_mx[ll_i].taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产计划/生产指令单明细失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT String ls_procode,ls_proname Decimal ld_proqty_ori,ld_finishqty,ld_contaskqty,ld_stopqty_pro IF li_ifstoppro = 1 THEN ds_pro.Retrieve(ll_scid,ll_orderid) ld_rate = ld_stopqty / ld_orderqty FOR ll_i = 1 To ds_pro.RowCount() ls_procode = ds_pro.Object.u_orderrqwp_procode[ll_i] ls_proname = ds_pro.Object.u_orderrqwp_proname[ll_i] ld_proqty_ori = ds_pro.Object.proqty_ori[ll_i] ld_finishqty = ds_pro.Object.finishqty[ll_i] //已开计件单数 ld_contaskqty = ds_pro.Object.contaskqty[ll_i] //已开派工单数 ld_stopqty_pro = ds_pro.Object.u_orderrqwp_stopqty[ll_i] IF ld_finishqty > ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro) THEN rslt = 0 arg_msg = '['+ls_procode+']'+ls_proname+'已开计件单数:'+String(ld_finishqty,'#,##0.##########')+' 大于本次终止后的数:'+String(ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro),'#,##0.##########')+',不能终止' GOTO ext END IF IF ld_contaskqty > ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty) THEN rslt = 0 arg_msg = '['+ls_procode+']'+ls_proname+'已开派工单数:'+String(ld_contaskqty,'#,##0.##########')+' 大于本次终止后的数:'+String(ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro),'#,##0.##########')+',不能终止' GOTO ext END IF UPDATE u_orderrqwp SET proqty = proqty - :ld_proqty_ori * :ld_rate, stopqty = stopqty + :ld_proqty_ori * :ld_rate WHERE scid = :ll_scid AND orderid = :ll_orderid And procode = :ls_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产计划/生产指令单工序进度失败>>工序:['+ls_procode+']'+ls_proname+','+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT END IF ext: Destroy ds_pro IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_order Destroy uo_task RETURN rslt end function public function integer getinfo (long arg_billid, ref s_order_ml_stop_mx arg_ref_mx[], ref long arg_arr_cnt, 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 DECLARE cur_mx CURSOR FOR SELECT printid, taskid, scid, orderid, taskcode, qty, cusid, taskmxid, taskscid, qty_stop FROM u_order_ml_stop_mx Where billid = :arg_billid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].taskid, :arg_ref_mx[i].scid, :arg_ref_mx[i].orderid, :arg_ref_mx[i].taskcode, :arg_ref_mx[i].qty, :arg_ref_mx[i].cusid, :arg_ref_mx[i].taskmxid, :arg_ref_mx[i].taskscid, :arg_ref_mx[i].qty_stop; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].taskid, :arg_ref_mx[i].scid, :arg_ref_mx[i].orderid, :arg_ref_mx[i].taskcode, :arg_ref_mx[i].qty, :arg_ref_mx[i].cusid, :arg_ref_mx[i].taskmxid, :arg_ref_mx[i].taskscid, :arg_ref_mx[i].qty_stop; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_ml_stop_mx Where 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 arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer getinfo_order (long arg_scid, long arg_orderid, ref s_order_ml_mx arg_order_mx[], ref long arg_cnt_arr, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_orderid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF //用游标读取明细 DECLARE cur_ordermx CURSOR FOR SELECT u_order_ml_mx.taskid, u_order_ml_mx.taskmxid, u_order_ml_mx.qty, u_order_ml_mx.taskscid FROM u_order_ml_mx WHERE u_order_ml_mx.orderid = :arg_orderid AND u_order_ml_mx.scid = :arg_scid ; OPEN cur_ordermx; FETCH cur_ordermx INTO :arg_order_mx[i].taskid, :arg_order_mx[i].taskmxid, :arg_order_mx[i].qty, :arg_order_mx[i].taskscid; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_ordermx INTO :arg_order_mx[i].taskid, :arg_order_mx[i].taskmxid, :arg_order_mx[i].qty, :arg_order_mx[i].taskscid; LOOP CLOSE cur_ordermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_ml_mx WHERE orderid = :arg_orderid AND scid = :arg_scid ; 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 arg_cnt_arr = i - 1 ext: RETURN rslt end function on uo_order_ml_stop.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml_stop.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('074',str_optionvalue,arg_msg) uo_option_order_bh_use_yc = Long(str_optionvalue) end event