$PBExportHeader$uo_order_ml_rqmtrl_chng.sru forward global type uo_order_ml_rqmtrl_chng from nonvisualobject end type end forward global type uo_order_ml_rqmtrl_chng from nonvisualobject end type global uo_order_ml_rqmtrl_chng uo_order_ml_rqmtrl_chng type variables long uo_scid long uo_billid string uo_billcode end variables forward prototypes public function integer save (s_order_ml_rqmtrl_chng arg_s_main, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer audit (long arg_scid, long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_scid, long arg_billid, ref integer arg_flag, ref string arg_msg) public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer getinfo2 (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer uf_add_bom (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_order_ml_rqmtrl_chng arg_s_main, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i,it_mxbt2, ll_scllflag String ls_sccode,ls_billcode, ls_taskcode IF IsNull(arg_s_main.scid) THEN arg_s_main.scid = 0 IF IsNull(arg_s_main.billid) THEN arg_s_main.billid = 0 //IF IsNull(arg_s_main.relid) THEN arg_s_main.relid = 0 //IF IsNull(arg_s_main.relprintid) THEN arg_s_main.relprintid = 0 //IF IsNull(arg_s_main.mtrlid) THEN arg_s_main.mtrlid = 0 IF IsNull(arg_s_main.CreateBomFlag) THEN arg_s_main.CreateBomFlag = 0 IF IsNull(arg_s_main.relemp) THEN arg_s_main.relemp = '' IF IsNull(arg_s_main.dscrp) THEN arg_s_main.dscrp = '' IF arg_s_main.relemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF it_mxbt = UpperBound(arg_s_main.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确增料明细内容" GOTO ext END IF it_mxbt2 = UpperBound(arg_s_main.arg_s_mx2) IF it_mxbt2 <= 0 THEN rslt = 0 arg_msg = "没有正确销售订单明细内容" GOTO ext END IF FOR i = 1 TO it_mxbt2 IF arg_s_main.arg_s_mx2[i].relid = 0 & OR arg_s_main.arg_s_mx2[i].relprintid = 0 & OR arg_s_main.arg_s_mx2[i].mtrlid = 0 THEN rslt = 0 arg_msg = "行["+string(i)+"],请选择销售订单明细内容" GOTO ext END IF //查订单 SELECT taskcode INTO :ls_taskcode FROM u_saletask WHERE taskid = :arg_s_main.arg_s_mx2[i].relid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询销售订单明细内容信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //查订单 SELECT scllflag INTO :ll_scllflag FROM u_saletaskmx WHERE taskid = :arg_s_main.arg_s_mx2[i].relid AND printid = :arg_s_main.arg_s_mx2[i].relprintid AND mtrlid = :arg_s_main.arg_s_mx2[i].mtrlid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询销售订单明细内容信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_scllflag = 0 THEN rslt = 0 arg_msg = "行["+string(i)+"],销售订单["+ls_taskcode+"]未用料审" GOTO ext END IF //查物料 SELECT Count(*) INTO :cnt FROM u_mtrldef WHERE mtrlid = :arg_s_main.arg_s_mx2[i].mtrlid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询销售订单明细物料资料信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "行["+string(i)+"],销售订单明细物料资料不存在" GOTO ext END IF NEXT IF arg_s_main.billid = 0 THEN ll_billid = f_sys_scidentity(arg_s_main.scid,"u_OrderRqMtrl_chng","billid",arg_msg,FALSE,sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_main.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_main.scid,ls_sccode + 'OG',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_OrderRqMtrl_chng (scid, billid, billcode, billdate, relcode, relemp, dscrp, opdate, opemp, CreateBomFlag) VALUES (:arg_s_main.scid, :ll_billid, :ls_billcode, :arg_s_main.billdate, :arg_s_main.relcode, :arg_s_main.relemp, :arg_s_main.dscrp, getdate(), :arg_opemp, :arg_s_main.CreateBomFlag); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_scid = arg_s_main.scid uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_OrderRqMtrl_chng SET billdate = :arg_s_main.billdate, relemp = :arg_s_main.relemp, dscrp = :arg_s_main.dscrp, relcode = :arg_s_main.relcode, moddate = getdate(), modemp = :arg_opemp, CreateBomFlag = :arg_s_main.CreateBomFlag WHERE scid = :uo_scid AND billid = :uo_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_OrderRqMtrl_chngmx2 WHERE scid = :uo_scid AND billid = :uo_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_chngmx WHERE scid = :uo_scid AND billid = :uo_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //uo_billid = arg_s_main.billid END IF FOR i = 1 TO it_mxbt2 INSERT INTO u_OrderRqMtrl_chngmx2 (scid, billid, printid, mtrlid, relid, relprintid, relcode) VALUES (:uo_scid, :uo_billid, :arg_s_main.arg_s_mx2[i].printid, :arg_s_main.arg_s_mx2[i].mtrlid, :arg_s_main.arg_s_mx2[i].relid, :arg_s_main.arg_s_mx2[i].relprintid, :arg_s_main.arg_s_mx2[i].relcode); IF sqlca.SQLCode <> 0 THEN rslt = 0 uo_billid = arg_s_main.billid arg_msg = "因网络或其它原因导致插入销售订单明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT FOR i = 1 TO it_mxbt INSERT INTO u_OrderRqMtrl_chngmx (scid, billid, printid, mtrlid, truerqqty, rqqty, wrkgrpid, plantype, status, woodcode, pcode, plancode) VALUES (:uo_scid, :uo_billid, :arg_s_main.arg_s_mx[i].printid, :arg_s_main.arg_s_mx[i].mtrlid, :arg_s_main.arg_s_mx[i].truerqqty, :arg_s_main.arg_s_mx[i].rqqty, :arg_s_main.arg_s_mx[i].wrkgrpid, :arg_s_main.arg_s_mx[i].plantype, :arg_s_main.arg_s_mx[i].status, :arg_s_main.arg_s_mx[i].woodcode, :arg_s_main.arg_s_mx[i].pcode, :arg_s_main.arg_s_mx[i].plancode); IF sqlca.SQLCode <> 0 THEN rslt = 0 uo_billid = arg_s_main.billid arg_msg = "因网络或其它原因导致插入增料明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx 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 u_OrderRqMtrl_chngmx.scid, u_OrderRqMtrl_chngmx.billid, u_OrderRqMtrl_chngmx.printid, u_OrderRqMtrl_chngmx.mtrlid, u_OrderRqMtrl_chngmx.truerqqty, u_OrderRqMtrl_chngmx.rqqty, u_OrderRqMtrl_chngmx.wrkgrpid, u_OrderRqMtrl_chngmx.plantype, u_OrderRqMtrl_chngmx.status, u_OrderRqMtrl_chngmx.woodcode, u_OrderRqMtrl_chngmx.pcode, u_mtrldef.mtrlcode, u_OrderRqMtrl_chngmx.plancode FROM u_OrderRqMtrl_chngmx inner join u_mtrldef on u_OrderRqMtrl_chngmx.mtrlid = u_mtrldef.mtrlid WHERE u_OrderRqMtrl_chngmx.scid = :arg_scid and u_OrderRqMtrl_chngmx.billid = :arg_billid Order By u_OrderRqMtrl_chngmx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].truerqqty, :arg_ref_mx[i].rqqty, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].plantype, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].plancode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].truerqqty, :arg_ref_mx[i].rqqty, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].plantype, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].plancode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_OrderRqMtrl_chngmx Where scid = :arg_scid and 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 audit (long arg_scid, long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long i, j, k Int li_CreateBomFlag uo_order_ml_mrp uo_ml_mrp uo_ml_mrp = CREATE uo_order_ml_mrp uo_mtrl_structure uo_mtrl_str uo_mtrl_str = CREATE uo_mtrl_structure IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid, 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 //是否添加BOM SELECT CreateBomFlag INTO :li_CreateBomFlag FROM u_OrderRqMtrl_chng WHERE scid = :arg_scid AND billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Long ll_relid, ll_relprintid, ll_mtrlid DateTime serdate SELECT Top 1 getdate() INTO :serdate FROM u_user; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询服务器时间失败' rslt = 0 GOTO ext END IF s_order_ml_rqmtrl_chngmx s_mx[] Long ll_arr_cnt s_order_ml_rqmtrl_chngmx2 s_mx2[] Long ll_arr_cnt2 IF getinfo(arg_scid,arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF getinfo2(arg_scid,arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //订单运算,新增物料 Long ch_tree, ch, ch_scll s_order_ml_rqmtrl s_mtrl,s_mtrl_tree,s_mtrl_scll, s_null Dec lde_qty String ls_pfcode, ls_pfgroup Long ll_mxcnt, ll_printid s_structuremx s_mx_str[], s_null_str[] FOR j = 1 TO ll_arr_cnt2 ll_relid = s_mx2[j].relid ll_relprintid = s_mx2[j].relprintid ll_mtrlid = s_mx2[j].mtrlid //订单排产数量 SELECT orderqty INTO :lde_qty FROM u_saletaskmx WHERE taskid = :ll_relid AND printid = :ll_relprintid AND mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "订单["+s_mx2[j].relcode+"]"+"查询销售订单信息操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF s_mtrl = s_null s_mtrl_tree = s_null s_mtrl_scll = s_null ch_tree = 0 ch = 0 ch_scll = 0 FOR i = 1 TO ll_arr_cnt ch_tree++ s_mtrl_tree.scid[ch_tree] = arg_scid s_mtrl_tree.taskid[ch_tree] = ll_relid s_mtrl_tree.printid[ch_tree] = ll_relprintid s_mtrl_tree.mtrlid[ch_tree] = s_mx[i].mtrlid s_mtrl_tree.ifmainmtrlid[ch_tree] = 0 s_mtrl_tree.plantype[ch_tree] = s_mx[i].plantype s_mtrl_tree.qty[ch_tree] = s_mx[i].rqqty * lde_qty s_mtrl_tree.cmplqty[ch_tree] = s_mx[i].truerqqty * lde_qty s_mtrl_tree.mqty[ch_tree] = 0 s_mtrl_tree.bqty[ch_tree] = 0 s_mtrl_tree.wqty[ch_tree] = 0 s_mtrl_tree.pqty[ch_tree] = 0 s_mtrl_tree.wrkgrpid_scll[ch_tree] = s_mx[i].wrkgrpid s_mtrl_tree.lp[ch_tree] = 1 s_mtrl_tree.status[ch_tree] = s_mx[i].status s_mtrl_tree.woodcode[ch_tree] = s_mx[i].woodcode s_mtrl_tree.pcode[ch_tree] = s_mx[i].pcode s_mtrl_tree.pmtrlid[ch_tree] = ll_mtrlid s_mtrl_tree.ifchanged[ch_tree] = 0 s_mtrl_tree.pfgroup[ch_tree] = "" s_mtrl_tree.plancode[ch_tree] = s_mx[i].plancode IF s_mx[i].rqqty > 0 OR s_mx[i].truerqqty > 0 THEN ch++ s_mtrl.scid[ch] = arg_scid s_mtrl.taskid[ch] = ll_relid s_mtrl.printid[ch] = ll_relprintid s_mtrl.mtrlid[ch] = s_mx[i].mtrlid s_mtrl.plantype[ch] = s_mx[i].plantype s_mtrl.qty[ch] = s_mx[i].rqqty * lde_qty s_mtrl.cmplqty[ch] = s_mx[i].truerqqty * lde_qty s_mtrl.mqty[ch] = 0 s_mtrl.bqty[ch] = 0 s_mtrl.wqty[ch] = 0 s_mtrl.pqty[ch] = 0 s_mtrl.wrkgrpid_scll[ch] = s_mx[i].wrkgrpid s_mtrl.status[ch] = s_mx[i].status s_mtrl.woodcode[ch] = s_mx[i].woodcode s_mtrl.pcode[ch] = s_mx[i].pcode s_mtrl.ifchanged[ch] = 0 s_mtrl.plancode[ch] = s_mx[i].plancode END IF IF s_mx[i].rqqty > 0 THEN //领料 ch_scll++ s_mtrl_scll.scid[ch_scll] = arg_scid s_mtrl_scll.taskid[ch_scll] = ll_relid s_mtrl_scll.printid[ch_scll] = ll_relprintid s_mtrl_scll.mtrlid[ch_scll] = s_mx[i].mtrlid s_mtrl_scll.qty[ch_scll] = s_mx[i].rqqty * lde_qty s_mtrl_scll.cmplqty[ch_scll] = s_mx[i].truerqqty * lde_qty s_mtrl_scll.status[ch_scll] = s_mx[i].status s_mtrl_scll.woodcode[ch_scll] = s_mx[i].woodcode s_mtrl_scll.pcode[ch_scll] = s_mx[i].pcode s_mtrl_scll.ifchanged[ch_scll] = 0 s_mtrl_scll.plancode[ch_scll] = s_mx[i].plancode END IF NEXT IF uo_ml_mrp.uof_add_rqmtrl_more(s_mtrl,FALSE,arg_msg) = 0 THEN rslt = 0 arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存物料需求表失败,'+arg_msg GOTO ext END IF IF uo_ml_mrp.uof_add_rqmtrl_tree_more(s_mtrl_tree,FALSE,arg_msg) = 0 THEN rslt = 0 arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存物料需求结构表失败,'+arg_msg GOTO ext END IF IF uo_ml_mrp.uof_add_rqmtrl_scll_more(s_mtrl_scll,FALSE,arg_msg) = 0 THEN rslt = 0 arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存用料明细表失败,'+arg_msg GOTO ext END IF NEXT //将物料增加到清单中 IF li_CreateBomFlag = 1 THEN FOR j = 1 TO ll_arr_cnt2 ll_relid = s_mx2[j].relid ll_relprintid = s_mx2[j].relprintid ll_mtrlid = s_mx2[j].mtrlid // lde_qty = //如果有相同产品,只执行第一次 FOR k = 1 TO j - 1 IF s_mx2[k].mtrlid = s_mx2[j].mtrlid THEN GOTO nxtmtrl END IF NEXT // SELECT saleqty // INTO :lde_qty // FROM u_saletaskmx // WHERE taskid = :ll_relid // AND printid = :ll_relprintid // AND mtrlid = :ll_mtrlid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致查询销售订单信息操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // // IF lde_qty = 0 THEN // rslt = 0 // arg_msg = "销售订单明细行["+String(j)+"],数量为0" // GOTO ext // END IF uo_mtrl_str.ul_mtrlid = ll_mtrlid ls_pfcode = "组装" ls_pfgroup = "" ll_mxcnt = 0 s_mx_str = s_null_str ll_printid = uo_mtrl_str.uof_get_maxprintid(ll_mtrlid,ls_pfcode) FOR i = 1 TO ll_arr_cnt //检查是否存在该物料 IF uo_mtrl_str.uof_chk_prdpf(ll_mtrlid,ls_pfcode,ls_pfgroup,s_mx[i].mtrlid) = 0 THEN CONTINUE //如果有,跳出 END IF IF uo_mtrl_str.uof_chk_rand(s_mx[i].mtrlid) = 0 THEN rslt = 0 arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"],发现环,不能添加清单" GOTO ext END IF ll_mxcnt++ ll_printid++ s_mx_str[ll_mxcnt].mtrlid = s_mx[i].mtrlid s_mx_str[ll_mxcnt].sonscale = s_mx[i].rqqty s_mx_str[ll_mxcnt].sonloss = 0 s_mx_str[ll_mxcnt].sondecloss = 0 s_mx_str[ll_mxcnt].sonahead = 0 s_mx_str[ll_mxcnt].dscrp = '' s_mx_str[ll_mxcnt].updownrate = 0 s_mx_str[ll_mxcnt].ifreputate = 0 s_mx_str[ll_mxcnt].ifover = 0 s_mx_str[ll_mxcnt].pfgroup = '' s_mx_str[ll_mxcnt].pfgroupqty = 0 s_mx_str[ll_mxcnt].pfgroupmode = '' s_mx_str[ll_mxcnt].promode = '' s_mx_str[ll_mxcnt].printid = ll_printid s_mx_str[ll_mxcnt].wrkgrpid = s_mx[i].wrkgrpid s_mx_str[ll_mxcnt].status = s_mx[i].status s_mx_str[ll_mxcnt].pcode = s_mx[i].pcode s_mx_str[ll_mxcnt].woodcode = s_mx[i].woodcode NEXT IF ll_mxcnt > 0 THEN IF uo_mtrl_str.uof_prdpf_add(ll_mtrlid, ls_pfcode, s_mx_str, FALSE, arg_msg) = 0 THEN rslt = 0 arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"]~r~n"+arg_msg GOTO ext END IF END IF nxtmtrl: NEXT END IF //更新审核标记 UPDATE u_OrderRqMtrl_chng SET auditingrep = :arg_opemp, auditingdate = getdate(), flag = 1 WHERE scid = :arg_scid AND 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 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_ml_mrp DESTROY uo_mtrl_str RETURN rslt end function public function integer p_getflag (long arg_scid, long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_OrderRqMtrl_chng WHERE scid = :arg_scid and 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 del (long arg_scid, 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_scid, 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_OrderRqMtrl_chng WHERE scid = :arg_scid and billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_chngmx2 WHERE scid = :arg_scid and billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据销售订单明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_chngmx WHERE scid = :arg_scid and 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_scid, 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_scid, 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_OrderRqMtrl_chng SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE scid = :arg_scid and 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 updatebegin (long arg_scid, 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_scid,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 uo_scid = arg_scid uo_billid = arg_billid ext: RETURN rslt end function public function integer getinfo2 (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx2 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 //用游标读取明细2 DECLARE cur_mx CURSOR FOR SELECT scid, billid, printid, mtrlid, relid, relprintid, relcode FROM u_OrderRqMtrl_chngmx2 WHERE scid = :arg_scid and billid = :arg_billid Order By printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].relcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].relcode; LOOP CLOSE cur_mx; //检验明细2是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_OrderRqMtrl_chngmx2 Where scid = :arg_scid and billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细2数量" GOTO ext END IF IF i <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细2" GOTO ext END IF arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer uf_add_bom (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long i, j, k Int li_CreateBomFlag uo_mtrl_structure uo_mtrl_str uo_mtrl_str = CREATE uo_mtrl_structure IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid, 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 //是否添加BOM SELECT CreateBomFlag INTO :li_CreateBomFlag FROM u_OrderRqMtrl_chng WHERE scid = :arg_scid AND billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF if li_CreateBomFlag = 1 then arg_msg = '单据已经添加清单' rslt = 0 GOTO ext end if Long ll_relid, ll_relprintid, ll_mtrlid s_order_ml_rqmtrl_chngmx s_mx[] Long ll_arr_cnt s_order_ml_rqmtrl_chngmx2 s_mx2[] Long ll_arr_cnt2 IF getinfo(arg_scid,arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF getinfo2(arg_scid,arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //订单运算,新增物料 Long ch_tree, ch, ch_scll s_order_ml_rqmtrl s_mtrl,s_mtrl_tree,s_mtrl_scll, s_null Dec lde_qty String ls_pfcode, ls_pfgroup Long ll_mxcnt, ll_printid s_structuremx s_mx_str[], s_null_str[] //将物料增加到清单中 IF li_CreateBomFlag = 0 THEN FOR j = 1 TO ll_arr_cnt2 ll_relid = s_mx2[j].relid ll_relprintid = s_mx2[j].relprintid ll_mtrlid = s_mx2[j].mtrlid // lde_qty = //如果有相同产品,只执行第一次 FOR k = 1 TO j - 1 IF s_mx2[k].mtrlid = s_mx2[j].mtrlid THEN GOTO nxtmtrl END IF NEXT uo_mtrl_str.ul_mtrlid = ll_mtrlid ls_pfcode = "组装" ls_pfgroup = "" ll_mxcnt = 0 s_mx_str = s_null_str ll_printid = uo_mtrl_str.uof_get_maxprintid(ll_mtrlid,ls_pfcode) FOR i = 1 TO ll_arr_cnt //检查是否存在该物料 IF uo_mtrl_str.uof_chk_prdpf(ll_mtrlid,ls_pfcode,ls_pfgroup,s_mx[i].mtrlid) = 0 THEN CONTINUE //如果有,跳出 END IF IF uo_mtrl_str.uof_chk_rand(s_mx[i].mtrlid) = 0 THEN rslt = 0 arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"],发现环,不能添加清单" GOTO ext END IF ll_mxcnt++ ll_printid++ s_mx_str[ll_mxcnt].mtrlid = s_mx[i].mtrlid s_mx_str[ll_mxcnt].sonscale = s_mx[i].rqqty s_mx_str[ll_mxcnt].sonloss = 0 s_mx_str[ll_mxcnt].sondecloss = 0 s_mx_str[ll_mxcnt].sonahead = 0 s_mx_str[ll_mxcnt].dscrp = '' s_mx_str[ll_mxcnt].updownrate = 0 s_mx_str[ll_mxcnt].ifreputate = 0 s_mx_str[ll_mxcnt].ifover = 0 s_mx_str[ll_mxcnt].pfgroup = '' s_mx_str[ll_mxcnt].pfgroupqty = 0 s_mx_str[ll_mxcnt].pfgroupmode = '' s_mx_str[ll_mxcnt].promode = '' s_mx_str[ll_mxcnt].printid = ll_printid s_mx_str[ll_mxcnt].wrkgrpid = s_mx[i].wrkgrpid s_mx_str[ll_mxcnt].status = s_mx[i].status s_mx_str[ll_mxcnt].pcode = s_mx[i].pcode s_mx_str[ll_mxcnt].woodcode = s_mx[i].woodcode NEXT IF ll_mxcnt > 0 THEN IF uo_mtrl_str.uof_prdpf_add(ll_mtrlid, ls_pfcode, s_mx_str, FALSE, arg_msg) = 0 THEN rslt = 0 arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"]~r~n"+arg_msg GOTO ext END IF END IF nxtmtrl: NEXT END IF update u_OrderRqMtrl_chng set CreateBomFlag = 1 WHERE scid = :arg_scid AND billid = :arg_billid; 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 DESTROY uo_mtrl_str RETURN rslt end function on uo_order_ml_rqmtrl_chng.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml_rqmtrl_chng.destroy TriggerEvent( this, "destructor" ) call super::destroy end on