$PBExportHeader$uo_order_ml_mrp.sru forward global type uo_order_ml_mrp from nonvisualobject end type end forward global type uo_order_ml_mrp from nonvisualobject end type global uo_order_ml_mrp uo_order_ml_mrp type variables Long deep,deep_scll Boolean ifzl_mtrl_not_useqty,ifzl_mtrl_pwx_not_useqty,ifwx_mtrl_not_useqty,if_pqty_not_zl,ifpack_mtrl_not_useqty Boolean if_rqwfjg_useqty,if_rqbuy_useqty Boolean if_qty_dscrp = False Boolean if_uof_add_rqmtrl_del_old = True Int if_otherrq_mrpaudit = 1 Int uo_option_packpro2_pf_pack2_useifover Int uo_option_ifpackpro2_if_no_pack2 Int uo_option_produce_dec Long ins_produce_wrkgrpid_bj,ins_wrkGrpid_scll_bj int uo_option_scll_ifchanged end variables forward prototypes public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_check_dstrqty (long arg_scid, long arg_orderid, ref string arg_msg) public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_get_qty (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg) public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_get_other_rqqty (long arg_scid, long arg_orderid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, integer arg_ifdate, datetime arg_date, ref string arg_msg) public function integer uof_get_rqmtrl (long arg_scid, long arg_orderid, long arg_porderid, ref s_order_ml_rqmtrl arg_ref_s_rqmtrl, ref string arg_msg) public function integer uof_pfcode_check (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, ref string arg_msg) private function integer uof_get_max_advancetime (long arg_mtrlid, string arg_pfcode, ref decimal arg_ref_advancetime, ref string arg_msg) public function integer uof_get_prdpf_dytype (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref integer arg_ref_dytype, ref string arg_msg) public function integer uof_get_prdpf_replace (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref s_prdpf_replace arg_ref_s_replace, ref string arg_msg) public subroutine uof_cmpl_rqmtrl_dy_mx (long arg_begin_i, integer arg_dy, ref s_order_ml_rqmtrl arg_s_mtrl, s_prdpf_replace arg_pf_dy) public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_pfcode, decimal arg_qty, long arg_wrkgrpid_scll, datetime arg_rqdate, string arg_gydscrp, string arg_pfklmode, string arg_pfgroup, string arg_pfgroupmode, decimal arg_advancetime, decimal arg_sonloss, decimal arg_sondecloss, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_get_prdpf_sonloss (string arg_sonlossstr, decimal arg_qty, ref decimal arg_sonloss) public function integer uof_get_qty_dscrp (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_ref_dscrp, ref string arg_msg) private function integer uof_get_max_advancetime2 (long arg_mtrlid, string arg_status, ref decimal arg_ref_advancetime, ref string arg_msg) public function integer uof_cmpl_rqmtrl_fp (long arg_scid, long arg_orderid, integer arg_if_allowuse, integer arg_ifdate, datetime arg_enddate, s_order_ml_rqmtrl arg_s_mtrl, ref s_mtrlware_assign_plan arg_ref_s_assign_plan, ref string arg_msg) public function integer uof_cmpl_rqmtrl_dy (integer arg_ifdate, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_aps_update_date (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_cmpl_rqmtrl (long arg_lp, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_cmpl_rqmtrl_re (long arg_lp, integer arg_plantype, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg) public function integer uof_saletaskmx_pf_add (s_saletaskmx_pf arg_s_stpf, ref string arg_msg, boolean arg_ifcommit) public function integer uof_saletaskmx_pf_del (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_rqmtrl_scll_find (long arg_p, long arg_p_mtrlid, integer arg_ifpackpro, string arg_status, string arg_woodcode, string arg_pcode, s_order_ml_rqmtrl arg_s_mtrl, ref s_order_ml_rqmtrl_scll arg_s_mtrl_scll, long arg_e, ref string arg_msg) end prototypes public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存领料明细 Int rslt = 1 Long ll_i,cnt,i Long ll_mtrlid,ll_porderid,ll_mxid,ll_mtrlid_p Long ll_scid,ll_orderid String ls_mtrlcode Decimal ld_orderqty_zl,ld_orderqty_p Int li_ordertype,li_ifpackpro,li_ifpack,li_ordertype_mtrldef,li_mtrlorigin_mtrldef,li_ifselforder_mtrldef Decimal ld_rate,ld_zlmxqty,ld_rqmxqty Int li_outscllflag,li_iffp String ls_status,ls_woodcode,ls_pcode Decimal ld_assignqty_order,ld_fpqty_zl,ld_assignqty_update Int li_iffg,li_ifauto s_order_ml_rqmtrl_scll arg_s_mtrl_scll ll_scid = arg_s_mtrl.scid[1] ll_orderid = arg_s_mtrl.orderid[1] uo_mtrlware_assign uo_scll_fp uo_scll_fp = Create uo_mtrlware_assign uo_scll_fp.commit_transaction = sqlca datastore ds_order_mtrl_fp_2_zl ds_order_mtrl_fp_2_zl = Create datastore ds_order_mtrl_fp_2_zl.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp' ds_order_mtrl_fp_2_zl.SetTransObject(sqlca) SELECT u_order_ml.mtrlid, u_order_ml.orderqty, u_order_ml.ordertype, u_order_ml.outscllflag, u_mtrldef.ifpackpro, u_mtrldef.mtrlorigin, u_mtrldef.ordertype, u_order_ml.status_mode, u_order_ml.woodcode, u_order_ml.pcode, u_order_ml.iffg, u_order_ml.ifauto, u_mtrldef.ifselforder INTO :ll_mtrlid, :ld_orderqty_zl, :li_ordertype, :li_outscllflag, :li_ifpackpro, :li_mtrlorigin_mtrldef, :li_ordertype_mtrldef, :ls_status, :ls_woodcode, :ls_pcode, :li_iffg, :li_ifauto, :li_ifselforder_mtrldef FROM u_order_ml,u_mtrldef WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.orderid = :ll_orderid And u_order_ml.scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_ordermtrl_wrk_mtrl Where scid = :ll_scid And orderid = :ll_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除指令工组足料提示表工组资料失败,操作取消'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //不是领料 IF li_outscllflag = 0 THEN rslt = 1 GOTO ext END IF //非包件产品,指令单分离的主生产计划 //IF li_ifpackpro = 0 And li_ordertype_mtrldef = 1 And li_ordertype <> 4 THEN // rslt = 1 // GOTO ext //END IF //包件产品,不使用包件清单的主生产计划 //IF li_ifpackpro = 1 And li_ifmrppackpf = 0 And li_ordertype <> 4 THEN // rslt = 1 // GOTO ext //END IF IF li_mtrlorigin_mtrldef = 2 THEN arg_s_mtrl_scll.mtrlid[1] = ll_mtrlid arg_s_mtrl_scll.wrkgrpid[1] = ins_wrkGrpid_scll_bj arg_s_mtrl_scll.status[1] = ls_status arg_s_mtrl_scll.woodcode[1] = ls_woodcode arg_s_mtrl_scll.pcode[1] = ls_pcode arg_s_mtrl_scll.truerqqty[1] = ld_orderqty_zl ELSE IF uof_add_rqmtrl_scll_find(1,ll_mtrlid,li_ifpackpro,ls_status,ls_woodcode,ls_pcode,arg_s_mtrl,arg_s_mtrl_scll,UpperBound(arg_s_mtrl.mtrlid),arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //yyx 090409 指令分数量排产 IF li_ordertype = 4 And Not (li_iffg = 1 And li_ifauto = 1 ) THEN ll_porderid = arg_s_mtrl.porderid[1] SELECT qty,taskmxid INTO :ld_zlmxqty,:ll_mxid FROM u_order_ml_mx WHERE scid = :ll_scid AND orderid = :ll_orderid And taskid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令明细排产数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ld_zlmxqty = 0 THEN arg_msg = '错误的指令明细排产数' rslt = 0 GOTO ext END IF SELECT mtrlid,orderqty INTO :ll_mtrlid_p,:ld_orderqty_p FROM u_order_ml WHERE scid = :ll_scid And orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令所属主生产计划物料id失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT truerqqty INTO :ld_rqmxqty FROM u_orderrqmtrl WHERE scid = :ll_scid And mxpkid = :ll_mxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询上级计划需求明细需求数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ld_rqmxqty = 0 THEN arg_msg = '错误的上级计划需求明细需求数' rslt = 0 GOTO ext END IF IF li_ordertype_mtrldef = 1 And ll_mtrlid_p = ll_mtrlid THEN ld_rate = Round(ld_orderqty_zl/ld_orderqty_p,10) ELSE ld_rate = Round(ld_zlmxqty/ld_rqmxqty,10) END IF ELSE ld_rate = 1 END IF //yyx 090409 FOR ll_i = 1 To UpperBound(arg_s_mtrl_scll.mtrlid) IF arg_s_mtrl_scll.truerqqty[ll_i] = 0 THEN CONTINUE SELECT mtrlcode,ifpack,iffp INTO :ls_mtrlcode,:li_ifpack,:li_iffp FROM u_mtrldef Where mtrlid = :arg_s_mtrl_scll.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpackpro = 1 And li_ifpack = 1 THEN CONTINUE IF li_ifpackpro = 2 And li_ifselforder_mtrldef = 3 THEN CONTINUE UPDATE u_OrderRqMtrl_scll SET truerqqty = truerqqty + round(:arg_s_mtrl_scll.truerqqty[ll_i] * :ld_rate,:uo_option_produce_dec) WHERE orderid = :ll_orderid AND scid = :ll_scid AND mtrlid = :arg_s_mtrl_scll.mtrlid[ll_i] AND status = :arg_s_mtrl_scll.status[ll_i] AND woodcode = :arg_s_mtrl_scll.woodcode[ll_i] AND pcode = :arg_s_mtrl_scll.pcode[ll_i] And wrkgrpid = :arg_s_mtrl_scll.wrkgrpid[ll_i]; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_OrderRqMtrl_scll (scid, orderid, mtrlid, status, woodcode, pcode, truerqqty, DstrQty, wrkGrpid) VALUES (:ll_scid, :ll_orderid, :arg_s_mtrl_scll.mtrlid[ll_i], :arg_s_mtrl_scll.status[ll_i], :arg_s_mtrl_scll.woodcode[ll_i], :arg_s_mtrl_scll.pcode[ll_i], round(:arg_s_mtrl_scll.truerqqty[ll_i] * :ld_rate,:sys_option_produce_dec), 0, :arg_s_mtrl_scll.wrkgrpid[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',建立生产计划物料领料明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '物料:'+ls_mtrlcode+',更新物料用料明细表失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //工组是否足料表 cnt = 0 SELECT count(*) INTO :cnt FROM u_ordermtrl_wrk_mtrl WHERE scid = :ll_scid AND orderid = :ll_orderid And wrkgrpid = :arg_s_mtrl_scll.wrkgrpid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令工组足料提示表是否存在工组id:'+String(arg_s_mtrl_scll.wrkgrpid[ll_i])+' 失败,操作取消'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN INSERT INTO u_ordermtrl_wrk_mtrl(scid,orderid,wrkGrpid) Values(:ll_scid,:ll_orderid,:arg_s_mtrl_scll.wrkgrpid[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '增加指令工组足料提示表工组id:'+String(arg_s_mtrl_scll.wrkgrpid[ll_i])+' 失败,操作取消'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF //分配 IF ll_porderid > 0 And li_iffp = 1 THEN ds_order_mtrl_fp_2_zl.Retrieve(ll_scid,ll_porderid,arg_s_mtrl_scll.mtrlid[ll_i],arg_s_mtrl_scll.status[ll_i],arg_s_mtrl_scll.woodcode[ll_i],arg_s_mtrl_scll.pcode[ll_i],arg_s_mtrl_scll.wrkgrpid[ll_i]) ld_assignqty_order = arg_s_mtrl_scll.truerqqty[ll_i] * ld_rate FOR i = 1 To ds_order_mtrl_fp_2_zl.RowCount() IF ld_assignqty_order > 0 THEN ld_fpqty_zl = ds_order_mtrl_fp_2_zl.Object.notfpqty[i] IF ld_fpqty_zl > ld_assignqty_order THEN ld_assignqty_update = ld_assignqty_order ld_assignqty_order = 0 ELSE ld_assignqty_update = ld_fpqty_zl ld_assignqty_order = ld_assignqty_order - ld_fpqty_zl END IF IF uo_scll_fp.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,arg_s_mtrl_scll.mtrlid[ll_i],& arg_s_mtrl_scll.wrkgrpid[ll_i],arg_s_mtrl_scll.status[ll_i],arg_s_mtrl_scll.woodcode[ll_i],& arg_s_mtrl_scll.pcode[ll_i],ld_assignqty_update,& 0,0,0,arg_msg,False) = 0 THEN arg_msg = '物料:'+ls_mtrlcode+',建立指令单用料分配数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_scll_fp Destroy ds_order_mtrl_fp_2_zl RETURN rslt end function public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存需求明细 Int rslt = 1 Long ll_i,ll_mtrlid_order Int li_ordertype_order_ml,li_ifwforder Int li_ordertype String ls_mtrlcode Long cnt Int li_ifselforder,li_statusflag,li_mtrlorigin IF if_uof_add_rqmtrl_del_old THEN DELETE FROM u_orderRqMtrl WHERE orderid = :arg_s_mtrl.orderid[1] And scid = :arg_s_mtrl.scid[1]; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除原用料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT mtrlid INTO :ll_mtrlid_order FROM u_order_ml WHERE orderid = :arg_s_mtrl.orderid[1] And scid = :arg_s_mtrl.scid[1]; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除主生产计划物料id失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid) SELECT mtrlcode,ifselforder,statusflag,ordertype,mtrlorigin INTO :ls_mtrlcode,:li_ifselforder,:li_statusflag,:li_ordertype,:li_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_s_mtrl.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //个性包件不加入需求表 IF arg_s_mtrl.ifpack[ll_i] = 2 And arg_s_mtrl.mtrlid[ll_i] <> ll_mtrlid_order THEN CONTINUE //检查组合配置包件产品 IF arg_s_mtrl.ifcfg[ll_i] = 1 THEN //子件 IF arg_s_mtrl.ifpackpro[ll_i] <> 3 THEN CONTINUE END IF IF arg_s_mtrl.ifcfg[ll_i] = 0 THEN IF arg_s_mtrl.ifpackpro[ll_i] = 3 THEN CONTINUE END IF IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 THEN //更新计划开始日期 IF sys_option_ifuse_ordersdate = 1 THEN UPDATE u_order_ml SET orderdate = :arg_s_mtrl.edate[1] WHERE orderid = :arg_s_mtrl.orderid[1] And scid = :arg_s_mtrl.scid[1]; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新主生产计划的计划开始日期失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF arg_s_mtrl.ifpackpro[ll_i] = 1 And li_ordertype = 0 THEN CONTINUE //通用包件产品指令单合并 IF arg_s_mtrl.ifpackpro[ll_i] = 2 And li_ordertype = 0 THEN CONTINUE //个性包件产品指令单合并 IF arg_s_mtrl.ifmainmtrlid[ll_i] = 0 And arg_s_mtrl.ifpack[ll_i] = 2 THEN CONTINUE //个性包件 //yyx20101012 --外协计划 SELECT ordertype,ifwforder INTO :li_ordertype_order_ml,:li_ifwforder FROM u_order_ml WHERE orderid = :arg_s_mtrl.orderid[ll_i] And scid = :arg_s_mtrl.scid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询计划类型失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ordertype = 0 And not (li_ordertype_order_ml = 3 or li_ifwforder = 1) THEN CONTINUE // END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_s_mtrl.produce_scid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询清单物料生产分部资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',清单物料生产分部未定义,请检查' rslt = 0 GOTO ext END IF IF arg_s_mtrl.plantype[ll_i] = 0 THEN IF li_ifselforder = 0 And arg_s_mtrl.ifpackpro[ll_i] <> 3 And arg_s_mtrl.ifpackpro[ll_i] <> 4 and ll_i <> 1 THEN CONTINUE IF arg_s_mtrl.scid[ll_i] = arg_s_mtrl.produce_scid[ll_i] And & arg_s_mtrl.produce_wrkgrpid[ll_i] = 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择生产车间' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_wkp Where wrkgrpid = :arg_s_mtrl.produce_wrkgrpid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询车间资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',车间资料不存在或重复' rslt = 0 GOTO ext END IF IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 And li_statusflag = 2 THEN ELSE IF arg_s_mtrl.pfcode[ll_i] = '' THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择物料清单' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_s_mtrl.mtrlid[ll_i] And pfcode = :arg_s_mtrl.pfcode[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料:'+ls_mtrlcode+' 物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料:'+ls_mtrlcode+' 物料清单不存在或重复' rslt = 0 GOTO ext END IF END IF ELSE arg_s_mtrl.produce_wrkgrpid[ll_i] = 0 IF arg_s_mtrl.plantype[ll_i] = 2 Or arg_s_mtrl.plantype[ll_i] = 6 THEN IF arg_s_mtrl.scid[ll_i] <> arg_s_mtrl.produce_scid[ll_i] THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择正确的分部' rslt = 0 GOTO ext END IF END IF END IF Decimal ld_RqQty,ld_truerqqty,ld_scllqty ld_truerqqty = arg_s_mtrl.cmplqty[ll_i] ld_scllqty = arg_s_mtrl.scllqty[ll_i] IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 THEN IF li_ordertype = 1 Or li_ordertype_order_ml = 3 or li_ifwforder = 1 THEN ld_RqQty = 0 ELSE ld_RqQty = arg_s_mtrl.qty[ll_i] END IF ELSE ld_RqQty = arg_s_mtrl.qty[ll_i] END IF UPDATE u_orderRqMtrl SET RqQty = RqQty + :ld_RqQty, truerqqty = truerqqty + :ld_truerqqty, scllqty = scllqty + :ld_scllqty WHERE scid = :arg_s_mtrl.scid[ll_i] AND OrderID = :arg_s_mtrl.OrderID[ll_i] AND MtrlID = :arg_s_mtrl.MtrlID[ll_i] AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND status = :arg_s_mtrl.status[ll_i] AND woodcode = :arg_s_mtrl.woodcode[ll_i] AND pcode = :arg_s_mtrl.pcode[ll_i] AND plantype = :arg_s_mtrl.plantype[ll_i] And produce_wrkgrpid = :arg_s_mtrl.produce_wrkgrpid[ll_i]; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN Long ll_mxpkid IF arg_s_mtrl.plantype[ll_i] = 0 THEN ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,True,id_sqlca) IF ll_mxpkid <= 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',取id失败,'+arg_msg rslt = 0 GOTO ext END IF ELSE ll_mxpkid = 0 END IF INSERT INTO u_orderRqMtrl (scid, orderid, mtrlid, rqqty, truerqqty, plantype, mqty, wmqty, bqty, wqty, pqty, pqty2, rqwfjgqty, rqbuyqty2, otherrqqty, otherrqqty_wx, otherrqqty_sale, rqdate, edate, wrkgrpid, produce_scid, produce_wrkgrpid, pfcode, status, woodcode, pcode, gydscrp, pfklmode, mxpkid, scllqty) VALUES (:arg_s_mtrl.scid[ll_i], :arg_s_mtrl.orderid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :ld_RqQty, :ld_truerqqty, :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.wmqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i], :arg_s_mtrl.pqty2[ll_i], :arg_s_mtrl.rqwfjgqty[ll_i], :arg_s_mtrl.rqbuyqty[ll_i], :arg_s_mtrl.otherrqqty[ll_i], :arg_s_mtrl.otherrqqty_wx[ll_i], :arg_s_mtrl.otherrqqty_sale[ll_i], :arg_s_mtrl.sdate[ll_i], :arg_s_mtrl.edate[ll_i], :arg_s_mtrl.wrkgrpid_scll[ll_i], :arg_s_mtrl.produce_scid[ll_i], :arg_s_mtrl.produce_wrkgrpid[ll_i], :arg_s_mtrl.pfcode[ll_i], :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i], :arg_s_mtrl.gydscrp[ll_i], :arg_s_mtrl.pfklmode[ll_i], :ll_mxpkid, :arg_s_mtrl.scllqty[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',建立物料需求表失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',更新物料需求表失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_check_dstrqty (long arg_scid, long arg_orderid, ref string arg_msg);//检查已领数 Int rslt = 1 Int li_status,li_scllflag,li_scllsecflag SELECT status,scllflag,scllsecflag INTO :li_status,:li_scllflag,:li_scllsecflag FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划状态失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_status <> 1 THEN arg_msg = '生产计划不是在进行状态,不能计算用料' rslt = 0 GOTO ext END IF IF sys_option_order_ml_scll_secaudit = 0 THEN IF li_scllflag = 1 THEN arg_msg = '生产计划已用料审核,不能计算用料' rslt = 0 GOTO ext END IF ELSE IF li_scllsecflag = 1 THEN arg_msg = '生产计划已用料终审,不能计算用料' rslt = 0 GOTO ext END IF END IF //检查已领料数 Decimal ld_DstrQty SELECT sum(DstrQty) INTO :ld_DstrQty FROM u_OrderRqMtrl WHERE u_orderrqmtrl.orderid = :arg_orderid AND u_OrderRqMtrl.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询计划已领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ld_DstrQty > 0 THEN arg_msg = '计划已有领料数,不能计算' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存运算结果树 Int rslt = 1 Long ll_i DELETE FROM u_orderRqMtrl_tree WHERE orderid = :arg_s_mtrl.orderid[1] AND scid = :arg_s_mtrl.scid[1]; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除物料需求结构失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid) IF arg_s_mtrl.qty[ll_i] = 0 AND arg_s_mtrl.cmplqty[ll_i] <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料有需求数,无领料数,请检查' rslt = 0 GOTO ext END IF IF ll_i > 1 AND arg_s_mtrl.wrkgrpid_scll[ll_i] = 0 AND arg_s_mtrl.ifpack[ll_i] = 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料没有领用工组,请检查相关物料清单' rslt = 0 GOTO ext END IF //if isnull(arg_s_mtrl.addcmplqty[ll_i]) then arg_s_mtrl.addcmplqty[ll_i] = 0 //standardrqqty 作为对上一级该生产的标准领料数记录, 即和毛需求数(rqqty)、原毛需求数(rqqty_ori)同义 lhd 20140919 //替换为: arg_s_mtrl.standardrqqty[ll_i] = arg_s_mtrl.qty[ll_i] arg_s_mtrl.standardrqqty[ll_i] = arg_s_mtrl.qty[ll_i] INSERT INTO u_orderRqMtrl_tree (scid, orderid, mtrlid, rqqty, truerqqty, plantype, mqty, wmqty, bqty, wqty, pqty, pqty2, rqwfjgqty, rqbuyqty, otherrqqty, otherrqqty_wx, otherrqqty_sale, ckwareqty, rqdate, edate, wrkgrpid, produce_scid, produce_wrkgrpid, pfcode, lp, printid, status, woodcode, pcode, ifmainmtrlid, samerqqty, ifchanged, pmtrlid, gydscrp, pfklmode, pfgroup, pfgroupmode, ifcfg, standardrqqty, sonloss, sondecloss, scllloss, sclldecloss, scllqtytype, scllqty, if_follow, lasthour, Sonscale, pdscrp, addcmplqty) VALUES (:arg_s_mtrl.scid[ll_i], :arg_s_mtrl.orderid[ll_i], :arg_s_mtrl.mtrlid[ll_i], :arg_s_mtrl.qty[ll_i], :arg_s_mtrl.cmplqty[ll_i], :arg_s_mtrl.plantype[ll_i], :arg_s_mtrl.mqty[ll_i], :arg_s_mtrl.wmqty[ll_i], :arg_s_mtrl.bqty[ll_i], :arg_s_mtrl.wqty[ll_i], :arg_s_mtrl.pqty[ll_i], :arg_s_mtrl.pqty2[ll_i], :arg_s_mtrl.rqwfjgqty[ll_i], :arg_s_mtrl.rqbuyqty[ll_i], :arg_s_mtrl.otherrqqty[ll_i], :arg_s_mtrl.otherrqqty_wx[ll_i], :arg_s_mtrl.otherrqqty_sale[ll_i], :arg_s_mtrl.ckwareqty[ll_i], :arg_s_mtrl.sdate[ll_i], :arg_s_mtrl.edate[ll_i], :arg_s_mtrl.wrkgrpid_scll[ll_i], :arg_s_mtrl.produce_scid[ll_i], :arg_s_mtrl.produce_wrkgrpid[ll_i], :arg_s_mtrl.pfcode[ll_i], :arg_s_mtrl.lp[ll_i], :arg_s_mtrl.printid[ll_i], :arg_s_mtrl.status[ll_i], :arg_s_mtrl.woodcode[ll_i], :arg_s_mtrl.pcode[ll_i], :arg_s_mtrl.ifmainmtrlid[ll_i], :arg_s_mtrl.samerqqty[ll_i], :arg_s_mtrl.ifchanged[ll_i], :arg_s_mtrl.pmtrlid[ll_i], :arg_s_mtrl.gydscrp[ll_i], :arg_s_mtrl.pfklmode[ll_i], :arg_s_mtrl.pfgroup[ll_i], :arg_s_mtrl.pfgroupmode[ll_i], :arg_s_mtrl.ifcfg[ll_i], :arg_s_mtrl.standardrqqty[ll_i], :arg_s_mtrl.sonloss[ll_i], :arg_s_mtrl.sondecloss[ll_i], :arg_s_mtrl.scllloss[ll_i], :arg_s_mtrl.sclldecloss[ll_i], :arg_s_mtrl.scllqtytype[ll_i], :arg_s_mtrl.scllqty[ll_i], :arg_s_mtrl.if_follow[ll_i], :arg_s_mtrl.lasthour[ll_i], :arg_s_mtrl.Sonscale[ll_i], :arg_s_mtrl.pdscrp[ll_i], :arg_s_mtrl.addcmplqty[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',建立物料需求结构表失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_get_qty (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg);//取相关数量 Int rslt = 1 Decimal ld_qty String ls_mtrlcode Int li_ordertype Int li_iffp //int li_mrparg //SELECT mtrlcode,ordertype,mrparg // INTO :ls_mtrlcode,:li_ordertype,:li_mrparg // FROM u_mtrldef // Where mtrlid = :arg_mtrlid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询物料编码失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF CHOOSE CASE arg_type CASE 1 //采购未进仓数 SELECT isnull(sum(case when u_mtrldef.iffp = 0 then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg) else case when (u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)) <= u_buytaskmx.qty - u_buytaskmx.fpqty then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg) else u_buytaskmx.qty - u_buytaskmx.fpqty END END),0) INTO :ld_qty FROM u_buytaskmx,u_buytask,u_mtrldef WHERE u_buytaskmx.mtrlid = u_mtrldef.mtrlid AND u_buytaskmx.scid = :arg_scid AND u_buytaskmx.mtrlid = :arg_mtrlid AND u_buytaskmx.status = :arg_status AND u_buytaskmx.woodcode = :arg_woodcode AND u_buytaskmx.pcode = :arg_pcode AND u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.taskid = u_buytask.taskid AND u_buytaskmx.stopflag = 0 AND u_buytask.status = 1 AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_buytaskmx.requiredate <= :arg_enddate ) AND ( case when u_mtrldef.iffp = 0 then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg) else case when (u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)) <= u_buytaskmx.qty - u_buytaskmx.fpqty then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg) ELSE u_buytaskmx.qty - u_buytaskmx.fpqty END END ) > 0; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 采购未进仓数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 2 //生产未进仓数 SELECT isnull(sum(case when u_mtrldef.iffp = 0 then u_Order_ml.orderqty - u_Order_ml.acmpqty else case when (u_Order_ml.orderqty - u_Order_ml.acmpqty) <= u_Order_ml.orderqty - u_Order_ml.fpqty then u_Order_ml.orderqty - u_Order_ml.acmpqty else u_Order_ml.orderqty - u_Order_ml.fpqty END END ),0) INTO :ld_qty FROM u_Order_ml,u_mtrldef WHERE u_Order_ml.mtrlid = u_mtrldef.mtrlid AND u_Order_ml.mtrlid = :arg_mtrlid AND u_Order_ml.scid = :arg_scid AND u_Order_ml.status_mode = :arg_status AND u_Order_ml.woodcode = :arg_woodcode AND u_Order_ml.pcode = :arg_pcode AND u_Order_ml.status = 1 AND u_Order_ml.orderid <> :arg_orderid and u_Order_ml.inwareflag = 1 // AND ( u_mtrldef.ordertype = 0 OR u_mtrldef.ordertype = 1 AND u_Order_ml.ordertype = 4 ) AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_Order_ml.requiredate <= :arg_enddate ) AND (case when u_mtrldef.iffp = 0 then u_Order_ml.orderqty - u_Order_ml.acmpqty else case when (u_Order_ml.orderqty - u_Order_ml.acmpqty) <= u_Order_ml.orderqty - u_Order_ml.fpqty then u_Order_ml.orderqty - u_Order_ml.acmpqty ELSE u_Order_ml.orderqty - u_Order_ml.fpqty END END ) > 0; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未进仓数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 3 //外协未进仓数 SELECT isnull(sum(case when u_mtrldef.iffp = 0 then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg) else case when (u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)) <= u_order_wfjgMx.qty - u_order_wfjgMx.fpqty then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg) else u_order_wfjgMx.qty - u_order_wfjgMx.fpqty END END ),0) INTO :ld_qty FROM u_order_wfjgMx,u_order_wfjg,u_mtrldef WHERE u_order_wfjgMx.mtrlid = u_mtrldef.mtrlid AND u_order_wfjgMx.scid = :arg_scid AND u_order_wfjgMx.mtrlid = :arg_mtrlid AND u_order_wfjgMx.status = :arg_status AND u_order_wfjgMx.woodcode = :arg_woodcode AND u_order_wfjgMx.pcode = :arg_pcode AND u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID AND u_order_wfjg.status = 1 AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_order_wfjgMx.requiredate <= :arg_enddate ) AND (case when u_mtrldef.iffp = 0 then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg) else case when (u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)) <= u_order_wfjgMx.qty - u_order_wfjgMx.fpqty then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg) ELSE u_order_wfjgMx.qty - u_order_wfjgMx.fpqty END END ) > 0; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 外协未进仓数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 4 //库存数 SELECT isnull(sum(u_Mtrlware.noallocqty - case when u_mtrldef.iffp = 1 then u_Mtrlware.allocqty * u_mtrldef.iffp else u_Mtrlware.noauditingqty end),0) INTO :ld_qty FROM u_Mtrlware,u_storage,u_mtrldef WHERE u_Mtrlware.storageid = u_storage.storageid AND u_Mtrlware.mtrlid = u_mtrldef.mtrlid AND u_storage.ifmrp = 1 AND u_Mtrlware.scid = :arg_scid AND u_Mtrlware.mtrlid = :arg_mtrlid AND u_Mtrlware.status = :arg_status AND u_Mtrlware.woodcode = :arg_woodcode And u_Mtrlware.pcode = :arg_pcode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 库存数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 5 //生产计划未排指令当生产未进仓数 SELECT isnull(sum(u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty),0) INTO :ld_qty FROM u_Order_ml,u_OrderRqMtrl WHERE u_Order_ml.scid = u_OrderRqMtrl.scid AND u_Order_ml.orderid = u_OrderRqMtrl.orderid AND u_OrderRqMtrl.mtrlid = :arg_mtrlid AND u_OrderRqMtrl.scid = :arg_scid AND u_OrderRqMtrl.status = :arg_status AND u_OrderRqMtrl.woodcode = :arg_woodcode AND u_OrderRqMtrl.pcode = :arg_pcode AND u_OrderRqMtrl.plantype = 0 AND u_Order_ml.status = 1 AND u_Order_ml.orderid <> :arg_orderid AND ( u_Order_ml.ordertype <> 4 ) And ( :arg_ifdate = 0 Or :arg_ifdate = 1 And u_OrderRqMtrl.rqdate <= :arg_enddate ); IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未排指令当生产未进仓数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 6 //外协库存数 SELECT isnull(sum(ow_wfjgware.noallocqty),0) INTO :ld_qty FROM ow_wfjgware WHERE ow_wfjgware.scid = :arg_scid AND ow_wfjgware.mtrlid = :arg_mtrlid AND ow_wfjgware.status = :arg_status AND ow_wfjgware.woodcode = :arg_woodcode And ow_wfjgware.pcode = :arg_pcode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 外协库存数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 7 //外协需求数 SELECT isnull(sum(u_order_wfjgMx_out.qty - u_order_wfjgMx_out.DstrQty),0) INTO :ld_qty FROM u_order_wfjgMx_out,u_order_wfjg WHERE u_order_wfjgMx_out.wfjgID = u_order_wfjg.wfjgID AND u_order_wfjgMx_out.scid = u_order_wfjg.scid AND u_order_wfjg.status = 1 AND u_order_wfjgMx_out.scid = :arg_scid AND u_order_wfjgMx_out.mtrlid = :arg_mtrlid AND u_order_wfjgMx_out.status = :arg_status AND u_order_wfjgMx_out.woodcode = :arg_woodcode AND u_order_wfjgMx_out.pcode = :arg_pcode And u_order_wfjgMx_out.qty - u_order_wfjgMx_out.DstrQty > 0; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 外协需求数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END CHOOSE IF IsNull(ld_qty) THEN ld_qty = 0 ext: arg_ref_qty = ld_qty RETURN rslt end function public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg);//删除领料明细 Int rslt = 1 Long i,cnt Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid String ls_status,ls_woodcode,ls_pcode Decimal ld_fpqty uo_mtrlware_assign uo_scll_del_cancel_fp uo_scll_del_cancel_fp = Create uo_mtrlware_assign uo_scll_del_cancel_fp.commit_transaction = sqlca datastore ds_zl_fp_del ds_zl_fp_del = Create datastore ds_zl_fp_del.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp_cancel' ds_zl_fp_del.SetTransObject(sqlca) cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderRqMtrl_scll,u_mtrldef WHERE ( u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid ) and ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND ( u_OrderRqMtrl_scll.OrderID = :arg_orderid ) AND ( u_OrderRqMtrl_scll.fpqty > 0 ) AND ( u_mtrldef.iffp = 1 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令领料明细是否有已分配数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //取消分配 IF cnt > 0 THEN ds_zl_fp_del.Retrieve(arg_scid,arg_orderid) FOR i = 1 To ds_zl_fp_del.RowCount() ll_scid = ds_zl_fp_del.Object.scid[i] ll_orderid = ds_zl_fp_del.Object.OrderID[i] ll_mtrlid = ds_zl_fp_del.Object.mtrlid[i] ll_wrkgrpid = ds_zl_fp_del.Object.wrkgrpid[i] ls_status = ds_zl_fp_del.Object.status[i] ls_woodcode = ds_zl_fp_del.Object.woodcode[i] ls_pcode = ds_zl_fp_del.Object.pcode[i] ld_fpqty = ds_zl_fp_del.Object.fpqty[i] IF uo_scll_del_cancel_fp.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,& ls_status,ls_woodcode,ls_pcode,0 - ld_fpqty,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF DELETE FROM u_OrderRqMtrl_scll WHERE orderid = :arg_orderid And scid = :arg_scid; 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_scll_del_cancel_fp Destroy ds_zl_fp_del RETURN rslt end function public function integer uof_get_other_rqqty (long arg_scid, long arg_orderid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, integer arg_ifdate, datetime arg_date, ref string arg_msg);//取其它计划需求数 Int rslt = 1 Decimal ld_qty String ls_mtrlcode //SELECT mtrlcode INTO :ls_mtrlcode // FROM u_mtrldef // Where mtrlid = :arg_mtrlid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询物料编码失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF SELECT isnull(sum(case when u_mtrldef.iffp = 0 then u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.DstrQty else u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.fpqty END ),0) INTO :ld_qty FROM u_OrderRqMtrl,u_order_ml,u_mtrldef WHERE u_OrderRqMtrl.orderid = u_order_ml.orderid AND u_OrderRqMtrl.scid = u_order_ml.scid AND u_OrderRqMtrl.mtrlid = u_mtrldef.mtrlid AND u_order_ml.status = 1 AND (:if_otherrq_mrpaudit = 1 AND (:arg_plantype = 0 AND u_order_ml.scllflag = 1 OR :arg_plantype <> 0 AND u_order_ml.scllsecflag = 1) OR :if_otherrq_mrpaudit = 0 ) AND u_OrderRqMtrl.scid = :arg_scid AND u_OrderRqMtrl.orderid <> :arg_orderid AND u_OrderRqMtrl.mtrlid = :arg_mtrlid AND u_OrderRqMtrl.status = :arg_status AND u_OrderRqMtrl.woodcode = :arg_woodcode AND u_OrderRqMtrl.pcode = :arg_pcode AND (case when u_mtrldef.iffp = 0 then u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.DstrQty else u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.fpqty END ) > 0 ; // and ( :arg_ifdate = 0 or :arg_ifdate = 1 and u_OrderRqMtrl.rqdate <= :arg_date ); IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 其它计划需求数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_qty) THEN ld_qty = 0 ext: arg_ref_qty = ld_qty RETURN rslt end function public function integer uof_get_rqmtrl (long arg_scid, long arg_orderid, long arg_porderid, ref s_order_ml_rqmtrl arg_ref_s_rqmtrl, ref string arg_msg);//重新读取运算明细 Int rslt = 1 Long cnt Long ll_mtrlid,ll_wrkgrpid,ll_pmtrlid String ls_status,ls_woodcode,ls_pcode Decimal ld_rqqty,ld_cmplqty,ld_scllqty Int li_ifcfg,li_ifpackpro,li_ifpack Int li_ifselforder,li_mtrlorigin String ls_mtrlcode Long ll_lp IF uo_option_scll_ifchanged = -1000 THEN arg_msg = '选项:[356]车间指令单领料明细带出运算结果中"修改"的用料,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF DECLARE cur_ml CURSOR FOR SELECT u_orderrqmtrl_tree.mtrlid, u_orderrqmtrl_tree.wrkgrpid, u_orderrqmtrl_tree.status, u_orderrqmtrl_tree.woodcode, u_orderrqmtrl_tree.pcode, u_orderrqmtrl_tree.rqqty, u_orderrqmtrl_tree.truerqqty, u_orderrqmtrl_tree.scllqty, u_orderrqmtrl_tree.pmtrlid, u_orderrqmtrl_tree.ifcfg, u_orderrqmtrl_tree.lp, u_mtrldef.ifpackpro, u_mtrldef.ifpack, u_mtrldef.mtrlcode, u_mtrldef.ifselforder, u_mtrldef.mtrlorigin FROM u_orderrqmtrl_tree INNER join u_mtrldef on u_orderrqmtrl_tree.mtrlid = u_mtrldef.mtrlid WHERE u_orderrqmtrl_tree.scid = :arg_scid AND u_orderrqmtrl_tree.orderid = :arg_porderid AND (u_orderrqmtrl_tree.ifchanged = 0 OR :uo_option_scll_ifchanged = 1) Order By u_orderrqmtrl_tree.printid; OPEN cur_ml; FETCH cur_ml INTO :ll_mtrlid,:ll_wrkgrpid, :ls_status,:ls_woodcode,:ls_pcode,:ld_rqqty, :ld_cmplqty,:ld_scllqty,:ll_pmtrlid,:li_ifcfg, :ll_lp,:li_ifpackpro,:li_ifpack,:ls_mtrlcode,:li_ifselforder,:li_mtrlorigin; DO WHILE sqlca.SQLCode = 0 IF ld_rqqty > 0 THEN cnt++ arg_ref_s_rqmtrl.scid[cnt] = arg_scid arg_ref_s_rqmtrl.orderid[cnt] = arg_orderid arg_ref_s_rqmtrl.porderid[cnt] = arg_porderid arg_ref_s_rqmtrl.mtrlid[cnt] = ll_mtrlid arg_ref_s_rqmtrl.wrkgrpid_scll[cnt] = ll_wrkgrpid arg_ref_s_rqmtrl.status[cnt] = ls_status arg_ref_s_rqmtrl.woodcode[cnt] = ls_woodcode arg_ref_s_rqmtrl.pcode[cnt] = ls_pcode arg_ref_s_rqmtrl.qty[cnt] = ld_rqqty arg_ref_s_rqmtrl.scllqty[cnt] = ld_scllqty arg_ref_s_rqmtrl.cmplqty[cnt] = ld_cmplqty arg_ref_s_rqmtrl.pmtrlid[cnt] = ll_pmtrlid arg_ref_s_rqmtrl.ifcfg[cnt] = li_ifcfg arg_ref_s_rqmtrl.lp[cnt] = ll_lp arg_ref_s_rqmtrl.ifpackpro[cnt] = li_ifpackpro arg_ref_s_rqmtrl.ifpack[cnt] = li_ifpack arg_ref_s_rqmtrl.mtrlcode[cnt] = ls_mtrlcode arg_ref_s_rqmtrl.ifselforder[cnt] = li_ifselforder arg_ref_s_rqmtrl.mtrlorigin[cnt] = li_mtrlorigin END IF FETCH cur_ml INTO :ll_mtrlid,:ll_wrkgrpid, :ls_status,:ls_woodcode,:ls_pcode,:ld_rqqty, :ld_cmplqty,:ld_scllqty,:ll_pmtrlid,:li_ifcfg, :ll_lp,:li_ifpackpro,:li_ifpack,:ls_mtrlcode,:li_ifselforder,:li_mtrlorigin; LOOP CLOSE cur_ml; IF cnt = 0 THEN arg_msg = '查询上级计划需求明细失败,上级计划可能没有运算结果,请检查' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_pfcode_check (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, ref string arg_msg);//检查清单审核标记 Int rslt = 1 Int li_pfflag SELECT flag INTO :li_pfflag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+arg_mtrlcode+'物料清单:'+arg_pfcode+' 审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_pfflag = 0 THEN arg_msg = '物料:'+arg_mtrlcode+'物料清单:'+arg_pfcode+' 未审核,不能计算' rslt = 0 GOTO ext END IF ext: RETURN rslt end function private function integer uof_get_max_advancetime (long arg_mtrlid, string arg_pfcode, ref decimal arg_ref_advancetime, ref string arg_msg);//取下级最大提前期 Int rslt = 1 Long cnt SELECT count(*) INTO :cnt FROM u_prdpf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料是否已设置下级用料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_ref_advancetime = 0 ELSE SELECT max(advancetime) INTO :arg_ref_advancetime FROM u_prdpf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料下级用料最大提前期失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: RETURN rslt end function public function integer uof_get_prdpf_dytype (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref integer arg_ref_dytype, ref string arg_msg);//查询代用类型 Int rslt = 1 SELECT dytype INTO :arg_ref_dytype FROM u_prdpf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND pfgroup = :arg_pfgroup AND SonMtrlid = :arg_SonMtrlid AND wrkgrpid = :arg_wrkgrpid And sonpfcode = :arg_sonpfcode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料代用标记失败,上级清单:'+arg_pfcode+',部件名称:'+arg_pfgroup+',下级清单:'+arg_sonpfcode+','+String(sqlca.SQLCode)+','+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN arg_ref_dytype = 0 END IF ext: RETURN rslt end function public function integer uof_get_prdpf_replace (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref s_prdpf_replace arg_ref_s_replace, ref string arg_msg);//取代用明细 Int rslt = 1 Long m Long ll_dymtrlid Decimal ld_sonscale,ld_sonloss,ld_scllloss String ls_dscrp,ls_status,ls_woodcode,ls_pcode String ls_mtrlcode,ls_mtrlname,ls_mtrlmode,ls_unit,ls_mtrltype Int li_mtrlorigin,li_mtrlprp,li_ifselforder,li_ifpack,li_ifpackpro Int li_ordertype,li_ifpackpz Long ll_produce_scid,ll_produce_wrkgrpid DECLARE cur_dy CURSOR FOR SELECT u_prdpf_dymx.dymtrlid, u_prdpf_dymx.sonscale, u_prdpf_dymx.sonloss, u_prdpf_dymx.scllloss, u_prdpf_dymx.dscrp, u_prdpf_dymx.status, u_prdpf_dymx.woodcode, u_prdpf_dymx.pcode, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_mtrldef.unit, u_mtrldef.mtrltype, u_mtrldef.mtrlorigin, u_mtrldef.mtrlprp, u_mtrldef.ifselforder, u_mtrldef.ifpack, u_mtrldef.ifpackpro, u_mtrldef.ordertype, u_mtrldef.ifpackpz, u_mtrldef.scid, u_mtrldef.dftwrkgrpid FROM u_prdpf_dymx,u_mtrldef WHERE u_prdpf_dymx.dymtrlid = u_mtrldef.mtrlid AND u_prdpf_dymx.mtrlid = :arg_mtrlid AND u_prdpf_dymx.pfcode = :arg_pfcode AND u_prdpf_dymx.pfgroup = :arg_pfgroup AND u_prdpf_dymx.SonMtrlid = :arg_SonMtrlid AND u_prdpf_dymx.wrkgrpid = :arg_wrkgrpid AND u_prdpf_dymx.sonpfcode = :arg_sonpfcode Order By printid; OPEN cur_dy; FETCH cur_dy INTO :ll_dymtrlid, :ld_sonscale,:ld_sonloss,:ld_scllloss, :ls_dscrp,:ls_status,:ls_woodcode,:ls_pcode, :ls_mtrlcode,:ls_mtrlname,:ls_mtrlmode,:ls_unit,:ls_mtrltype, :li_mtrlorigin,:li_mtrlprp,:li_ifselforder,:li_ifpack,:li_ifpackpro, :li_ordertype,:li_ifpackpz,:ll_produce_scid,:ll_produce_wrkgrpid; DO WHILE sqlca.SQLCode = 0 m++ arg_ref_s_replace.dymtrlid[m] = ll_dymtrlid arg_ref_s_replace.sonscale[m] = ld_sonscale arg_ref_s_replace.sonloss[m] = ld_sonloss arg_ref_s_replace.scllloss[m] = ld_scllloss arg_ref_s_replace.dscrp[m] = ls_dscrp arg_ref_s_replace.status[m] = ls_status arg_ref_s_replace.woodcode[m] = ls_woodcode arg_ref_s_replace.pcode[m] = ls_pcode arg_ref_s_replace.mtrlcode[m] = ls_mtrlcode arg_ref_s_replace.mtrlname[m] = ls_mtrlname arg_ref_s_replace.mtrlmode[m] = ls_mtrlmode arg_ref_s_replace.unit[m] = ls_unit arg_ref_s_replace.mtrlorigin[m] = li_mtrlorigin arg_ref_s_replace.mtrltype[m] = ls_mtrltype arg_ref_s_replace.mtrlprp[m] = li_mtrlprp arg_ref_s_replace.ifselforder[m] = li_ifselforder arg_ref_s_replace.ifpack[m] = li_ifpack arg_ref_s_replace.ifpackpro[m] = li_ifpackpro arg_ref_s_replace.ordertype[m] = li_ordertype arg_ref_s_replace.ifpackpz[m] = li_ifpackpz arg_ref_s_replace.produce_scid[m] = ll_produce_scid arg_ref_s_replace.produce_wrkgrpid[m] = ll_produce_wrkgrpid FETCH cur_dy INTO :ll_dymtrlid, :ld_sonscale,:ld_sonloss,:ld_scllloss, :ls_dscrp,:ls_status,:ls_woodcode,:ls_pcode, :ls_mtrlcode,:ls_mtrlname,:ls_mtrlmode,:ls_unit,:ls_mtrltype, :li_mtrlorigin,:li_mtrlprp,:li_ifselforder,:li_ifpack,:li_ifpackpro, :li_ordertype,:li_ifpackpz,:ll_produce_scid,:ll_produce_wrkgrpid; LOOP CLOSE cur_dy; RETURN rslt end function public subroutine uof_cmpl_rqmtrl_dy_mx (long arg_begin_i, integer arg_dy, ref s_order_ml_rqmtrl arg_s_mtrl, s_prdpf_replace arg_pf_dy);//加代用明细入数组 Long ll_arr_dy,ll_arr_rq Long ll_arr_add,ll_arr_max Long i,k ll_arr_dy = UpperBound(arg_pf_dy.dymtrlid) ll_arr_rq = UpperBound(arg_s_mtrl.mtrlid) IF arg_dy = 0 THEN ll_arr_add = ll_arr_dy - 1 ELSE ll_arr_add = ll_arr_dy END IF ll_arr_max = ll_arr_rq + ll_arr_add FOR i = ll_arr_max TO arg_begin_i + 1 STEP -1 IF i > arg_begin_i + 1 THEN arg_s_mtrl.scid[i] = arg_s_mtrl.scid[i - ll_arr_add] arg_s_mtrl.orderid[i] = arg_s_mtrl.orderid[i - ll_arr_add] arg_s_mtrl.mtrlid[i] = arg_s_mtrl.mtrlid[i - ll_arr_add] arg_s_mtrl.status[i] = arg_s_mtrl.status[i - ll_arr_add] arg_s_mtrl.woodcode[i] = arg_s_mtrl.woodcode[i - ll_arr_add] arg_s_mtrl.pcode[i] = arg_s_mtrl.pcode[i - ll_arr_add] arg_s_mtrl.pfcode[i] = arg_s_mtrl.pfcode[i - ll_arr_add] arg_s_mtrl.qty[i] = arg_s_mtrl.qty[i - ll_arr_add] arg_s_mtrl.cmplqty[i] = arg_s_mtrl.cmplqty[i - ll_arr_add] arg_s_mtrl.plantype[i] = arg_s_mtrl.plantype[i - ll_arr_add] arg_s_mtrl.mqty[i] = arg_s_mtrl.mqty[i - ll_arr_add] arg_s_mtrl.bqty[i] = arg_s_mtrl.bqty[i - ll_arr_add] arg_s_mtrl.wqty[i] = arg_s_mtrl.wqty[i - ll_arr_add] arg_s_mtrl.pqty[i] = arg_s_mtrl.pqty[i - ll_arr_add] arg_s_mtrl.otherrqqty[i] = arg_s_mtrl.otherrqqty[i - ll_arr_add] arg_s_mtrl.samerqqty[i] = arg_s_mtrl.samerqqty[i - ll_arr_add] arg_s_mtrl.sdate[i] = arg_s_mtrl.sdate[i - ll_arr_add] arg_s_mtrl.edate[i] = arg_s_mtrl.edate[i - ll_arr_add] arg_s_mtrl.mtrlcode[i] = arg_s_mtrl.mtrlcode[i - ll_arr_add] arg_s_mtrl.mtrlname[i] = arg_s_mtrl.mtrlname[i - ll_arr_add] arg_s_mtrl.mtrlmode[i] = arg_s_mtrl.mtrlmode[i - ll_arr_add] arg_s_mtrl.mtrltype[i] = arg_s_mtrl.mtrltype[i - ll_arr_add] arg_s_mtrl.unit[i] = arg_s_mtrl.unit[i - ll_arr_add] arg_s_mtrl.Mtrlorigin[i] = arg_s_mtrl.Mtrlorigin[i - ll_arr_add] arg_s_mtrl.mtrlprp[i] = arg_s_mtrl.mtrlprp[i - ll_arr_add] arg_s_mtrl.ifselforder[i] = arg_s_mtrl.ifselforder[i - ll_arr_add] arg_s_mtrl.gydscrp[i] = arg_s_mtrl.gydscrp[i - ll_arr_add] arg_s_mtrl.pfklmode[i] = arg_s_mtrl.pfklmode[i - ll_arr_add] arg_s_mtrl.pfgroup[i] = arg_s_mtrl.pfgroup[i - ll_arr_add] arg_s_mtrl.pfgroupmode[i] = arg_s_mtrl.pfgroupmode[i - ll_arr_add] arg_s_mtrl.ifcfg[i] = arg_s_mtrl.ifcfg[i - ll_arr_add] arg_s_mtrl.ifpack[i] = arg_s_mtrl.ifpack[i - ll_arr_add] arg_s_mtrl.ifpackpro[i] = arg_s_mtrl.ifpackpro[i - ll_arr_add] arg_s_mtrl.mtrlordertype[i] = arg_s_mtrl.mtrlordertype[i - ll_arr_add] arg_s_mtrl.ifpackpz[i] = arg_s_mtrl.ifpackpz[i - ll_arr_add] arg_s_mtrl.dytype[i] = arg_s_mtrl.dytype[i - ll_arr_add] arg_s_mtrl.ppfcode[i] = arg_s_mtrl.ppfcode[i - ll_arr_add] arg_s_mtrl.pcmplqty[i] = arg_s_mtrl.pcmplqty[i - ll_arr_add] arg_s_mtrl.produce_scid[i] = arg_s_mtrl.produce_scid[i - ll_arr_add] arg_s_mtrl.produce_wrkgrpid[i] = arg_s_mtrl.produce_wrkgrpid[i - ll_arr_add] arg_s_mtrl.wrkGrpid_scll[i] = arg_s_mtrl.wrkGrpid_scll[i - ll_arr_add] arg_s_mtrl.lp[i] = arg_s_mtrl.lp[i - ll_arr_add] arg_s_mtrl.ifmainmtrlid[i] = arg_s_mtrl.ifmainmtrlid[i - ll_arr_add] arg_s_mtrl.pmtrlid[i] = arg_s_mtrl.pmtrlid[i - ll_arr_add] arg_s_mtrl.ifchanged[i] = arg_s_mtrl.ifchanged[i - ll_arr_add] ELSE arg_s_mtrl.scid[i] = arg_s_mtrl.scid[arg_begin_i] arg_s_mtrl.orderid[i] = arg_s_mtrl.orderid[arg_begin_i] arg_s_mtrl.mtrlid[i] = arg_s_mtrl.mtrlid[arg_begin_i] arg_s_mtrl.status[i] = arg_s_mtrl.status[arg_begin_i] arg_s_mtrl.woodcode[i] = arg_s_mtrl.woodcode[arg_begin_i] arg_s_mtrl.pcode[i] = arg_s_mtrl.pcode[arg_begin_i] arg_s_mtrl.pfcode[i] = arg_s_mtrl.pfcode[arg_begin_i] arg_s_mtrl.qty[i] = arg_s_mtrl.qty[arg_begin_i] arg_s_mtrl.cmplqty[i] = arg_s_mtrl.cmplqty[arg_begin_i] arg_s_mtrl.plantype[i] = arg_s_mtrl.plantype[arg_begin_i] arg_s_mtrl.mqty[i] = arg_s_mtrl.mqty[arg_begin_i] arg_s_mtrl.bqty[i] = arg_s_mtrl.bqty[arg_begin_i] arg_s_mtrl.wqty[i] = arg_s_mtrl.wqty[arg_begin_i] arg_s_mtrl.pqty[i] = arg_s_mtrl.pqty[arg_begin_i] arg_s_mtrl.otherrqqty[i] = arg_s_mtrl.otherrqqty[arg_begin_i] arg_s_mtrl.samerqqty[i] = arg_s_mtrl.samerqqty[arg_begin_i] arg_s_mtrl.sdate[i] = arg_s_mtrl.sdate[arg_begin_i] arg_s_mtrl.edate[i] = arg_s_mtrl.edate[arg_begin_i] arg_s_mtrl.mtrlcode[i] = arg_s_mtrl.mtrlcode[arg_begin_i] arg_s_mtrl.mtrlname[i] = arg_s_mtrl.mtrlname[arg_begin_i] arg_s_mtrl.mtrlmode[i] = arg_s_mtrl.mtrlmode[arg_begin_i] arg_s_mtrl.mtrltype[i] = arg_s_mtrl.mtrltype[arg_begin_i] arg_s_mtrl.unit[i] = arg_s_mtrl.unit[arg_begin_i] arg_s_mtrl.Mtrlorigin[i] = arg_s_mtrl.Mtrlorigin[arg_begin_i] arg_s_mtrl.mtrlprp[i] = arg_s_mtrl.mtrlprp[arg_begin_i] arg_s_mtrl.ifselforder[i] = arg_s_mtrl.ifselforder[arg_begin_i] arg_s_mtrl.gydscrp[i] = arg_s_mtrl.gydscrp[arg_begin_i] arg_s_mtrl.pfklmode[i] = arg_s_mtrl.pfklmode[arg_begin_i] arg_s_mtrl.pfgroup[i] = arg_s_mtrl.pfgroup[arg_begin_i] arg_s_mtrl.pfgroupmode[i] = arg_s_mtrl.pfgroupmode[arg_begin_i] arg_s_mtrl.ifcfg[i] = arg_s_mtrl.ifcfg[arg_begin_i] arg_s_mtrl.ifpack[i] = arg_s_mtrl.ifpack[arg_begin_i] arg_s_mtrl.ifpackpro[i] = arg_s_mtrl.ifpackpro[arg_begin_i] arg_s_mtrl.mtrlordertype[i] = arg_s_mtrl.mtrlordertype[arg_begin_i] arg_s_mtrl.ifpackpz[i] = arg_s_mtrl.ifpackpz[arg_begin_i] arg_s_mtrl.dytype[i] = arg_s_mtrl.dytype[arg_begin_i] arg_s_mtrl.ppfcode[i] = arg_s_mtrl.ppfcode[arg_begin_i] arg_s_mtrl.pcmplqty[i] = arg_s_mtrl.pcmplqty[arg_begin_i] arg_s_mtrl.produce_scid[i] = arg_s_mtrl.produce_scid[arg_begin_i] arg_s_mtrl.produce_wrkgrpid[i] = arg_s_mtrl.produce_wrkgrpid[arg_begin_i] arg_s_mtrl.wrkGrpid_scll[i] = arg_s_mtrl.wrkGrpid_scll[arg_begin_i] arg_s_mtrl.lp[i] = arg_s_mtrl.lp[arg_begin_i] arg_s_mtrl.ifmainmtrlid[i] = arg_s_mtrl.ifmainmtrlid[arg_begin_i] arg_s_mtrl.pmtrlid[i] = arg_s_mtrl.pmtrlid[arg_begin_i] arg_s_mtrl.ifchanged[i] = arg_s_mtrl.ifchanged[arg_begin_i] END IF NEXT FOR i = arg_begin_i TO arg_begin_i + ll_arr_add IF i = arg_begin_i AND arg_dy = 1 THEN arg_s_mtrl.qty[i] = arg_s_mtrl.qty[i] - arg_s_mtrl.cmplqty[i] arg_s_mtrl.cmplqty[i] = 0 ELSE k++ arg_s_mtrl.mtrlid[i] = arg_pf_dy.dymtrlid[k] arg_s_mtrl.status[i] = arg_pf_dy.status[k] arg_s_mtrl.woodcode[i] = arg_pf_dy.woodcode[k] arg_s_mtrl.pcode[i] = arg_pf_dy.pcode[k] arg_s_mtrl.mtrlcode[i] = arg_pf_dy.mtrlcode[k] arg_s_mtrl.mtrlname[i] = arg_pf_dy.mtrlname[k] arg_s_mtrl.mtrlmode[i] = arg_pf_dy.mtrlmode[k] arg_s_mtrl.unit[i] = arg_pf_dy.unit[k] arg_s_mtrl.Mtrlorigin[i] = arg_pf_dy.Mtrlorigin[k] arg_s_mtrl.mtrltype[i] = arg_pf_dy.mtrltype[k] arg_s_mtrl.mtrlprp[i] = arg_pf_dy.mtrlprp[k] arg_s_mtrl.ifselforder[i] = arg_pf_dy.ifselforder[k] arg_s_mtrl.ifpack[i] = arg_pf_dy.ifpack[k] arg_s_mtrl.ifpackpro[i] = arg_pf_dy.ifpackpro[k] arg_s_mtrl.mtrlordertype[i] = arg_pf_dy.ordertype[k] arg_s_mtrl.ifpackpz[i] = arg_pf_dy.ifpackpz[k] arg_s_mtrl.produce_scid[i] = arg_pf_dy.produce_scid[k] arg_s_mtrl.produce_wrkgrpid[i] = arg_pf_dy.produce_wrkgrpid[k] arg_s_mtrl.qty[i] = arg_pf_dy.dyqty[k] arg_s_mtrl.cmplqty[i] = 0 arg_s_mtrl.mqty[i] = arg_pf_dy.mqty[k] arg_s_mtrl.bqty[i] = arg_pf_dy.bqty[k] arg_s_mtrl.wqty[i] = arg_pf_dy.wqty[k] arg_s_mtrl.pqty[i] = arg_pf_dy.pqty[k] arg_s_mtrl.otherrqqty[i] = arg_pf_dy.otherrqqty[k] arg_s_mtrl.samerqqty[i] = arg_pf_dy.samerqqty[k] END IF NEXT end subroutine public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_pfcode, decimal arg_qty, long arg_wrkgrpid_scll, datetime arg_rqdate, string arg_gydscrp, string arg_pfklmode, string arg_pfgroup, string arg_pfgroupmode, decimal arg_advancetime, decimal arg_sonloss, decimal arg_sondecloss, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//解锁修改数量 Int rslt = 1 Int li_pfflag Long li_mxt Long ll_i String ls_mtrlcode,ls_mtrlname,ls_mtrlmode String ls_unit,ls_mtrltype Int li_mtrlorigin,li_ifselforder,li_mtrlprp Long ll_scid_mtrl,ll_wrkgrpid_mtrl Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays Date ld_sdate,ld_edate,ld_rqdate DateTime ldt_sdate,ldt_edate Decimal ld_cmpqty String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode deep++ If deep > 2000 Then arg_msg = '递归太深'+String(deep) rslt = 0 Goto ext End If Select mtrlcode, mtrlname, mtrlmode, mtrltype, unit, Mtrlorigin, scid, dftwrkgrpid, buydays, orderdays, wfjgdays, aheaddays, ifselforder, mtrlprp, cmpqty, mtrlsectype, zxmtrlmode, usermtrlmode Into :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin, :ll_scid_mtrl, :ll_wrkgrpid_mtrl, :ld_buydays, :ld_orderdays, :ld_wfjgdays, :ld_aheaddays, :li_ifselforder, :li_mtrlprp, :ld_cmpqty, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料资失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ld_cmpqty = 0 Then ld_cmpqty = 1 If uof_pfcode_check(arg_mtrlid,ls_mtrlcode,arg_pfcode,arg_msg) = 0 Then rslt = 0 Goto ext End If Decimal ld_advancetime_max_next //自制下级最大提前期 //计算需求日期 ld_rqdate = Date(String(arg_rqdate,'yyyy-mm-dd')) If li_mtrlorigin = 0 Then ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_advancetime ) //取下级最大提前期 If uof_get_max_advancetime(arg_mtrlid,arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) ElseIf li_mtrlorigin = 2 Then ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime ) ld_sdate = RelativeDate ( ld_rqdate, 0 - ld_buydays - arg_advancetime ) ElseIf li_mtrlorigin = 3 Then ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime ) ld_sdate = RelativeDate ( ld_rqdate, 0 - ld_wfjgdays - arg_advancetime ) ElseIf li_mtrlorigin = 6 Then ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_aheaddays - arg_advancetime ) End If ldt_sdate = DateTime(ld_sdate,Time(0)) ldt_edate = DateTime(ld_edate,Time(0)) // If deep > 1 Then li_mxt = UpperBound(arg_s_mtrl.mtrlid) li_mxt++ arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid arg_s_mtrl.pfcode[li_mxt] = arg_pfcode arg_s_mtrl.qty[li_mxt] = arg_qty arg_s_mtrl.status[li_mxt] = arg_status arg_s_mtrl.woodcode[li_mxt] = arg_woodcode arg_s_mtrl.pcode[li_mxt] = arg_pcode arg_s_mtrl.cmplqty[li_mxt] = arg_qty arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin arg_s_mtrl.sdate[li_mxt] = ldt_sdate arg_s_mtrl.edate[li_mxt] = ldt_edate arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype arg_s_mtrl.unit[li_mxt] = ls_unit arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin arg_s_mtrl.produce_scid[li_mxt] = ll_scid_mtrl arg_s_mtrl.produce_wrkgrpid[li_mxt] = ll_wrkgrpid_mtrl arg_s_mtrl.wrkGrpid_scll[li_mxt] = arg_wrkGrpid_scll arg_s_mtrl.mtrlsectype[li_mxt] = ls_mtrlsectype arg_s_mtrl.zxmtrlmode[li_mxt] = ls_zxmtrlmode arg_s_mtrl.usermtrlmode[li_mxt] = ls_usermtrlmode arg_s_mtrl.gydscrp[li_mxt] = arg_gydscrp arg_s_mtrl.pfklmode[li_mxt] = arg_pfklmode arg_s_mtrl.pfgroup[li_mxt] = arg_pfgroup arg_s_mtrl.pfgroupmode[li_mxt] = arg_pfgroupmode arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid arg_s_mtrl.sonloss[li_mxt] = arg_sonloss arg_s_mtrl.sondecloss[li_mxt] = arg_sondecloss arg_s_mtrl.standardrqqty[li_mxt] = Round((arg_qty - arg_sondecloss) * (1 - arg_sonloss),uo_option_produce_dec) End If Choose Case li_mtrlorigin Case 2 rslt = 1 Goto ext Case 6 If li_mtrlprp = 2 Or li_mtrlprp = 8 Then rslt = 1 Goto ext End If Case 0 If ll_scid_mtrl <> arg_scid Then rslt = 1 Goto ext Else If li_ifselforder = 1 Then rslt = 1 Goto ext End If End If Case 3 If ll_scid_mtrl <> arg_scid Then rslt = 1 Goto ext Else If li_ifselforder = 1 Then rslt = 1 Goto ext End If End If End Choose Long count,ll_j Decimal cmpl_qty s_pfmx ls_s_pfmx[] count = 0 Declare pf_cur Cursor For Select u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.wrkGrpid, u_PrdPF.dscrp, u_PrdPF.pfklmode, u_PrdPF.pfgroup, u_PrdPF.pfgroupmode, u_PrdPF.advancetime, u_PrdPF.baseqty, u_PrdPF.buyarg, u_mtrldef.mrptype, u_mtrldef.mrparg, u_prdpf.ifover, u_prdpf.dipztype From u_PrdPF,u_mtrldef Where ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_PrdPF.pfcode = :arg_pfcode ) And ( u_mtrldef.ifmrp = 1 ) Order By u_PrdPF.printid; Open pf_cur; count = 1 Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].advancetime,& :ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype; Do While sqlca.SQLCode = 0 count++ Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].advancetime,& :ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype; Loop count = count - 1 Close pf_cur; If count = 0 Then rslt = 1 Goto ext End If String ls_status_son,ls_woodcode_son,ls_pcode_son Long tem_long //物料清单基数 arg_qty = arg_qty/ld_cmpqty For ll_j = 1 To count If ls_s_pfmx[ll_j].sonloss <> 1 Then If ls_s_pfmx[ll_j].baseqty > 1 Then cmpl_qty = Ceiling(Truncate(arg_qty/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss)+ls_s_pfmx[ll_j].sondecloss,10)) Else If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then cmpl_qty = Round(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss)+ls_s_pfmx[ll_j].sondecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg) Else If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then cmpl_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss) + ls_s_pfmx[ll_j].sondecloss,10)) Else tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg cmpl_qty = Ceiling((Truncate(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss) + ls_s_pfmx[ll_j].sondecloss,10)) * tem_long)/tem_long cmpl_qty = Round(cmpl_qty , ls_s_pfmx[ll_j].u_mtrldef_mrparg) End If End If End If Else cmpl_qty = 0 End If If ls_s_pfmx[ll_j].ifover = 1 Then Choose Case ls_s_pfmx[ll_j].dipztype Case 0 ls_status_son = arg_status ls_woodcode_son = '' ls_pcode_son = '' Case 1 ls_status_son = '' ls_woodcode_son = arg_woodcode ls_pcode_son = '' Case 2 ls_status_son = '' ls_woodcode_son = '' ls_pcode_son = arg_pcode Case 3 ls_status_son = arg_status ls_woodcode_son = arg_woodcode ls_pcode_son = '' Case 4 ls_status_son = '' ls_woodcode_son = arg_woodcode ls_pcode_son = arg_pcode Case 5 ls_status_son = arg_status ls_woodcode_son = '' ls_pcode_son = arg_pcode Case 6 ls_status_son = arg_status ls_woodcode_son = arg_woodcode ls_pcode_son = arg_pcode End Choose Else ls_status_son = ls_s_pfmx[ll_j].status ls_woodcode_son = ls_s_pfmx[ll_j].woodcode ls_pcode_son = ls_s_pfmx[ll_j].pcode End If rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,& ls_status_son,ls_woodcode_son,ls_pcode_son,& ls_s_pfmx[ll_j].sonpfcode,& cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,ldt_edate,ls_s_pfmx[ll_j].dscrp,& ls_s_pfmx[ll_j].pfklmode,ls_s_pfmx[ll_j].pfgroup,& ls_s_pfmx[ll_j].pfgroupmode,ls_s_pfmx[ll_j].advancetime,& ls_s_pfmx[ll_j].sonloss,ls_s_pfmx[ll_j].sondecloss,& arg_s_mtrl,arg_msg) //递归处理下级 If rslt = 0 Then Goto ext End If Next ext: Return rslt end function public function integer uof_get_prdpf_sonloss (string arg_sonlossstr, decimal arg_qty, ref decimal arg_sonloss);//查询损耗率 Int rslt = 1 Int ll_rst Long i,ll_pos,ll_row String ls_conditionstr,ls_conditionstr_l,ls_conditionstr_r String ls_modstr,ls_sonloss Boolean lb_f = FALSE s_pf_sonlossstr_array arg_s_sonlossstr_array datastore ds_cmpl ds_cmpl = CREATE datastore IF Trim(arg_sonlossstr) = '' THEN rslt = 0 GOTO ext END IF f_pf_sonlossstr(arg_sonlossstr,arg_s_sonlossstr_array) FOR i = 1 TO UpperBound(arg_s_sonlossstr_array.conditionstr) ll_pos = Pos(arg_s_sonlossstr_array.conditionstr[i],',') IF ll_pos > 0 THEN ls_conditionstr_l = Left( arg_s_sonlossstr_array.conditionstr[i], ll_pos - 1) ls_conditionstr_r = Right( arg_s_sonlossstr_array.conditionstr[i],Len(arg_s_sonlossstr_array.conditionstr[i]) - ll_pos ) ls_modstr = String(arg_qty,'###0.##########') + ls_conditionstr_l + ' and ' + String(arg_qty,'###0.##########') + ls_conditionstr_r ELSE ls_modstr = String(arg_qty,'###0.##########') + arg_s_sonlossstr_array.conditionstr[i] END IF ds_cmpl.DataObject = 'ds_pf_sonlossstr_cmpl' ll_row = ds_cmpl.InsertRow(0) ls_modstr = 'if('+ls_modstr+',1,0)' // messagebox('',ls_modstr) ds_cmpl.Modify("cmpl.expression='"+ls_modstr+"'") ll_rst = ds_cmpl.Object.cmpl[ll_row] ds_cmpl.Reset() IF ll_rst = 0 THEN CONTINUE ls_sonloss = arg_s_sonlossstr_array.sonlossstr[i] IF Pos(ls_sonloss,'数量') > 0 THEN ll_row = ds_cmpl.InsertRow(0) ls_modstr = Replace ( ls_sonloss, Pos(ls_sonloss,'数量'), 4, String(arg_qty,'#,##0.0#########') ) ds_cmpl.Modify("cmpl.expression='"+ls_modstr+"'") arg_sonloss = ds_cmpl.Object.cmpl[ll_row] ds_cmpl.Reset() ELSE arg_sonloss = Dec(ls_sonloss) END IF lb_f = TRUE EXIT NEXT IF NOT lb_f THEN rslt = 0 ext: RETURN rslt end function public function integer uof_get_qty_dscrp (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_ref_dscrp, ref string arg_msg);//取相关数量 Int rslt = 1 Decimal ld_qty String ls_mtrlcode,ls_ordercode Int li_ordertype SELECT mtrlcode,ordertype INTO :ls_mtrlcode,:li_ordertype FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CHOOSE CASE arg_type CASE 1 //采购未进仓数 // SELECT sum(u_buytaskmx.qty - u_buytaskmx.consignedqty) // INTO :ld_qty // FROM u_buytaskmx,u_buytask // WHERE u_buytaskmx.scid = :arg_scid // AND u_buytaskmx.mtrlid = :arg_mtrlid // AND u_buytaskmx.status = :arg_status // AND u_buytaskmx.woodcode = :arg_woodcode // AND u_buytaskmx.pcode = :arg_pcode // AND u_buytaskmx.scid = u_buytask.scid // AND u_buytaskmx.taskid = u_buytask.taskid // AND u_buytaskmx.stopflag = 0 // AND u_buytask.status = 1 // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_buytaskmx.requiredate <= :arg_enddate ); // IF sqlca.SQLCode = -1 THEN // arg_msg = '查询物料:'+ls_mtrlcode+' 采购未进仓数失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF CASE 2 //生产未进仓数 DECLARE cur_pqty_dscrp CURSOR FOR SELECT u_Order_ml.orderqty - u_Order_ml.acmpqty, u_Order_ml.ordercode FROM u_Order_ml WHERE u_Order_ml.mtrlid = :arg_mtrlid AND u_Order_ml.scid = :arg_scid AND u_Order_ml.status_mode = :arg_status AND u_Order_ml.woodcode = :arg_woodcode AND u_Order_ml.pcode = :arg_pcode AND u_Order_ml.status = 1 AND u_Order_ml.orderid <> :arg_orderid AND ( :li_ordertype = 0 OR :li_ordertype = 1 AND u_Order_ml.ordertype = 4 ) AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_Order_ml.requiredate <= :arg_enddate ) AND u_Order_ml.orderqty - u_Order_ml.acmpqty > 0; OPEN cur_pqty_dscrp; FETCH cur_pqty_dscrp INTO :ld_qty,:ls_ordercode; DO WHILE sqlca.SQLCode = 0 arg_ref_dscrp += ls_ordercode + ':'+String(ld_qty,'#,0.##########') + '|' FETCH cur_pqty_dscrp INTO :ld_qty,:ls_ordercode; LOOP CLOSE cur_pqty_dscrp; IF Len(arg_ref_dscrp) = 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+' 指令未进仓数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 3 //外协未进仓数 // SELECT sum(u_order_wfjgMx.qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty) // INTO :ld_qty // FROM u_order_wfjgMx,u_order_wfjg // WHERE u_order_wfjgMx.scid = :arg_scid // AND u_order_wfjgMx.mtrlid = :arg_mtrlid // AND u_order_wfjgMx.status = :arg_status // AND u_order_wfjgMx.woodcode = :arg_woodcode // AND u_order_wfjgMx.pcode = :arg_pcode // AND u_order_wfjgMx.scid = u_order_wfjg.scid // AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID // AND u_order_wfjg.status = 1 // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_order_wfjgMx.requiredate <= :arg_enddate ); // IF sqlca.SQLCode = -1 THEN // arg_msg = '查询物料:'+ls_mtrlcode+' 外协未进仓数失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF CASE 5 //生产计划未排指令当生产未进仓数 // SELECT isnull(sum(u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty),0) // INTO :ld_qty // FROM u_Order_ml,u_OrderRqMtrl // WHERE u_Order_ml.scid = u_OrderRqMtrl.scid // AND u_Order_ml.orderid = u_OrderRqMtrl.orderid // AND u_OrderRqMtrl.mtrlid = :arg_mtrlid // AND u_OrderRqMtrl.scid = :arg_scid // AND u_OrderRqMtrl.status = :arg_status // AND u_OrderRqMtrl.woodcode = :arg_woodcode // AND u_OrderRqMtrl.pcode = :arg_pcode // AND u_Order_ml.status = 1 // AND u_Order_ml.orderid <> :arg_orderid // AND ( u_Order_ml.ordertype <> 4 ) // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_OrderRqMtrl.rqdate <= :arg_enddate ); // IF sqlca.SQLCode = -1 THEN // arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未排指令当生产未进仓数失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF END CHOOSE IF Len(arg_ref_dscrp) > 0 THEN arg_ref_dscrp = Left(arg_ref_dscrp,Len(arg_ref_dscrp) - 1) END IF ext: RETURN rslt end function private function integer uof_get_max_advancetime2 (long arg_mtrlid, string arg_status, ref decimal arg_ref_advancetime, ref string arg_msg);//取下级最大提前期(组合配置) Int rslt = 1 Long cnt,i s_mtrlcfg_expr s_mtrlcfg[] Long ll_cnt_s_mtrlcfg Decimal ld_advancetime IF arg_status = '' THEN arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查' rslt = 0 GOTO ext END IF //分解配置 f_checkpz(arg_status,s_mtrlcfg) // ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg) IF ll_cnt_s_mtrlcfg = 0 THEN arg_msg = '产品分拆配置失败' rslt = 0 GOTO ext END IF FOR i = 1 To ll_cnt_s_mtrlcfg SELECT count(*) INTO :cnt FROM u_prdpf WHERE mtrlid = :arg_mtrlid And pfcode = :s_mtrlcfg[i].cfgname; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品子件清单是否已设置下级用料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_ref_advancetime = 0 // rslt = 0 // arg_msg = '产品子件清单没有设置下级用料,请检查' // GOTO ext ELSE SELECT max(advancetime) INTO :ld_advancetime FROM u_prdpf WHERE mtrlid = :arg_mtrlid And pfcode = :s_mtrlcfg[i].cfgname; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料下级用料最大提前期失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF ld_advancetime > arg_ref_advancetime THEN arg_ref_advancetime = ld_advancetime END IF NEXT ext: RETURN rslt end function public function integer uof_cmpl_rqmtrl_fp (long arg_scid, long arg_orderid, integer arg_if_allowuse, integer arg_ifdate, datetime arg_enddate, s_order_ml_rqmtrl arg_s_mtrl, ref s_mtrlware_assign_plan arg_ref_s_assign_plan, ref string arg_msg);Int rslt = 1 Long ll_fp_array,ll_hz_array s_order_ml_rqmtrl l_s_rqmtrl_hz Long i,j,ll_f,k Decimal ld_fpqty_need Decimal ld_fpqty_m,ld_fpqty_b,ld_fpqty_p,ld_fpqty_w Long ll_m,ll_b,ll_p,ll_w datastore ds_plan_m,ds_plan_b,ds_plan_p,ds_plan_w ds_plan_m = Create datastore ds_plan_m.DataObject = 'ds_mtrlware_assign_plan_m' ds_plan_m.SetTransObject(sqlca) ds_plan_b = Create datastore ds_plan_b.DataObject = 'ds_mtrlware_assign_plan_b' ds_plan_b.SetTransObject(sqlca) ds_plan_p = Create datastore ds_plan_p.DataObject = 'ds_mtrlware_assign_plan_p' ds_plan_p.SetTransObject(sqlca) ds_plan_w = Create datastore ds_plan_w.DataObject = 'ds_mtrlware_assign_plan_w' ds_plan_w.SetTransObject(sqlca) IF arg_if_allowuse = 0 THEN rslt = 1 GOTO ext END IF FOR i = 1 To UpperBound(arg_s_mtrl.mtrlid) ll_f = 0 //过滤 IF arg_s_mtrl.iffp[i] = 0 THEN CONTINUE //只处理自制yyx20120824 // If ( arg_s_mtrl.ifselforder[i] > 0 And arg_s_mtrl.mtrlorigin[i] = 0 Or arg_s_mtrl.mtrlorigin[i] > 0 ) THEN If ( arg_s_mtrl.ifselforder[i] > 0 And arg_s_mtrl.mtrlorigin[i] = 0 ) THEN IF ifzl_mtrl_not_useqty Or ifwx_mtrl_not_useqty THEN IF arg_s_mtrl.mtrlorigin[i] = 0 THEN IF arg_s_mtrl.ifselforder[i] = 2 THEN IF ifzl_mtrl_not_useqty THEN CONTINUE END IF END IF ELSEIF arg_s_mtrl.mtrlorigin[i] = 3 THEN IF ifwx_mtrl_not_useqty THEN CONTINUE END IF END IF END IF IF arg_s_mtrl.otherrqqty[i] >= arg_s_mtrl.mqty[i] + arg_s_mtrl.bqty[i] + arg_s_mtrl.wqty[i] + arg_s_mtrl.pqty[i] + arg_s_mtrl.pqty2[i] THEN CONTINUE ELSE ll_f = 0 FOR j = 1 To ll_hz_array IF arg_s_mtrl.mtrlid[i] = l_s_rqmtrl_hz.mtrlid[j] And & arg_s_mtrl.status[i] = l_s_rqmtrl_hz.status[j] And & arg_s_mtrl.woodcode[i] = l_s_rqmtrl_hz.woodcode[j] And & arg_s_mtrl.pcode[i] = l_s_rqmtrl_hz.pcode[j] THEN ll_f = j EXIT END IF NEXT IF ll_f = 0 THEN ll_hz_array++ l_s_rqmtrl_hz.mtrlid[ll_hz_array] = arg_s_mtrl.mtrlid[i] l_s_rqmtrl_hz.status[ll_hz_array] = arg_s_mtrl.status[i] l_s_rqmtrl_hz.woodcode[ll_hz_array] = arg_s_mtrl.woodcode[i] l_s_rqmtrl_hz.pcode[ll_hz_array] = arg_s_mtrl.pcode[i] l_s_rqmtrl_hz.mtrlorigin[ll_hz_array] = arg_s_mtrl.mtrlorigin[i] l_s_rqmtrl_hz.ifselforder[ll_hz_array] = arg_s_mtrl.ifselforder[i] l_s_rqmtrl_hz.qty[ll_hz_array] = arg_s_mtrl.qty[i] l_s_rqmtrl_hz.mqty[ll_hz_array] = arg_s_mtrl.mqty[i] l_s_rqmtrl_hz.bqty[ll_hz_array] = arg_s_mtrl.bqty[i] l_s_rqmtrl_hz.pqty[ll_hz_array] = arg_s_mtrl.pqty[i] l_s_rqmtrl_hz.pqty2[ll_hz_array] = arg_s_mtrl.pqty2[i] l_s_rqmtrl_hz.wqty[ll_hz_array] = arg_s_mtrl.wqty[i] l_s_rqmtrl_hz.otherrqqty[ll_hz_array] = arg_s_mtrl.otherrqqty[i] ELSE l_s_rqmtrl_hz.qty[ll_f] += arg_s_mtrl.qty[i] END IF END IF ELSE CONTINUE END IF //过滤完毕 NEXT //计算分配类型 FOR k = 1 To ll_hz_array ld_fpqty_m = 0 ld_fpqty_b = 0 ld_fpqty_p = 0 ld_fpqty_w = 0 ld_fpqty_need = l_s_rqmtrl_hz.qty[k] IF l_s_rqmtrl_hz.mtrlorigin[k] = 0 THEN IF if_pqty_not_zl THEN IF l_s_rqmtrl_hz.pqty2[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN l_s_rqmtrl_hz.otherrqqty[k] = 0 ELSE l_s_rqmtrl_hz.otherrqqty[k] = l_s_rqmtrl_hz.otherrqqty[k] - l_s_rqmtrl_hz.pqty2[k] END IF END IF END IF IF l_s_rqmtrl_hz.mqty[k] > l_s_rqmtrl_hz.otherrqqty[k] THEN IF l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN ld_fpqty_m = ld_fpqty_need ld_fpqty_b = 0 ld_fpqty_p = 0 ld_fpqty_w = 0 ELSE ld_fpqty_m = l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k] ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k]) IF l_s_rqmtrl_hz.bqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.bqty[k] >= ld_fpqty_need THEN ld_fpqty_b = ld_fpqty_need ld_fpqty_p = 0 ld_fpqty_w = 0 ELSE ld_fpqty_b = l_s_rqmtrl_hz.bqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.bqty[k] END IF END IF IF l_s_rqmtrl_hz.pqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.pqty[k] >= ld_fpqty_need THEN ld_fpqty_p = ld_fpqty_need ld_fpqty_w = 0 ELSE ld_fpqty_p = l_s_rqmtrl_hz.pqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.pqty[k] END IF END IF IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN ld_fpqty_w = ld_fpqty_need ELSE ld_fpqty_w = l_s_rqmtrl_hz.wqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k] END IF END IF END IF ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] > l_s_rqmtrl_hz.otherrqqty[k] THEN ld_fpqty_m = 0 IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN ld_fpqty_b = ld_fpqty_need ld_fpqty_p = 0 ld_fpqty_w = 0 ELSE ld_fpqty_b = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k] ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k]) IF l_s_rqmtrl_hz.pqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.pqty[k] >= ld_fpqty_need THEN ld_fpqty_p = ld_fpqty_need ld_fpqty_w = 0 ELSE ld_fpqty_p = l_s_rqmtrl_hz.pqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.pqty[k] END IF END IF IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN ld_fpqty_w = ld_fpqty_need ELSE ld_fpqty_w = l_s_rqmtrl_hz.wqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k] END IF END IF END IF ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN ld_fpqty_m = 0 ld_fpqty_b = 0 IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN ld_fpqty_p = ld_fpqty_need ld_fpqty_w = 0 ELSE ld_fpqty_p = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k] ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k]) IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN ld_fpqty_w = ld_fpqty_need ELSE ld_fpqty_w = l_s_rqmtrl_hz.wqty[k] ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k] END IF END IF END IF ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN ld_fpqty_m = 0 ld_fpqty_b = 0 ld_fpqty_p = 0 IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN ld_fpqty_w = ld_fpqty_need ELSE ld_fpqty_w = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k] ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k]) END IF END IF //库存分配 IF ld_fpqty_m > 0 THEN ds_plan_m.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k]) ds_plan_m.AcceptText() FOR ll_m = 1 To ds_plan_m.RowCount() IF ld_fpqty_m = 0 THEN EXIT IF ld_fpqty_m <= ds_plan_m.Object.notfpqty[ll_m] THEN ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = ds_plan_m.Object.u_mtrlware_mtrlwareid[ll_m] arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_m arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] ld_fpqty_m = 0 ELSE ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = 0 arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = ds_plan_m.Object.u_mtrlware_mtrlwareid[ll_m] arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_m.Object.notfpqty[ll_m] ld_fpqty_m = ld_fpqty_m - ds_plan_m.Object.notfpqty[ll_m] arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] END IF NEXT IF ld_fpqty_m > 0 THEN arg_msg = '库存分配数错误,运' rslt = 0 GOTO ext END IF END IF //采购订单分配 IF ld_fpqty_b > 0 THEN ds_plan_b.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate) ds_plan_b.AcceptText() FOR ll_b = 1 To ds_plan_b.RowCount() IF ld_fpqty_b = 0 THEN EXIT IF ld_fpqty_b <= ds_plan_b.Object.notfpqty[ll_b] THEN ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 2 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_taskid[ll_b] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_printid[ll_b] arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_b arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] ld_fpqty_b = 0 ELSE ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 2 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_taskid[ll_b] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_printid[ll_b] arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_b.Object.notfpqty[ll_b] ld_fpqty_b = ld_fpqty_b - ds_plan_b.Object.notfpqty[ll_b] arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] END IF NEXT IF ld_fpqty_b > 0 THEN arg_msg = '采购分配计划数错误' rslt = 0 GOTO ext END IF END IF //指令单分配 IF ld_fpqty_p > 0 THEN ds_plan_p.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate) ds_plan_p.AcceptText() FOR ll_p = 1 To ds_plan_p.RowCount() IF ld_fpqty_p = 0 THEN EXIT IF ld_fpqty_p <= ds_plan_p.Object.notfpqty[ll_p] THEN ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_p.Object.u_order_ml_orderid[ll_p] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_p arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] ld_fpqty_p = 0 ELSE ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_p.Object.u_order_ml_orderid[ll_p] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_p.Object.notfpqty[ll_p] ld_fpqty_p = ld_fpqty_p - ds_plan_p.Object.notfpqty[ll_p] arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] END IF NEXT IF ld_fpqty_p > 0 THEN arg_msg = '指令分配计划数错误' rslt = 0 GOTO ext END IF END IF //外协单分配 IF ld_fpqty_w > 0 THEN ds_plan_w.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate) ds_plan_w.AcceptText() FOR ll_w = 1 To ds_plan_w.RowCount() IF ld_fpqty_w = 0 THEN EXIT IF ld_fpqty_w <= ds_plan_w.Object.notfpqty[ll_w] THEN ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 3 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_orderid[ll_w] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_printid[ll_w] arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_w arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] ld_fpqty_w = 0 ELSE ll_fp_array++ arg_ref_s_assign_plan.planid[ll_fp_array] = 0 arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0 arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1 arg_ref_s_assign_plan.Plankind[ll_fp_array] = 3 arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_orderid[ll_w] arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_printid[ll_w] arg_ref_s_assign_plan.Scid[ll_fp_array] = 0 arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0 arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0 arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_w.Object.notfpqty[ll_w] ld_fpqty_w = ld_fpqty_w - ds_plan_w.Object.notfpqty[ll_w] arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k] arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k] arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k] arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k] END IF NEXT IF ld_fpqty_w > 0 THEN arg_msg = '外协分配计划数错误' rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy ds_plan_m Destroy ds_plan_b Destroy ds_plan_p Destroy ds_plan_w RETURN rslt end function public function integer uof_cmpl_rqmtrl_dy (integer arg_ifdate, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);Int rslt = 1 Long i,ch,l,arr_mxt,j,ll_dycnt,dy_arr_mxt Long ll_begin_i Decimal ld_pcmplqty,ld_cmplqty,ld_rate,ld_cqty,ld_cmplqty_old Decimal ld_dyqty Decimal ld_mqty Decimal ld_bqty Decimal ld_wqty Decimal ld_pqty Decimal ld_otherrqqty,ld_samerqqty s_prdpf_replace arg_pf_dy,arg_pf_dy_t,arg_pf_dy_tmp FOR i = 1 TO UpperBound(arg_s_mtrl.mtrlid) IF arg_s_mtrl.dytype[i] > 0 THEN ch++ END IF NEXT IF ch = 0 THEN rslt = 1 GOTO ext END IF ll_begin_i = 1 re_for: FOR i = ll_begin_i TO UpperBound(arg_s_mtrl.mtrlid) arg_pf_dy = arg_pf_dy_tmp arg_pf_dy_t = arg_pf_dy_tmp ll_dycnt = 0 dy_arr_mxt = 0 IF arg_s_mtrl.dytype[i] = 0 THEN CONTINUE IF NOT arg_s_mtrl.cmplqty[i] > 0 THEN CONTINUE ld_pcmplqty = arg_s_mtrl.pcmplqty[i] IF uof_get_prdpf_replace(arg_s_mtrl.pmtrlid[i],& arg_s_mtrl.ppfcode[i],& arg_s_mtrl.pfgroup[i],& arg_s_mtrl.mtrlid[i],& arg_s_mtrl.wrkgrpid_scll[i],& arg_s_mtrl.pfcode[i],& arg_pf_dy,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_mtrl.dytype[i] = 1 THEN ld_cqty = 0 ld_cqty = arg_s_mtrl.cmplqty[i] FOR l = 1 TO UpperBound(arg_pf_dy.dymtrlid) ld_mqty = 0 ld_bqty = 0 ld_wqty = 0 ld_pqty = 0 ld_otherrqqty = 0 ld_samerqqty = 0 ld_dyqty = 0 IF ld_cqty = 0 THEN EXIT IF arg_pf_dy.SonLoss[l] = 1 THEN CONTINUE ld_cmplqty = 0 ld_cmplqty = Round(ld_pcmplqty * arg_pf_dy.Sonscale[l]/(1 - arg_pf_dy.SonLoss[l]),uo_option_produce_dec) ld_rate = Round(ld_cmplqty/arg_s_mtrl.qty[i],2) ld_cqty = ld_cqty * ld_rate IF uof_get_qty(1,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_bqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(2,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_pqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(3,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_wqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(4,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_mqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_other_rqqty(arg_s_mtrl.scid[i],arg_s_mtrl.orderid[i],& arg_pf_dy.dymtrlid[l],arg_s_mtrl.mtrlorigin[i],arg_pf_dy.status[l],& arg_pf_dy.woodcode[l],arg_pf_dy.pcode[l],ld_otherrqqty,& arg_ifdate,arg_s_mtrl.edate[i],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF arr_mxt = UpperBound(arg_s_mtrl.mtrlid) IF arr_mxt = 0 THEN ld_samerqqty = 0 ELSE FOR j = 1 TO arr_mxt IF arg_s_mtrl.scid[j] = arg_s_mtrl.scid[i] AND & arg_s_mtrl.orderid[j] = arg_s_mtrl.orderid[i] AND & arg_s_mtrl.mtrlid[j] = arg_pf_dy.dymtrlid[l] AND & arg_s_mtrl.sdate[j] = arg_s_mtrl.sdate[i] AND & arg_s_mtrl.edate[j] = arg_s_mtrl.edate[i] AND & arg_s_mtrl.status[j] = arg_pf_dy.status[l] AND & arg_s_mtrl.woodcode[j] = arg_pf_dy.woodcode[l] AND & arg_s_mtrl.pcode[j] = arg_pf_dy.pcode[l] AND & arg_s_mtrl.wrkgrpid_scll[j] = arg_s_mtrl.wrkgrpid_scll[i] THEN ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[j] END IF NEXT END IF IF ( ld_samerqqty + ld_otherrqqty ) >= ( ld_mqty + ld_bqty + ld_wqty + ld_pqty ) THEN CONTINUE END IF IF ld_cqty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty ) THEN ld_dyqty = ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty ) ld_cqty = ld_cqty - ( ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty ) ) ld_cqty = Round(ld_cqty/ld_rate,2) ELSE ld_dyqty = ld_cqty ld_cqty = 0 END IF dy_arr_mxt++ arg_pf_dy_t.dymtrlid[dy_arr_mxt] = arg_pf_dy.dymtrlid[l] arg_pf_dy_t.Sonscale[dy_arr_mxt] = arg_pf_dy.Sonscale[l] arg_pf_dy_t.SonLoss[dy_arr_mxt] = arg_pf_dy.SonLoss[l] arg_pf_dy_t.scllloss[dy_arr_mxt] = arg_pf_dy.scllloss[l] arg_pf_dy_t.dscrp[dy_arr_mxt] = arg_pf_dy.dscrp[l] arg_pf_dy_t.status[dy_arr_mxt] = arg_pf_dy.status[l] arg_pf_dy_t.woodcode[dy_arr_mxt] = arg_pf_dy.woodcode[l] arg_pf_dy_t.pcode[dy_arr_mxt] = arg_pf_dy.pcode[l] arg_pf_dy_t.mtrlcode[dy_arr_mxt] = arg_pf_dy.mtrlcode[l] arg_pf_dy_t.mtrlname[dy_arr_mxt] = arg_pf_dy.mtrlname[l] arg_pf_dy_t.mtrlmode[dy_arr_mxt] = arg_pf_dy.mtrlmode[l] arg_pf_dy_t.unit[dy_arr_mxt] = arg_pf_dy.unit[l] arg_pf_dy_t.mtrlorigin[dy_arr_mxt] = arg_pf_dy.mtrlorigin[l] arg_pf_dy_t.mtrltype[dy_arr_mxt] = arg_pf_dy.mtrltype[l] arg_pf_dy_t.mtrlprp[dy_arr_mxt] = arg_pf_dy.mtrlprp[l] arg_pf_dy_t.ifselforder[dy_arr_mxt] = arg_pf_dy.ifselforder[l] arg_pf_dy_t.ifpack[dy_arr_mxt] = arg_pf_dy.ifpack[l] arg_pf_dy_t.ifpackpro[dy_arr_mxt] = arg_pf_dy.ifpackpro[l] arg_pf_dy_t.produce_scid[dy_arr_mxt] = arg_pf_dy.produce_scid[l] arg_pf_dy_t.produce_wrkgrpid[dy_arr_mxt] = arg_pf_dy.produce_wrkgrpid[l] arg_pf_dy_t.ordertype[dy_arr_mxt] = arg_pf_dy.ordertype[l] arg_pf_dy_t.ifpackpz[dy_arr_mxt] = arg_pf_dy.ifpackpz[l] arg_pf_dy_t.dyqty[dy_arr_mxt] = ld_dyqty arg_pf_dy_t.mqty[dy_arr_mxt] = ld_mqty arg_pf_dy_t.bqty[dy_arr_mxt] = ld_bqty arg_pf_dy_t.wqty[dy_arr_mxt] = ld_wqty arg_pf_dy_t.pqty[dy_arr_mxt] = ld_pqty arg_pf_dy_t.otherrqqty[dy_arr_mxt] = ld_otherrqqty arg_pf_dy_t.samerqqty[dy_arr_mxt] = ld_samerqqty NEXT ll_dycnt = UpperBound(arg_pf_dy_t.dymtrlid) //代用 IF ll_dycnt > 0 and ld_cqty = 0 THEN IF arg_s_mtrl.qty[i] > arg_s_mtrl.cmplqty[i] THEN uof_cmpl_rqmtrl_dy_mx(i,1,arg_s_mtrl,arg_pf_dy_t) ll_begin_i = i + ll_dycnt ELSEIF arg_s_mtrl.qty[i] = arg_s_mtrl.cmplqty[i] THEN uof_cmpl_rqmtrl_dy_mx(i,0,arg_s_mtrl,arg_pf_dy_t) ll_begin_i = i + ll_dycnt - 1 END IF ll_begin_i = ll_begin_i + 1 GOTO re_for END IF ELSEIF arg_s_mtrl.dytype[i] = 2 THEN FOR l = 1 TO UpperBound(arg_pf_dy.dymtrlid) IF arg_pf_dy.SonLoss[l] = 1 THEN CONTINUE ld_cmplqty = 0 ld_cmplqty = Round(ld_pcmplqty * arg_pf_dy.Sonscale[l]/(1 - arg_pf_dy.SonLoss[l]),uo_option_produce_dec) IF uof_get_qty(1,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_bqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(2,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_pqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(3,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_wqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_qty(4,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],& arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],& arg_pf_dy.status[l],arg_pf_dy.woodcode[l],& arg_pf_dy.pcode[l],ld_mqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_get_other_rqqty(arg_s_mtrl.scid[i],arg_s_mtrl.orderid[i],& arg_pf_dy.dymtrlid[l],arg_s_mtrl.mtrlorigin[i],arg_pf_dy.status[l],& arg_pf_dy.woodcode[l],arg_pf_dy.pcode[l],ld_otherrqqty,& arg_ifdate,arg_s_mtrl.edate[i],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF arr_mxt = UpperBound(arg_s_mtrl.mtrlid) IF arr_mxt = 0 THEN ld_samerqqty = 0 ELSE FOR j = 1 TO arr_mxt IF arg_s_mtrl.scid[j] = arg_s_mtrl.scid[i] AND & arg_s_mtrl.orderid[j] = arg_s_mtrl.orderid[i] AND & arg_s_mtrl.mtrlid[j] = arg_pf_dy.dymtrlid[l] AND & arg_s_mtrl.sdate[j] = arg_s_mtrl.sdate[i] AND & arg_s_mtrl.edate[j] = arg_s_mtrl.edate[i] AND & arg_s_mtrl.status[j] = arg_pf_dy.status[l] AND & arg_s_mtrl.woodcode[j] = arg_pf_dy.woodcode[l] AND & arg_s_mtrl.pcode[j] = arg_pf_dy.pcode[l] AND & arg_s_mtrl.wrkgrpid_scll[j] = arg_s_mtrl.wrkgrpid_scll[i] THEN ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[j] END IF NEXT END IF IF ld_cmplqty < ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN arg_s_mtrl.mtrlid[i] = arg_pf_dy.dymtrlid[l] arg_s_mtrl.status[i] = arg_pf_dy.status[l] arg_s_mtrl.woodcode[i] = arg_pf_dy.woodcode[l] arg_s_mtrl.pcode[i] = arg_pf_dy.pcode[l] arg_s_mtrl.mtrlcode[i] = arg_pf_dy.mtrlcode[l] arg_s_mtrl.mtrlname[i] = arg_pf_dy.mtrlname[l] arg_s_mtrl.mtrlmode[i] = arg_pf_dy.mtrlmode[l] arg_s_mtrl.unit[i] = arg_pf_dy.unit[l] arg_s_mtrl.mtrlorigin[i] = arg_pf_dy.mtrlorigin[l] arg_s_mtrl.mtrltype[i] = arg_pf_dy.mtrltype[l] arg_s_mtrl.mtrlprp[i] = arg_pf_dy.mtrlprp[l] arg_s_mtrl.ifselforder[i] = arg_pf_dy.ifselforder[l] arg_s_mtrl.ifpack[i] = arg_pf_dy.ifpack[l] arg_s_mtrl.ifpackpro[i] = arg_pf_dy.ifpackpro[l] arg_s_mtrl.mtrlordertype[i] = arg_pf_dy.ordertype[l] arg_s_mtrl.ifpackpz[i] = arg_pf_dy.ifpackpz[l] arg_s_mtrl.produce_scid[i] = arg_pf_dy.produce_scid[l] arg_s_mtrl.produce_wrkgrpid[i] = arg_pf_dy.produce_wrkgrpid[l] arg_s_mtrl.qty[i] = ld_cmplqty arg_s_mtrl.cmplqty[i] = 0 arg_s_mtrl.mqty[i] = ld_mqty arg_s_mtrl.bqty[i] = ld_bqty arg_s_mtrl.wqty[i] = ld_wqty arg_s_mtrl.pqty[i] = ld_pqty arg_s_mtrl.otherrqqty[i] = ld_otherrqqty arg_s_mtrl.samerqqty[i] = ld_samerqqty EXIT END IF NEXT END IF NEXT ext: RETURN rslt end function public function integer uof_aps_update_date (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_flag SELECT plan_flag INTO :li_flag FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划排程标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 0 THEN rslt = 1 GOTO ext END IF UPDATE u_OrderRqMtrl SET u_OrderRqMtrl.RqDate = v_update_rqmtrl.new_rqdate, u_OrderRqMtrl.edate = v_update_rqmtrl.new_edate FROM u_OrderRqMtrl INNER JOIN (SELECT v_workgroup.mindate AS new_rqdate, DATEADD(dd, DATEDIFF(dd, u_OrderRqMtrl.RqDate, v_workgroup.mindate), u_OrderRqMtrl.edate) AS new_edate, u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.wrkGrpid, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode, u_OrderRqMtrl.plantype, u_OrderRqMtrl.produce_wrkGrpid FROM u_OrderRqMtrl INNER JOIN (SELECT wrkGrpid, MIN(begindate) AS mindate, scid, orderid FROM u_OrderMtrl_workgroup WHERE (begindate IS NOT NULL) GROUP BY wrkGrpid, scid, orderid) v_workgroup ON u_OrderRqMtrl.scid = v_workgroup.scid AND u_OrderRqMtrl.OrderID = v_workgroup.orderid AND u_OrderRqMtrl.wrkGrpid = v_workgroup.wrkGrpid) v_update_rqmtrl ON u_OrderRqMtrl.scid = v_update_rqmtrl.scid AND u_OrderRqMtrl.OrderID = v_update_rqmtrl.OrderID AND u_OrderRqMtrl.MtrlID = v_update_rqmtrl.MtrlID AND u_OrderRqMtrl.wrkGrpid = v_update_rqmtrl.wrkGrpid AND u_OrderRqMtrl.status = v_update_rqmtrl.status COLLATE Chinese_PRC_CI_AS AND u_OrderRqMtrl.woodcode = v_update_rqmtrl.woodcode COLLATE Chinese_PRC_CI_AS AND u_OrderRqMtrl.pcode = v_update_rqmtrl.pcode COLLATE Chinese_PRC_CI_AS AND u_OrderRqMtrl.plantype = v_update_rqmtrl.plantype AND u_OrderRqMtrl.produce_wrkGrpid = v_update_rqmtrl.produce_wrkGrpid WHERE u_OrderRqMtrl.scid = :arg_scid And u_OrderRqMtrl.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新用料需求日期失败,'+sqlca.SQLErrText GOTO ext END IF UPDATE u_OrderRqMtrl_tree SET u_OrderRqMtrl_tree.RqDate = v_updaet_date.new_rqdate, u_OrderRqMtrl_tree.edate = v_updaet_date.new_edate FROM u_OrderRqMtrl_tree INNER JOIN (SELECT u_OrderRqMtrl_tree.scid, u_OrderRqMtrl_tree.OrderID, u_OrderRqMtrl_tree.printid, v_workgroup.mindate AS new_rqdate, DATEADD(dd, DATEDIFF(dd, u_OrderRqMtrl_tree.RqDate, v_workgroup.mindate), u_OrderRqMtrl_tree.edate) AS new_edate FROM u_OrderRqMtrl_tree INNER JOIN (SELECT wrkGrpid, MIN(begindate) AS mindate, scid, orderid FROM u_OrderMtrl_workgroup WHERE (begindate IS NOT NULL) GROUP BY wrkGrpid, scid, orderid) v_workgroup ON u_OrderRqMtrl_tree.scid = v_workgroup.scid AND u_OrderRqMtrl_tree.OrderID = v_workgroup.orderid AND u_OrderRqMtrl_tree.wrkGrpid = v_workgroup.wrkGrpid) v_updaet_date ON u_OrderRqMtrl_tree.scid = v_updaet_date.scid AND u_OrderRqMtrl_tree.OrderID = v_updaet_date.OrderID AND u_OrderRqMtrl_tree.printid = v_updaet_date.printid WHERE u_OrderRqMtrl_tree.scid = :arg_scid And u_OrderRqMtrl_tree.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料需求结构表日期失败,'+sqlca.SQLErrText GOTO ext END IF ext: RETURN rslt end function public function integer uof_cmpl_rqmtrl (long arg_lp, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//主MRP运算 Int rslt = 1 Int li_pfflag Long ll_mtrlid_order,ll_ordertype_order,ll_saletaskmx_pf_cnt Long ll_taskid_order,ll_taskmxid_order DateTime ldt_orderdate,ldt_orderrqdate Int li_order_ifpackpro Int li_ifmainmtrlid Long arr_mxt Long ll_i,cnt Boolean if_special_notuse = False Int li_ifpzpf Long ll_pzpfcnt String ls_pfcode_local Long ll_ifbj_task int li_multtype decimal lde_eoq, lde_maxqty, lde_minqty decimal lde_addcmplqty, lde_sameaddcmplqty string ls_pdscrp If uo_option_packpro2_pf_pack2_useifover = -1000 Then rslt = 0 arg_msg = '选项:[274]个性包件产品清单明细个性包件必须使用按配置拆装,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_ifpackpro2_if_no_pack2 = -1000 Then rslt = 0 arg_msg = '选项:[340]个性包件产品物料清单允许没有个性包件,读取初始默认值失败,操作取消!' Goto ext End If deep++ If deep > 1000 Then arg_msg = '递归太深'+String(deep) rslt = 0 Goto ext End If ls_pfcode_local = arg_s_mrp.arg_pfcode If arg_s_mrp.arg_orderid <> -1 Then Select u_order_ml.mtrlid, u_order_ml.orderdate, u_order_ml.requiredate, u_mtrldef.ifpackpro, u_order_ml.ordertype, u_order_ml.taskid, u_order_ml.taskmxid Into :ll_mtrlid_order, :ldt_orderdate, :ldt_orderrqdate, :li_order_ifpackpro, :ll_ordertype_order, :ll_taskid_order, :ll_taskmxid_order From u_order_ml Inner join u_mtrldef on u_order_ml.mtrlid = u_mtrldef.mtrlid Where u_order_ml.orderid = :arg_s_mrp.arg_orderid And u_order_ml.scid = :arg_s_mrp.arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产计划生产物料操作失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Select u_saletype.ifbj Into :ll_ifbj_task From u_SaleTask Inner JOIN u_saletype ON u_SaleTask.typeid = u_saletype.typeid Where u_SaleTask.scid = :arg_s_mrp.arg_scid And u_SaleTask.taskid = :ll_taskid_order; If sqlca.SQLCode <> 0 Then ll_ifbj_task = 0 End If Else If deep = 1 Then ll_mtrlid_order = arg_s_mrp.arg_mtrlid Else ll_mtrlid_order = -1 End If End If String ls_mtrlcode,ls_mtrlname,ls_mtrlmode String ls_unit,ls_mtrltype Int li_mtrlorigin,li_ifselforder,li_mtrlprp,li_statusflag,li_mtrlorigin_p Long ll_scid_mtrl,ll_wrkgrpid_mtrl Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays Date ld_sdate,ld_edate,ld_rqdate,ld_up_sdate DateTime ldt_sdate,ldt_edate Int li_ifpack,li_ifpackpro,li_ordertype,li_ifpackpz,li_iffp Decimal ld_cmpqty String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Select u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_mtrldef.mtrltype, u_mtrldef.unit, u_mtrldef.Mtrlorigin, u_mtrldef.scid, u_mtrldef.dftwrkgrpid, u_mtrldef.buydays, u_mtrldef.orderdays, u_mtrldef.wfjgdays, u_mtrldef.aheaddays, u_mtrldef.ifselforder, u_mtrldef.mtrlprp, u_mtrldef.statusflag, u_mtrldef.ifpack, u_mtrldef.ifpackpro, u_mtrldef.ordertype, u_mtrldef.ifpackpz, u_mtrldef.cmpqty, u_mtrldef.mtrlsectype, u_mtrldef.zxmtrlmode, u_mtrldef.usermtrlmode, u_mtrldef.iffp, u_mtrldef.multtype, u_mtrldef.eoq, u_mtrldef.maxqty, u_mtrldef.minqty Into :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin, :ll_scid_mtrl, :ll_wrkgrpid_mtrl, :ld_buydays, :ld_orderdays, :ld_wfjgdays, :ld_aheaddays, :li_ifselforder, :li_mtrlprp, :li_statusflag, :li_ifpack, :li_ifpackpro, :li_ordertype, :li_ifpackpz, :ld_cmpqty, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode, :li_iffp, :li_multtype, :lde_eoq, :lde_maxqty, :lde_minqty From u_mtrldef Where mtrlid = :arg_s_mrp.arg_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If //yyx20120523 If deep = 1 Then If li_ifpackpro = 1 Then cnt = 0 Select count(*) Into :cnt From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_mtrldef.ifpack = 2 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询通用包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '通用包件产品下级有个性包件,操作取消,请检查物料清单' rslt = 0 Goto ext End If End If If li_ifpackpro = 2 Then If uo_option_ifpackpro2_if_no_pack2 = 0 Then cnt = 0 Select count(*) Into :cnt From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_mtrldef.ifpack = 2 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询个性包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '个性包件产品下级没有个性包件,操作取消,请检查物料清单' rslt = 0 Goto ext End If End If //检查订单生产计划相关订单明细是否设置了个性清单yyx120823 If ll_ordertype_order = 1 And ll_taskid_order > 0 Then Select count(*) Into :ll_saletaskmx_pf_cnt From u_saletaskmx_pf Where u_saletaskmx_pf.scid = :arg_s_mrp.arg_scid And u_saletaskmx_pf.taskid = :ll_taskid_order And u_saletaskmx_pf.printid = :ll_taskmxid_order; If sqlca.SQLCode <> 0 Then arg_msg = '查询主计划产品对应销售订单明细是否设置了个性清单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If // End If If uo_option_packpro2_pf_pack2_useifover = 1 Then If li_ifpackpro = 2 Then cnt = 0 Select count(*) Into :cnt From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_PrdPF.ifover = 0 ) And ( u_mtrldef.ifpack = 2 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询个性包件产品下级个性包件清单明细是否有未设<按配置拆装>属性失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '个性包件产品下级个性包件清单明细有未设<按配置拆装>属性,操作取消,请检查物料清单' rslt = 0 Goto ext End If End If End If cnt = 0 Select count(*) Into :cnt From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_PrdPF.ifover = 1 ) And ( u_PrdPF.dipztype = -1 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询产品下级清单明细是否有未设<配置拆装类型>属性失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '产品下级清单明细有未设<配置拆装类型>属性,操作取消,请检查物料清单' rslt = 0 Goto ext End If End If // If arg_s_mrp.arg_pmtrlid > 0 Then Select mtrlorigin Into :li_mtrlorigin_p From u_mtrldef Where mtrlid = :arg_s_mrp.arg_pmtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询上级物料资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If If ld_cmpqty = 0 Then ld_cmpqty = 1 //检查组合配置是否使用组合配置清单 If li_statusflag = 2 And arg_s_mrp.arg_ifcfg = 0 Then If arg_s_mrp.arg_status = '' Then arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查' rslt = 0 Goto ext End If arg_s_mrp.arg_pfcode = arg_s_mrp.arg_status ll_pzpfcnt = 0 Select count(*) Into :ll_pzpfcnt From u_mtrl_pf Where mtrlid = :arg_s_mrp.arg_mtrlid And pfcode = :arg_s_mrp.arg_pfcode And ifpzpf = 1; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料是否启用组合配置清单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ll_pzpfcnt > 0 Then li_ifpzpf = 1 If uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 Then rslt = 0 Goto ext End If Else li_ifpzpf = 0 End If Else li_ifpzpf = 0 End If //如果不是组合配置或则检查物料清单审核标记 If li_statusflag <> 2 Or arg_s_mrp.arg_ifcfg = 1 Then If uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 Then rslt = 0 Goto ext End If End If Decimal ld_cmplqty Decimal ld_mqty Decimal ld_wmqty Decimal ld_bqty Decimal ld_wqty Decimal ld_pqty Decimal ld_ckwareqty, ld_ckwareqty_af Decimal ld_pqty2,ld_pqty2_cmpl Decimal ld_rqwfjgqty,ld_rqwfjgqty_cmpl Decimal ld_rqbuyqty,ld_rqbuyqty_cmpl Decimal ld_otherrqqty,ld_otherrqqty_wx,ld_otherrqqty_sale,ld_samerqqty Decimal ld_advancetime_max_next //自制下级最大提前期 Int li_dytype String ld_qty_dscrp //未进仓明细摘要 //计算需求日期 ld_rqdate = Date(String(arg_s_mrp.arg_up_rqdate,'yyyy-mm-dd')) ld_up_sdate = Date(String(arg_s_mrp.arg_up_sdate,'yyyy-mm-dd')) If li_mtrlorigin = 0 Then If deep = 1 Then ld_edate = ld_rqdate If li_ifpackpro > 0 Then If sys_option_ifuse_ordersdate = 0 Then ld_sdate = Date(ldt_orderdate) Else If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If Else If li_ordertype = 0 Then If sys_option_ifuse_ordersdate = 0 Then ld_sdate = Date(ldt_orderdate) Else If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If Else If li_statusflag = 2 And li_ifpzpf = 0 Then If sys_option_ifuse_ordersdate = 0 Then ld_sdate = Date(ldt_orderdate) Else If uof_get_max_advancetime2(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If Else If sys_option_ifuse_ordersdate = 0 Then ld_sdate = Date(ldt_orderdate) Else If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If End If End If End If Else If li_ifpack > 0 And sys_option_ifuse_ordersdate = 0 Then ld_edate = Date(ldt_orderrqdate) ld_sdate = Date(ldt_orderdate) ElseIf (li_ifpackpro = 3 Or li_ifpackpro = 4) And sys_option_ifuse_ordersdate = 0 Then ld_edate = Date(ldt_orderrqdate) ld_sdate = Date(ldt_orderdate) Else If li_mtrlorigin_p = 3 Then ld_edate = ld_up_sdate Else ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_s_mrp.arg_advancetime ) End If //取下级最大提前期 If li_statusflag = 2 And ll_mtrlid_order = arg_s_mrp.arg_mtrlid Then If sys_option_ifuse_ordersdate = 0 Then ld_sdate = Date(ldt_orderdate) Else ld_advancetime_max_next = 0 ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If Else If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then arg_msg = ls_mtrlcode + arg_msg rslt = 0 Goto ext End If ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) End If End If End If ElseIf li_mtrlorigin = 2 Then If li_mtrlorigin_p = 3 Then ld_edate = ld_up_sdate Else ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) End If ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_buydays ) ElseIf li_mtrlorigin = 3 Then If li_mtrlorigin_p = 3 Then ld_edate = ld_up_sdate Else ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) End If ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_wfjgdays ) ElseIf li_mtrlorigin = 6 Then If li_mtrlorigin_p = 3 Then ld_edate = ld_up_sdate Else ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) End If ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate( ld_edate, 0 - ld_aheaddays ) End If ldt_sdate = DateTime(ld_sdate,Time(0)) ldt_edate = DateTime(ld_edate,Time(0)) //----------------------------------------- //代用物料 If li_mtrlorigin = 0 Then li_dytype = 0 ElseIf li_mtrlorigin = 2 Then If arg_s_mrp.arg_if_allowuse = 1 Then If uof_get_prdpf_dytype(arg_s_mrp.arg_pmtrlid,arg_s_mrp.arg_ppfcode,arg_s_mrp.arg_pfgroup,arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_wrkgrpid_scll,arg_s_mrp.arg_pfcode,li_dytype,arg_msg) = 0 Then arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg rslt = 0 Goto ext End If Else li_dytype = 0 End If ElseIf li_mtrlorigin = 3 Then li_dytype = 0 ElseIf li_mtrlorigin = 6 Then li_dytype = 0 End If // If arg_s_mrp.arg_ifcfg = 1 Then li_ifmainmtrlid = 0 ld_cmplqty = arg_s_mrp.arg_cmplqty arr_mxt = UpperBound(arg_s_mtrl.mtrlid) ld_samerqqty = 0 Else If arg_s_mrp.arg_mtrlid = ll_mtrlid_order Then ld_cmplqty = arg_s_mrp.arg_cmplqty li_ifmainmtrlid = 1 Else li_ifmainmtrlid = 0 If arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) Then //改写存储过程 If sys_option_if_newmrp = 0 Then Declare sp_qty Procedure For sp_order_ml_mrp_qty @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_orderid = :arg_s_mrp.arg_orderid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_if_otherrq_mrpaudit = :if_otherrq_mrpaudit, @arg_if_wqty_norq = :sys_option_if_wqty_norq, @arg_plantype = :li_mtrlorigin, @arg_ref_bqty = :ld_bqty output, @arg_ref_pqty = :ld_pqty output, @arg_ref_wqty = :ld_wqty output, @arg_ref_mqty = :ld_mqty output, @arg_ref_wmqty = :ld_wmqty output, @arg_ref_pqty_nozl = :ld_pqty2 output, @arg_ref_otherrqqty = :ld_otherrqqty output, @arg_ref_rqwfjgqty = :ld_rqwfjgqty output, @arg_ref_rqbuyqty = :ld_rqbuyqty output, @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output, @arg_ref_otherrqqty_sale = :ld_otherrqqty_sale output; Execute sp_qty; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Fetch sp_qty Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_mqty,:ld_wmqty,:ld_pqty2,:ld_otherrqqty,:ld_rqwfjgqty,:ld_rqbuyqty,:ld_otherrqqty_wx,:ld_otherrqqty_sale; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Close sp_qty; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Else Declare sp_qty1 Procedure For sp_order_ml_mrp_qty_new @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_ref_bqty = :ld_bqty output, @arg_ref_pqty = :ld_pqty output, @arg_ref_wqty = :ld_wqty output, @arg_ref_pqty_nozl = :ld_pqty2 output, @arg_ref_otherrqqty = :ld_otherrqqty output, @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output Using mrp_sqlca; Execute sp_qty1; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Fetch sp_qty1 Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_pqty2,:ld_otherrqqty,:ld_otherrqqty_wx; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Close sp_qty1; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Declare sp_qty2 Procedure For sp_order_ml_mrp_qty_new2 @arg_scid = :arg_s_mrp.arg_scid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_ref_mqty = :ld_mqty output, @arg_ref_wmqty = :ld_wmqty output; Execute sp_qty2; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',调用查询库存数量储存过程失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Fetch sp_qty2 Into :ld_mqty,:ld_wmqty; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',库存数量储存过程赋值变量失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Close sp_qty2; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',关闭查询库存数量储存过程失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If // IF uof_get_qty(1,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_qty(2,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF If if_qty_dscrp And ld_pqty > 0 Then //查生产未进仓明细 If uof_get_qty_dscrp(2,arg_s_mrp.arg_ifdate,ldt_edate,arg_s_mrp.arg_scid,arg_s_mrp.arg_orderid,arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,arg_s_mrp.arg_woodcode,arg_s_mrp.arg_pcode,ld_qty_dscrp,arg_msg) = 0 Then arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg rslt = 0 Goto ext End If End If // IF uof_get_qty(3,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_qty(4,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_edate,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // IF if_pqty_not_zl And li_mtrlorigin = 0 THEN // IF uof_get_qty(5,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty2,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // END IF End If if sys_option_if_mrp_dscrp = 1 then Declare sp_pdscrp Procedure For Sp_order_ml_mrp_qty_pdscrp @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_orderid = :arg_s_mrp.arg_orderid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_pdscrp = :ls_pdscrp output Using mrp_sqlca; Execute sp_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',调用查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Fetch sp_pdscrp Into :ls_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Close sp_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If end if arr_mxt = UpperBound(arg_s_mtrl.mtrlid) If arr_mxt = 0 Then ld_samerqqty = 0 lde_sameaddcmplqty = 0 Else For ll_i = 1 To arr_mxt // Date(arg_s_mtrl.sdate[ll_i]) = Date(ldt_sdate) AND & // Date(arg_s_mtrl.edate[ll_i]) = Date(ldt_edate) AND & If arg_s_mtrl.scid[ll_i] = arg_s_mrp.arg_scid And & arg_s_mtrl.orderid[ll_i] = arg_s_mrp.arg_orderid And & arg_s_mtrl.mtrlid[ll_i] = arg_s_mrp.arg_mtrlid And & arg_s_mtrl.status[ll_i] = arg_s_mrp.arg_status And & arg_s_mtrl.woodcode[ll_i] = arg_s_mrp.arg_woodcode And & arg_s_mtrl.pcode[ll_i] = arg_s_mrp.arg_pcode And & arg_s_mtrl.wrkGrpid_scll[ll_i] = arg_s_mrp.arg_wrkgrpid_scll Then If arg_s_mtrl.ifselforder[ll_i] > 0 And arg_s_mtrl.Mtrlorigin[ll_i] = 0 Or arg_s_mtrl.Mtrlorigin[ll_i] > 0 Then if ((li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) ) and li_multtype > 0 then ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i] else ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] end if lde_sameaddcmplqty = lde_sameaddcmplqty + arg_s_mtrl.addcmplqty[ll_i] End If End If Next End If If arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) Then If ifzl_mtrl_not_useqty Or ifzl_mtrl_pwx_not_useqty Or ifwx_mtrl_not_useqty Or ifpack_mtrl_not_useqty Then If li_mtrlorigin = 0 Then If li_ifpack > 0 Then If ifpack_mtrl_not_useqty Then ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True End If End If If li_ifselforder = 2 And li_ifpack = 0 Then If ifzl_mtrl_not_useqty Then ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True End If End If If li_mtrlorigin_p = 3 And ifzl_mtrl_pwx_not_useqty Then ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True End If ElseIf li_mtrlorigin = 2 Then If li_ifpack > 0 Then If ifpack_mtrl_not_useqty Then ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True End If End If ElseIf li_mtrlorigin = 3 Then If ifwx_mtrl_not_useqty Then ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True End If End If End If If if_pqty_not_zl Then ld_pqty2_cmpl = ld_pqty2 Else ld_pqty2_cmpl = 0 End If If if_rqwfjg_useqty Then ld_rqwfjgqty_cmpl = ld_rqwfjgqty Else ld_rqwfjgqty_cmpl = 0 End If If if_rqbuy_useqty Then ld_rqbuyqty_cmpl = ld_rqbuyqty Else ld_rqbuyqty_cmpl = 0 End If //可用数, 不考虑本次的生产 //if li_ifselforder > 0 And li_mtrlorigin = 0 and li_multtype > 0 then 是考虑了本次的生产 //否则 是不考虑本次生产 // ld_ckwareqty = (ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl) - (ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale + ld_samerqqty) If Not if_special_notuse Then if ld_ckwareqty > 0 then if ld_ckwareqty > arg_s_mrp.arg_cmplqty then ld_cmplqty = 0 ld_ckwareqty_af = ld_ckwareqty - arg_s_mrp.arg_cmplqty else ld_cmplqty = arg_s_mrp.arg_cmplqty - ld_ckwareqty ld_ckwareqty_af = 0 end if else ld_cmplqty = arg_s_mrp.arg_cmplqty ld_ckwareqty_af = 0 end if // If ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale >= ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl Then // ld_cmplqty = arg_s_mrp.arg_cmplqty // Else // If ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty > 0 Then // If arg_s_mrp.arg_cmplqty > ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty Then // ld_cmplqty = arg_s_mrp.arg_cmplqty - ( ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty ) // Else // ld_cmplqty = 0 // End If // Else // ld_cmplqty = arg_s_mrp.arg_cmplqty // End If // End If End If //如果有设置‘物料运算倍数基数’, 按倍数生产 //自制需求补足批量模式: //0- 不增补 //1- 补足到最小经济生产批量 //2- 补足到最小经济生产批量的整倍数 //3- (现库存减需求后的可用数少于库存下限时)补足到库存上限且不少于最小经济批量 if (li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) then choose case li_multtype case 0 case 1 if ld_cmplqty > 0 then if ld_cmplqty < lde_eoq then lde_addcmplqty = lde_eoq - ld_cmplqty ld_cmplqty = lde_eoq end if end if case 2 if ld_cmplqty > 0 then if mod(ld_cmplqty, lde_eoq) > 0 then lde_addcmplqty = lde_eoq - mod(ld_cmplqty, lde_eoq) ld_cmplqty = ld_cmplqty + (lde_eoq - mod(ld_cmplqty, lde_eoq)) end if end if case 3 if ld_cmplqty > 0 then if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产 if lde_eoq > lde_maxqty + ld_cmplqty then lde_addcmplqty = lde_eoq - ld_cmplqty else lde_addcmplqty = lde_maxqty end if else //不小于的只考虑经济批量 if lde_eoq > ld_cmplqty then //不足经济批量的补足 lde_addcmplqty = lde_eoq - ld_cmplqty else lde_addcmplqty = 0 end if end if ld_cmplqty = ld_cmplqty + lde_addcmplqty //ld_cmplqty = max(lde_eoq, lde_maxqty + ld_cmplqty) else if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产 if lde_eoq > lde_maxqty then lde_addcmplqty = lde_eoq else lde_addcmplqty = lde_maxqty end if ld_cmplqty = ld_cmplqty + lde_addcmplqty end if end if end choose end if Else ld_cmplqty = arg_s_mrp.arg_cmplqty End If End If End If //运算结果 arr_mxt++ arg_s_mtrl.scid[arr_mxt] = arg_s_mrp.arg_scid arg_s_mtrl.orderid[arr_mxt] = arg_s_mrp.arg_orderid arg_s_mtrl.mtrlid[arr_mxt] = arg_s_mrp.arg_mtrlid arg_s_mtrl.status[arr_mxt] = arg_s_mrp.arg_status arg_s_mtrl.woodcode[arr_mxt] = arg_s_mrp.arg_woodcode arg_s_mtrl.pcode[arr_mxt] = arg_s_mrp.arg_pcode arg_s_mtrl.pfcode[arr_mxt] = ls_pfcode_local //arg_pfcode arg_s_mtrl.qty[arr_mxt] = arg_s_mrp.arg_qty arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty arg_s_mtrl.plantype[arr_mxt] = li_mtrlorigin arg_s_mtrl.mqty[arr_mxt] = ld_mqty arg_s_mtrl.wmqty[arr_mxt] = ld_wmqty arg_s_mtrl.bqty[arr_mxt] = ld_bqty arg_s_mtrl.wqty[arr_mxt] = ld_wqty arg_s_mtrl.pqty[arr_mxt] = ld_pqty arg_s_mtrl.pqty2[arr_mxt] = ld_pqty2 arg_s_mtrl.rqwfjgqty[arr_mxt] = ld_rqwfjgqty arg_s_mtrl.rqbuyqty[arr_mxt] = ld_rqbuyqty //arg_s_mtrl.pqtydscrp[arr_mxt] = ld_qty_dscrp arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty arg_s_mtrl.otherrqqty_wx[arr_mxt] = ld_otherrqqty_wx arg_s_mtrl.otherrqqty_sale[arr_mxt] = ld_otherrqqty_sale arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.ckwareqty[arr_mxt] = ld_ckwareqty arg_s_mtrl.addcmplqty[arr_mxt] = lde_addcmplqty //由补足方式额外增加的数 arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp //有可用数不用计算开始日期 If ld_cmplqty = 0 Then arg_s_mtrl.sdate[arr_mxt] = ldt_edate Else arg_s_mtrl.sdate[arr_mxt] = ldt_sdate End If arg_s_mtrl.edate[arr_mxt] = ldt_edate arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype arg_s_mtrl.unit[arr_mxt] = ls_unit arg_s_mtrl.Mtrlorigin[arr_mxt] = li_mtrlorigin arg_s_mtrl.iffp[arr_mxt] = li_iffp arg_s_mtrl.mtrlprp[arr_mxt] = li_mtrlprp arg_s_mtrl.ifselforder[arr_mxt] = li_ifselforder arg_s_mtrl.gydscrp[arr_mxt] = arg_s_mrp.arg_gydscrp arg_s_mtrl.pfklmode[arr_mxt] = arg_s_mrp.arg_pfklmode arg_s_mtrl.pfgroup[arr_mxt] = arg_s_mrp.arg_pfgroup arg_s_mtrl.pfgroupmode[arr_mxt] = arg_s_mrp.arg_pfgroupmode arg_s_mtrl.ifcfg[arr_mxt] = arg_s_mrp.arg_ifcfg arg_s_mtrl.ifpack[arr_mxt] = li_ifpack arg_s_mtrl.ifpackpro[arr_mxt] = li_ifpackpro arg_s_mtrl.mtrlordertype[arr_mxt] = li_ordertype arg_s_mtrl.ifpackpz[arr_mxt] = li_ifpackpz arg_s_mtrl.mtrlsectype[arr_mxt] = ls_mtrlsectype arg_s_mtrl.zxmtrlmode[arr_mxt] = ls_zxmtrlmode arg_s_mtrl.usermtrlmode[arr_mxt] = ls_usermtrlmode arg_s_mtrl.dytype[arr_mxt] = li_dytype arg_s_mtrl.ppfcode[arr_mxt] = arg_s_mrp.arg_ppfcode arg_s_mtrl.pcmplqty[arr_mxt] = arg_s_mrp.arg_pqty arg_s_mtrl.SonLoss[arr_mxt] = arg_s_mrp.arg_SonLoss arg_s_mtrl.SonDECLoss[arr_mxt] = arg_s_mrp.arg_SonDECLoss arg_s_mtrl.scllLoss[arr_mxt] = arg_s_mrp.arg_scllLoss arg_s_mtrl.scllDECLoss[arr_mxt] = arg_s_mrp.arg_scllDECLoss arg_s_mtrl.scllqtytype[arr_mxt] = arg_s_mrp.arg_scllqtytype arg_s_mtrl.standardrqqty[arr_mxt] = arg_s_mrp.arg_strandqty arg_s_mtrl.scllqty[arr_mxt] = arg_s_mrp.arg_scllqty arg_s_mtrl.if_follow[arr_mxt] = arg_s_mrp.arg_if_follow arg_s_mtrl.lasthour[arr_mxt] = arg_s_mrp.arg_lasthour If IsNull(arg_s_mrp.arg_Sonscale) Then arg_s_mrp.arg_Sonscale = 0 arg_s_mtrl.Sonscale[arr_mxt] = arg_s_mrp.arg_Sonscale If li_mtrlorigin = 2 Or li_mtrlorigin = 6 Then arg_s_mtrl.produce_scid[arr_mxt] = arg_s_mrp.arg_scid Else arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl End If If ll_ifbj_task = 0 Then arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl arg_s_mtrl.wrkGrpid_scll[arr_mxt] = arg_s_mrp.arg_wrkgrpid_scll Else If ll_wrkgrpid_mtrl > 0 Then arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ins_produce_wrkgrpid_bj End If If li_mtrlorigin = 2 Then If deep = 1 Then arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ins_produce_wrkgrpid_bj Else arg_s_mtrl.produce_wrkgrpid[arr_mxt] = 0 End If End If arg_s_mtrl.wrkGrpid_scll[arr_mxt] = ins_wrkGrpid_scll_bj End If arg_s_mtrl.lp[arr_mxt] = arg_lp arg_s_mtrl.ifmainmtrlid[arr_mxt] = li_ifmainmtrlid arg_s_mtrl.pmtrlid[arr_mxt] = arg_s_mrp.arg_pmtrlid arg_s_mtrl.ifchanged[arr_mxt] = 0 //yyx 20110617 If ld_cmplqty < 0 Then ld_cmplqty = 0 //IF ld_cmplqty <= 0 THEN // rslt = 1 // GOTO ext //END IF Choose Case li_mtrlorigin //采购或客户来料 Case 2 rslt = 1 Goto ext Case 6 If li_mtrlprp = 2 Or li_mtrlprp = 8 Then rslt = 1 Goto ext End If Case 0 If ll_scid_mtrl <> arg_s_mrp.arg_scid And ll_ifbj_task = 0 Then rslt = 1 Goto ext Else If arg_s_mrp.arg_ifcfg = 0 And (li_ifselforder = 1 Or li_ifselforder = 3) And li_ifmainmtrlid = 0 Then rslt = 1 Goto ext End If End If Case 3 If ll_scid_mtrl <> arg_s_mrp.arg_scid And ll_ifbj_task = 0 Then rslt = 1 Goto ext Else If arg_s_mrp.arg_ifcfg = 0 And li_ifselforder = 1 And li_ifmainmtrlid = 0 Then rslt = 1 Goto ext End If End If End Choose Long count,ll_j Decimal cmpl_qty,ld_cmpl_qty_p s_pfmx ls_s_pfmx[] s_mtrlcfg_expr s_mtrlcfg[] Long ll_cfg,ll_cnt_s_mtrlcfg count = 0 //配置运算 If li_statusflag = 2 And arg_s_mrp.arg_ifcfg = 0 And li_ifpzpf = 0 Then If arg_s_mrp.arg_status = '' Then arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查' rslt = 0 Goto ext End If //分解配置 f_checkpz_general(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,s_mtrlcfg) // f_checkpz(arg_s_mrp.arg_status,s_mtrlcfg) // ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg) If ll_cnt_s_mtrlcfg = 0 Then count = 0 Else For ll_cfg = 1 To ll_cnt_s_mtrlcfg count++ ls_s_pfmx[count].sonmtrlid = arg_s_mrp.arg_mtrlid ls_s_pfmx[count].status = s_mtrlcfg[ll_cfg].cfgname ls_s_pfmx[count].woodcode = arg_s_mrp.arg_woodcode ls_s_pfmx[count].pcode = arg_s_mrp.arg_pcode ls_s_pfmx[count].sonpfcode = s_mtrlcfg[ll_cfg].cfgname ls_s_pfmx[count].ifcfg = 1 ls_s_pfmx[count].wrkGrpid = ll_wrkgrpid_mtrl ls_s_pfmx[count].pfklmode = '' ls_s_pfmx[count].pfgroup = '' ls_s_pfmx[count].pfgroupmode = '' ls_s_pfmx[count].Sonscale = Dec(s_mtrlcfg[ll_cfg].qty) * ld_cmplqty ls_s_pfmx[count].baseqty = 1 ls_s_pfmx[count].buyarg = 1 ls_s_pfmx[count].SonLoss = 0 ls_s_pfmx[count].ifover = 0 ls_s_pfmx[count].dipztype = 0 ls_s_pfmx[count].mrp_unit = 0 ls_s_pfmx[count].scllLoss = 0 ls_s_pfmx[count].scllDECLoss = 0 ls_s_pfmx[count].scllqtytype = 0 ls_s_pfmx[count].if_follow = 0 ls_s_pfmx[count].lasthour = 0 Next End If If count = 0 Then arg_msg = '物料分拆配置失败,请检查配置内容' rslt = 0 Goto ext End If //查询附加常规清单 cnt = 0 Select count(*) Into :cnt From u_mtrl_pf Where ( u_mtrl_pf.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询组合配置产品附加默认清单失败,请检查是否已建立默认清单' rslt = 0 Goto ext End If If cnt > 1 Then arg_msg = '组合配置产品附加默认清单只能设置1个,请检查资料' rslt = 0 Goto ext End If If cnt = 1 Then Declare pf_cur_dft Cursor For Select u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.wrkGrpid, u_PrdPF.dscrp, u_PrdPF.pfklmode, u_PrdPF.pfgroup, u_PrdPF.pfgroupmode, 0, u_PrdPF.advancetime, u_PrdPF.baseqty, u_PrdPF.buyarg, u_mtrldef.mrptype, u_mtrldef.mrparg, u_PrdPF.sonlossstr, u_prdpf.ifover, u_prdpf.dipztype, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_sale, u_mtrldef.rate_scll, u_prdpf.scllloss, u_prdpf.sclldecloss, u_prdpf.scllqtytype, u_prdpf.if_follow, u_prdpf.lasthour From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_mtrl_pf.ifdi = 0 ) And ( u_mtrl_pf.ifdft = 1 ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.mtrlid = u_mtrldef.mtrlid ) Order By u_PrdPF.printid; Open pf_cur_dft; count++ Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Do While sqlca.SQLCode = 0 count++ Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Loop count = count - 1 Close pf_cur_dft; End If Else //使用个性清单yyx20120823 If ll_saletaskmx_pf_cnt > 0 Then Declare saletaskmxpf_cur Cursor For Select u_saletaskmx_pf.Sonscale/u_saletaskmx_pf.Sonscale_fm, 0, 0, u_saletaskmx_pf.SonMtrlid, isnull(u_mtrl_pf.pfcode,'[常规]'), u_saletaskmx_pf.status, u_saletaskmx_pf.woodcode, u_saletaskmx_pf.pcode, 0, '', '', '', '', 0, 0, 1, 0, u_mtrldef.mrptype, u_mtrldef.mrparg, '', 0, 0, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_sale, u_mtrldef.rate_scll, 0, 0, 0, 0, 0 From u_saletaskmx_pf left Outer join u_mtrl_pf on u_saletaskmx_pf.sonmtrlid = u_mtrl_pf.mtrlid And u_mtrl_pf.ifdft = 1, u_mtrldef Where ( u_saletaskmx_pf.scid = :arg_s_mrp.arg_scid ) And ( u_saletaskmx_pf.taskid = :ll_taskid_order ) And ( u_saletaskmx_pf.printid = :ll_taskmxid_order ) And ( u_saletaskmx_pf.sonmtrlid = u_mtrldef.mtrlid ) Order By u_saletaskmx_pf.sonmtrlid; Open saletaskmxpf_cur; count++ Fetch saletaskmxpf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Do While sqlca.SQLCode = 0 count++ Fetch saletaskmxpf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Loop count = count - 1 Close saletaskmxpf_cur; End If Declare pf_cur Cursor For Select u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.wrkGrpid, u_PrdPF.dscrp, u_PrdPF.pfklmode, u_PrdPF.pfgroup, u_PrdPF.pfgroupmode, 0, u_PrdPF.advancetime, u_PrdPF.baseqty, u_PrdPF.buyarg, u_mtrldef.mrptype, u_mtrldef.mrparg, u_PrdPF.sonlossstr, u_prdpf.ifover, u_prdpf.dipztype, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_sale, u_mtrldef.rate_scll, u_prdpf.scllloss, u_prdpf.sclldecloss, u_prdpf.scllqtytype, u_prdpf.if_follow, u_prdpf.lasthour From u_PrdPF,u_mtrldef,u_mtrl_pf Where ( u_mtrl_pf.pfcode = :arg_s_mrp.arg_pfcode ) And ( u_mtrl_pf.mtrlid = :arg_s_mrp.arg_mtrlid ) And ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_mtrldef.ifmrp = 1 ) And ( :ll_saletaskmx_pf_cnt = 0 Or :ll_saletaskmx_pf_cnt > 0 And u_mtrldef.ifpack = 0 ) Order By u_PrdPF.printid; Open pf_cur; count++ Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Do While sqlca.SQLCode = 0 count++ Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; Loop count = count - 1 Close pf_cur; If count = 0 Then rslt = 1 Goto ext End If End If Decimal ld_qty_scll,ld_qty_cmpl,ld_qty_standard,ld_qty_cmpl_sonloss Decimal ld_sonloss String ls_status_son,ls_woodcode_son,ls_pcode_son Long tem_long s_mrp_arg s_mrp_arg1 For ll_j = 1 To count ld_qty_scll = 0 ld_qty_cmpl = 0 ld_sonloss = 0 ld_qty_standard = 0 ld_qty_cmpl_sonloss = 0 If ls_s_pfmx[ll_j].ifcfg = 0 Then ld_qty_standard = (ld_cmplqty/ld_cmpqty)/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale ld_qty_cmpl_sonloss = ld_cmplqty //yyx20110802 计算损耗率用上级数量计算 If Trim(ls_s_pfmx[ll_j].sonlossstr) = '' Then ld_sonloss = ls_s_pfmx[ll_j].SonLoss Else If uof_get_prdpf_sonloss(Trim(ls_s_pfmx[ll_j].sonlossstr),ld_qty_cmpl_sonloss,ld_sonloss) = 0 Then ld_sonloss = 100 //非法 rslt = 0 arg_msg = '非法的损耗率,可能损耗率公式有问题,请检查' Goto ext End If If ld_sonloss > 1 Or ld_sonloss < 0 Then ld_sonloss = 100 //非法 rslt = 0 arg_msg = '非法的损耗率,可能损耗率公式有问题,请检查' Goto ext End If End If If ld_sonloss < 1 Then If ls_s_pfmx[ll_j].baseqty > 1 Then ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10)) Else If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then ld_qty_scll = Round(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,ls_s_pfmx[ll_j].u_mtrldef_mrparg) Else If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10)) Else tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10) * tem_long)/tem_long ld_qty_scll = Round(ld_qty_scll , ls_s_pfmx[ll_j].u_mtrldef_mrparg) End If End If End If If ls_s_pfmx[ll_j].buyarg = 0 Then ls_s_pfmx[ll_j].buyarg = 1 ld_qty_cmpl = ld_qty_scll * ls_s_pfmx[ll_j].buyarg ld_cmpl_qty_p = ld_cmplqty //按辅助单位补数 Choose Case ls_s_pfmx[ll_j].mrp_unit Case 1 If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_buy) * ls_s_pfmx[ll_j].rate_unit_buy End If Case 2 If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_scll) * ls_s_pfmx[ll_j].rate_unit_scll End If Case 3 If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_sale) * ls_s_pfmx[ll_j].rate_unit_sale End If End Choose Else ld_qty_scll = 0 ld_qty_cmpl = 0 ld_cmpl_qty_p = 0 ld_sonloss = 0 End If Else ld_qty_scll = ls_s_pfmx[ll_j].Sonscale ld_qty_cmpl = ld_qty_scll ld_cmpl_qty_p = ld_cmplqty ld_sonloss = ls_s_pfmx[ll_j].SonLoss End If Choose Case ls_s_pfmx[ll_j].scllqtytype Case 0 ls_s_pfmx[ll_j].scllqty = ld_qty_scll Case 1 ls_s_pfmx[ll_j].scllqty = ld_qty_standard Case 2 If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then ls_s_pfmx[ll_j].scllqty = Round(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,ls_s_pfmx[ll_j].u_mtrldef_mrparg) Else If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,10)) Else tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,10) * tem_long)/tem_long ls_s_pfmx[ll_j].scllqty = Round(ls_s_pfmx[ll_j].scllqty , ls_s_pfmx[ll_j].u_mtrldef_mrparg) End If End If End Choose If ls_s_pfmx[ll_j].ifover = 1 Then Choose Case ls_s_pfmx[ll_j].dipztype Case 0 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = '' ls_pcode_son = '' Case 1 ls_status_son = '' ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = '' Case 2 ls_status_son = '' ls_woodcode_son = '' ls_pcode_son = arg_s_mrp.arg_pcode Case 3 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = '' Case 4 ls_status_son = '' ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = arg_s_mrp.arg_pcode Case 5 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = '' ls_pcode_son = arg_s_mrp.arg_pcode Case 6 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = arg_s_mrp.arg_pcode End Choose Else ls_status_son = ls_s_pfmx[ll_j].status ls_woodcode_son = ls_s_pfmx[ll_j].woodcode ls_pcode_son = ls_s_pfmx[ll_j].pcode End If s_mrp_arg1.arg_scid = arg_s_mrp.arg_scid s_mrp_arg1.arg_orderid = arg_s_mrp.arg_orderid s_mrp_arg1.arg_ifdate = arg_s_mrp.arg_ifdate s_mrp_arg1.arg_pmtrlid = arg_s_mrp.arg_mtrlid s_mrp_arg1.arg_mtrlid = ls_s_pfmx[ll_j].sonmtrlid s_mrp_arg1.arg_status = ls_status_son s_mrp_arg1.arg_woodcode = ls_woodcode_son s_mrp_arg1.arg_pcode = ls_pcode_son s_mrp_arg1.arg_pfcode = ls_s_pfmx[ll_j].sonpfcode s_mrp_arg1.arg_qty = ld_qty_scll s_mrp_arg1.arg_cmplqty = ld_qty_cmpl s_mrp_arg1.arg_ppfcode = arg_s_mrp.arg_pfcode s_mrp_arg1.arg_pqty = ld_cmpl_qty_p s_mrp_arg1.arg_wrkgrpid_scll = ls_s_pfmx[ll_j].wrkGrpid s_mrp_arg1.arg_up_sdate = ldt_sdate s_mrp_arg1.arg_up_rqdate = ldt_edate s_mrp_arg1.arg_if_allowuse = arg_s_mrp.arg_if_allowuse s_mrp_arg1.arg_gydscrp = ls_s_pfmx[ll_j].dscrp s_mrp_arg1.arg_pfklmode = ls_s_pfmx[ll_j].pfklmode s_mrp_arg1.arg_pfgroup = ls_s_pfmx[ll_j].pfgroup s_mrp_arg1.arg_pfgroupmode = ls_s_pfmx[ll_j].pfgroupmode s_mrp_arg1.arg_ifcfg = ls_s_pfmx[ll_j].ifcfg s_mrp_arg1.arg_advancetime = ls_s_pfmx[ll_j].advancetime s_mrp_arg1.arg_Sonscale = ls_s_pfmx[ll_j].Sonscale s_mrp_arg1.arg_SonLoss = ld_sonloss s_mrp_arg1.arg_SonDECLoss = ls_s_pfmx[ll_j].SonDECLoss s_mrp_arg1.arg_scllLoss = ls_s_pfmx[ll_j].scllLoss s_mrp_arg1.arg_scllDECLoss = ls_s_pfmx[ll_j].scllDECLoss s_mrp_arg1.arg_scllqtytype = ls_s_pfmx[ll_j].scllqtytype s_mrp_arg1.arg_scllqty = ls_s_pfmx[ll_j].scllqty s_mrp_arg1.arg_if_follow = ls_s_pfmx[ll_j].if_follow s_mrp_arg1.arg_lasthour = ls_s_pfmx[ll_j].lasthour s_mrp_arg1.arg_strandqty = ld_qty_standard rslt = uof_cmpl_rqmtrl(arg_lp + 1,s_mrp_arg1,arg_s_mtrl,arg_msg) //递归处理下级 If rslt = 0 Then Goto ext End If Next ext: Return rslt end function public function integer uof_cmpl_rqmtrl_re (long arg_lp, integer arg_plantype, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//解锁修改重算 Int rslt = 1 Int li_pfflag Long arr_mxt Long ll_i Boolean if_special_notuse = False Int li_ifpzpf Long ll_pzpfcnt String ls_pfcode_local Long ll_ifbj_task int li_multtype decimal lde_eoq, lde_maxqty, lde_minqty decimal lde_addcmplqty, lde_sameaddcmplqty string ls_pdscrp deep++ IF deep > 5000 THEN arg_msg = '递归太深'+String(deep) rslt = 0 GOTO ext END IF String ls_mtrlcode,ls_mtrlname,ls_mtrlmode String ls_unit,ls_mtrltype Int li_mtrlorigin,li_ifselforder,li_mtrlprp,li_statusflag,li_mtrlorigin_p Long ll_scid_mtrl,ll_wrkgrpid_mtrl Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays Date ld_sdate,ld_edate,ld_rqdate,ld_up_sdate DateTime ldt_sdate,ldt_edate Int li_ifpack,li_ifpackpro,li_ordertype,li_ifpackpz,li_iffp Decimal ld_cmpqty String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Select u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_mtrldef.mtrltype, u_mtrldef.unit, u_mtrldef.Mtrlorigin, u_mtrldef.scid, u_mtrldef.dftwrkgrpid, u_mtrldef.buydays, u_mtrldef.orderdays, u_mtrldef.wfjgdays, u_mtrldef.aheaddays, u_mtrldef.ifselforder, u_mtrldef.mtrlprp, u_mtrldef.statusflag, u_mtrldef.ifpack, u_mtrldef.ifpackpro, u_mtrldef.ordertype, u_mtrldef.ifpackpz, u_mtrldef.cmpqty, u_mtrldef.mtrlsectype, u_mtrldef.zxmtrlmode, u_mtrldef.usermtrlmode, u_mtrldef.iffp, u_mtrldef.multtype, u_mtrldef.eoq, u_mtrldef.maxqty, u_mtrldef.minqty Into :ls_mtrlcode, :ls_mtrlname, :ls_mtrlmode, :ls_mtrltype, :ls_unit, :li_mtrlorigin, :ll_scid_mtrl, :ll_wrkgrpid_mtrl, :ld_buydays, :ld_orderdays, :ld_wfjgdays, :ld_aheaddays, :li_ifselforder, :li_mtrlprp, :li_statusflag, :li_ifpack, :li_ifpackpro, :li_ordertype, :li_ifpackpz, :ld_cmpqty, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode, :li_iffp, :li_multtype, :lde_eoq, :lde_maxqty, :lde_minqty From u_mtrldef Where mtrlid = :arg_s_mrp.arg_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If IF arg_s_mrp.arg_pmtrlid > 0 THEN SELECT mtrlorigin INTO :li_mtrlorigin_p FROM u_mtrldef Where mtrlid = :arg_s_mrp.arg_pmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询上级物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF ld_cmpqty = 0 THEN ld_cmpqty = 1 IF uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF Decimal ld_advancetime_max_next //自制下级最大提前期 //计算需求日期 ld_rqdate = Date(String(arg_s_mrp.arg_up_rqdate,'yyyy-mm-dd')) ld_up_sdate = Date(String(arg_s_mrp.arg_up_sdate,'yyyy-mm-dd')) IF arg_plantype = 0 THEN IF li_mtrlorigin_p = 3 THEN ld_edate = ld_up_sdate ELSE ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_s_mrp.arg_advancetime ) END IF //取下级最大提前期 IF uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 THEN arg_msg = ls_mtrlcode + arg_msg rslt = 0 GOTO ext END IF ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next ) ELSEIF arg_plantype = 2 THEN IF li_mtrlorigin_p = 3 THEN ld_edate = ld_up_sdate ELSE ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) END IF ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_buydays ) ELSEIF arg_plantype = 3 THEN IF li_mtrlorigin_p = 3 THEN ld_edate = ld_up_sdate ELSE ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) END IF ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_wfjgdays ) ELSEIF arg_plantype = 6 THEN IF li_mtrlorigin_p = 3 THEN ld_edate = ld_up_sdate ELSE ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime ) END IF ld_edate = RelativeDate( ld_edate,0 - ld_orderdays ) ld_sdate = RelativeDate ( ld_edate, 0 - ld_aheaddays ) END IF ldt_sdate = DateTime(ld_sdate,Time(0)) ldt_edate = DateTime(ld_edate,Time(0)) // Decimal ld_cmplqty Decimal ld_mqty Decimal ld_wmqty Decimal ld_bqty Decimal ld_wqty Decimal ld_pqty Decimal ld_ckwareqty, ld_ckwareqty_af Decimal ld_pqty2,ld_pqty2_cmpl Decimal ld_rqwfjgqty,ld_rqwfjgqty_cmpl Decimal ld_rqbuyqty,ld_rqbuyqty_cmpl Decimal ld_otherrqqty,ld_otherrqqty_wx,ld_otherrqqty_sale,ld_samerqqty IF arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) THEN //改写存储过程 IF sys_option_if_newmrp = 0 THEN DECLARE sp_qty PROCEDURE FOR sp_order_ml_mrp_qty @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_orderid = :arg_s_mrp.arg_orderid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_if_otherrq_mrpaudit = :if_otherrq_mrpaudit, @arg_if_wqty_norq = :sys_option_if_wqty_norq, @arg_plantype = :li_mtrlorigin, @arg_ref_bqty = :ld_bqty output, @arg_ref_pqty = :ld_pqty output, @arg_ref_wqty = :ld_wqty output, @arg_ref_mqty = :ld_mqty output, @arg_ref_wmqty = :ld_wmqty output, @arg_ref_pqty_nozl = :ld_pqty2 output, @arg_ref_otherrqqty = :ld_otherrqqty output, @arg_ref_rqwfjgqty = :ld_rqwfjgqty output, @arg_ref_rqbuyqty = :ld_rqbuyqty output, @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output, @arg_ref_otherrqqty_sale = :ld_otherrqqty_sale output; EXECUTE sp_qty; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FETCH sp_qty Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_mqty,:ld_wmqty,:ld_pqty2,:ld_otherrqqty,:ld_rqwfjgqty,:ld_rqbuyqty,:ld_otherrqqty_wx,:ld_otherrqqty_sale; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CLOSE sp_qty; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE DECLARE sp_qty1 PROCEDURE FOR sp_order_ml_mrp_qty_new @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_ref_bqty = :ld_bqty output, @arg_ref_pqty = :ld_pqty output, @arg_ref_wqty = :ld_wqty output, @arg_ref_pqty_nozl = :ld_pqty2 output, @arg_ref_otherrqqty = :ld_otherrqqty output, @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output Using mrp_sqlca; EXECUTE sp_qty1; IF mrp_sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 GOTO ext END IF FETCH sp_qty1 Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_pqty2,:ld_otherrqqty,:ld_otherrqqty_wx; IF mrp_sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText rslt = 0 GOTO ext END IF CLOSE sp_qty1; IF mrp_sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 GOTO ext END IF DECLARE sp_qty2 PROCEDURE FOR sp_order_ml_mrp_qty_new2 @arg_scid = :arg_s_mrp.arg_scid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_ref_mqty = :ld_mqty output, @arg_ref_wmqty = :ld_wmqty output; EXECUTE sp_qty2; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',调用查询库存数量储存过程失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FETCH sp_qty2 Into :ld_mqty,:ld_wmqty; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',库存数量储存过程赋值变量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CLOSE sp_qty2; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',关闭查询库存数量储存过程失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF // IF uof_get_qty(1,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_qty(2,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_qty(3,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_qty(4,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_edate,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // // IF if_pqty_not_zl And li_mtrlorigin = 0 THEN // IF uof_get_qty(5,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty2,arg_msg) = 0 THEN // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg // rslt = 0 // GOTO ext // END IF // END IF if sys_option_if_mrp_dscrp = 1 then Declare sp_pdscrp Procedure For Sp_order_ml_mrp_qty_pdscrp @arg_ifdate = :arg_s_mrp.arg_ifdate, @arg_enddate = :ldt_edate, @arg_scid = :arg_s_mrp.arg_scid, @arg_orderid = :arg_s_mrp.arg_orderid, @arg_mtrlid = :arg_s_mrp.arg_mtrlid, @arg_status = :arg_s_mrp.arg_status, @arg_woodcode = :arg_s_mrp.arg_woodcode, @arg_pcode = :arg_s_mrp.arg_pcode, @arg_pdscrp = :ls_pdscrp output Using mrp_sqlca; Execute sp_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',调用查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Fetch sp_pdscrp Into :ls_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If Close sp_pdscrp; If mrp_sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText rslt = 0 Goto ext End If end if END IF IF deep = 1 THEN ld_cmplqty = arg_s_mrp.arg_cmplqty ELSE arr_mxt = UpperBound(arg_s_mtrl.mtrlid) IF arr_mxt = 0 THEN ld_samerqqty = 0 lde_sameaddcmplqty = 0 ELSE FOR ll_i = 1 To arr_mxt IF arg_s_mtrl.scid[ll_i] = arg_s_mrp.arg_scid And & arg_s_mtrl.orderid[ll_i] = arg_s_mrp.arg_orderid And & arg_s_mtrl.mtrlid[ll_i] = arg_s_mrp.arg_mtrlid And & arg_s_mtrl.status[ll_i] = arg_s_mrp.arg_status And & arg_s_mtrl.woodcode[ll_i] = arg_s_mrp.arg_woodcode And & arg_s_mtrl.pcode[ll_i] = arg_s_mrp.arg_pcode And & arg_s_mtrl.wrkgrpid_scll[ll_i] = arg_s_mrp.arg_wrkgrpid_scll THEN IF arg_s_mtrl.ifselforder[ll_i] > 0 And arg_s_mtrl.mtrlorigin[ll_i] = 0 Or arg_s_mtrl.mtrlorigin[ll_i] > 0 THEN if ((li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) ) and li_multtype > 0 then ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i] else ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] end if lde_sameaddcmplqty = lde_sameaddcmplqty + arg_s_mtrl.addcmplqty[ll_i] END IF END IF NEXT END IF IF arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) THEN IF ifzl_mtrl_not_useqty Or ifzl_mtrl_pwx_not_useqty Or ifwx_mtrl_not_useqty Or ifpack_mtrl_not_useqty THEN IF li_mtrlorigin = 0 THEN IF li_ifpack > 0 THEN IF ifpack_mtrl_not_useqty THEN ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True END IF END IF IF li_ifselforder = 2 And li_ifpack = 0 THEN IF ifzl_mtrl_not_useqty THEN ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True END IF END IF IF li_mtrlorigin_p = 3 And ifzl_mtrl_pwx_not_useqty THEN ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True END IF ELSEIF li_mtrlorigin = 2 THEN IF li_ifpack > 0 THEN IF ifpack_mtrl_not_useqty THEN ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True END IF END IF ELSEIF li_mtrlorigin = 3 THEN IF ifwx_mtrl_not_useqty THEN ld_cmplqty = arg_s_mrp.arg_cmplqty if_special_notuse = True END IF END IF END IF IF if_pqty_not_zl THEN ld_pqty2_cmpl = ld_pqty2 ELSE ld_pqty2_cmpl = 0 END IF IF if_rqwfjg_useqty THEN ld_rqwfjgqty_cmpl = ld_rqwfjgqty ELSE ld_rqwfjgqty_cmpl = 0 END IF IF if_rqbuy_useqty THEN ld_rqbuyqty_cmpl = ld_rqbuyqty ELSE ld_rqbuyqty_cmpl = 0 END IF ld_ckwareqty = (ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl) - (ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale + ld_samerqqty) IF Not if_special_notuse THEN if ld_ckwareqty > 0 then if ld_ckwareqty > arg_s_mrp.arg_cmplqty then ld_cmplqty = 0 ld_ckwareqty_af = ld_ckwareqty - arg_s_mrp.arg_cmplqty else ld_cmplqty = arg_s_mrp.arg_cmplqty - ld_ckwareqty ld_ckwareqty_af = 0 end if else ld_cmplqty = arg_s_mrp.arg_cmplqty ld_ckwareqty_af = 0 end if //如果有设置‘物料运算倍数基数’, 按倍数生产 //自制需求补足批量模式: //0- 不增补 //1- 补足到最小经济生产批量 //2- 补足到最小经济生产批量的整倍数 //3- (现库存减需求后的可用数少于库存下限时)补足到库存上限且不少于最小经济批量 if (li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) then choose case li_multtype case 0 case 1 if ld_cmplqty > 0 then if ld_cmplqty < lde_eoq then lde_addcmplqty = lde_eoq - ld_cmplqty ld_cmplqty = lde_eoq end if end if case 2 if ld_cmplqty > 0 then if mod(ld_cmplqty, lde_eoq) > 0 then lde_addcmplqty = lde_eoq - mod(ld_cmplqty, lde_eoq) ld_cmplqty = ld_cmplqty + (lde_eoq - mod(ld_cmplqty, lde_eoq)) end if end if case 3 if ld_cmplqty > 0 then if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产 if lde_eoq > lde_maxqty + ld_cmplqty then lde_addcmplqty = lde_eoq - ld_cmplqty else lde_addcmplqty = lde_maxqty end if else //不小于的只考虑经济批量 if lde_eoq > ld_cmplqty then //不足经济批量的补足 lde_addcmplqty = lde_eoq - ld_cmplqty else lde_addcmplqty = 0 end if end if ld_cmplqty = ld_cmplqty + lde_addcmplqty //ld_cmplqty = max(lde_eoq, lde_maxqty + ld_cmplqty) else if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产 if lde_eoq > lde_maxqty then lde_addcmplqty = lde_eoq else lde_addcmplqty = lde_maxqty end if ld_cmplqty = ld_cmplqty + lde_addcmplqty end if end if end choose end if // IF ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale >= ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl THEN // ld_cmplqty = arg_s_mrp.arg_cmplqty // ELSE // IF ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty > 0 THEN // IF arg_s_mrp.arg_cmplqty > ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty THEN // ld_cmplqty = arg_s_mrp.arg_cmplqty - ( ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty ) // ELSE // ld_cmplqty = 0 // END IF // ELSE // ld_cmplqty = arg_s_mrp.arg_cmplqty // END IF // END IF END IF ELSE ld_cmplqty = arg_s_mrp.arg_cmplqty END IF arr_mxt++ arg_s_mtrl.scid[arr_mxt] = arg_s_mrp.arg_scid arg_s_mtrl.orderid[arr_mxt] = arg_s_mrp.arg_orderid arg_s_mtrl.mtrlid[arr_mxt] = arg_s_mrp.arg_mtrlid arg_s_mtrl.status[arr_mxt] = arg_s_mrp.arg_status arg_s_mtrl.woodcode[arr_mxt] = arg_s_mrp.arg_woodcode arg_s_mtrl.pcode[arr_mxt] = arg_s_mrp.arg_pcode arg_s_mtrl.pfcode[arr_mxt] = arg_s_mrp.arg_pfcode arg_s_mtrl.qty[arr_mxt] = arg_s_mrp.arg_qty arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty arg_s_mtrl.plantype[arr_mxt] = arg_plantype arg_s_mtrl.mqty[arr_mxt] = ld_mqty arg_s_mtrl.wmqty[arr_mxt] = ld_wmqty arg_s_mtrl.bqty[arr_mxt] = ld_bqty arg_s_mtrl.wqty[arr_mxt] = ld_wqty arg_s_mtrl.pqty[arr_mxt] = ld_pqty arg_s_mtrl.pqty2[arr_mxt] = ld_pqty2 arg_s_mtrl.rqwfjgqty[arr_mxt] = ld_rqwfjgqty arg_s_mtrl.rqbuyqty[arr_mxt] = ld_rqbuyqty arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty arg_s_mtrl.otherrqqty_wx[arr_mxt] = ld_otherrqqty_wx arg_s_mtrl.otherrqqty_sale[arr_mxt] = ld_otherrqqty_sale arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.ckwareqty[arr_mxt] = ld_ckwareqty arg_s_mtrl.addcmplqty[arr_mxt] = lde_addcmplqty //由补足方式额外增加的数 arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp //有可用数不用计算开始日期 IF ld_cmplqty = 0 THEN arg_s_mtrl.sdate[arr_mxt] = ldt_edate ELSE arg_s_mtrl.sdate[arr_mxt] = ldt_sdate END IF arg_s_mtrl.edate[arr_mxt] = ldt_edate arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype arg_s_mtrl.unit[arr_mxt] = ls_unit arg_s_mtrl.mtrlorigin[arr_mxt] = arg_plantype arg_s_mtrl.iffp[arr_mxt] = li_iffp arg_s_mtrl.ifselforder[arr_mxt] = li_ifselforder arg_s_mtrl.gydscrp[arr_mxt] = arg_s_mrp.arg_gydscrp arg_s_mtrl.pfklmode[arr_mxt] = arg_s_mrp.arg_pfklmode arg_s_mtrl.pfgroup[arr_mxt] = arg_s_mrp.arg_pfgroup arg_s_mtrl.pfgroupmode[arr_mxt] = arg_s_mrp.arg_pfgroupmode arg_s_mtrl.ifpack[arr_mxt] = li_ifpack arg_s_mtrl.ifpackpro[arr_mxt] = li_ifpackpro arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl arg_s_mtrl.wrkgrpid_scll[arr_mxt] = arg_s_mrp.arg_wrkgrpid_scll arg_s_mtrl.mtrlsectype[arr_mxt] = ls_mtrlsectype arg_s_mtrl.zxmtrlmode[arr_mxt] = ls_zxmtrlmode arg_s_mtrl.usermtrlmode[arr_mxt] = ls_usermtrlmode arg_s_mtrl.sonloss[arr_mxt] = arg_s_mrp.arg_sonloss arg_s_mtrl.sondecloss[arr_mxt] = arg_s_mrp.arg_sondecloss arg_s_mtrl.scllloss[arr_mxt] = arg_s_mrp.arg_scllloss arg_s_mtrl.sclldecloss[arr_mxt] = arg_s_mrp.arg_sclldecloss arg_s_mtrl.scllqtytype[arr_mxt] = arg_s_mrp.arg_scllqtytype arg_s_mtrl.standardrqqty[arr_mxt] = arg_s_mrp.arg_strandqty arg_s_mtrl.scllqty[arr_mxt] = arg_s_mrp.arg_scllqty arg_s_mtrl.if_follow[arr_mxt] = arg_s_mrp.arg_if_follow arg_s_mtrl.lasthour[arr_mxt] = arg_s_mrp.arg_lasthour if isnull(arg_s_mrp.arg_Sonscale) then arg_s_mrp.arg_Sonscale = 0 arg_s_mtrl.Sonscale[arr_mxt] = arg_s_mrp.arg_Sonscale arg_s_mtrl.lp[arr_mxt] = arg_lp arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty arg_s_mtrl.ifmainmtrlid[arr_mxt] = 0 arg_s_mtrl.pmtrlid[arr_mxt] = arg_s_mrp.arg_pmtrlid arg_s_mtrl.ifchanged[arr_mxt] = 0 arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp IF arg_plantype = 0 THEN IF ll_scid_mtrl <> arg_s_mrp.arg_scid THEN rslt = 1 GOTO ext ELSE IF li_ifselforder = 1 THEN rslt = 1 GOTO ext END IF END IF END IF IF arg_plantype = 2 THEN rslt = 1 GOTO ext END IF IF arg_plantype = 3 THEN IF ll_scid_mtrl <> arg_s_mrp.arg_scid THEN rslt = 1 GOTO ext ELSE IF li_ifselforder = 1 THEN rslt = 1 GOTO ext END IF END IF END IF IF arg_plantype = 6 THEN IF li_mtrlprp = 2 Or li_mtrlprp = 8 THEN rslt = 1 GOTO ext END IF END IF END IF IF ld_cmplqty <= 0 THEN rslt = 1 GOTO ext END IF Long count,ll_j s_pfmx ls_s_pfmx[] count = 0 DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.wrkGrpid, u_mtrldef.mtrlorigin, u_PrdPF.dscrp, u_PrdPF.pfklmode, u_PrdPF.pfgroup, u_PrdPF.pfgroupmode, u_PrdPF.advancetime, u_PrdPF.baseqty, u_PrdPF.buyarg, u_mtrldef.mrptype, u_mtrldef.mrparg, u_prdpf.ifover, u_prdpf.dipztype, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_sale, u_mtrldef.rate_scll, u_prdpf.scllloss, u_prdpf.sclldecloss, u_prdpf.scllqtytype, u_prdpf.if_follow, u_prdpf.lasthour FROM u_PrdPF,u_mtrldef WHERE ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_s_mrp.arg_pfcode ) AND ( u_mtrldef.ifmrp = 1 ) AND ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) Order By u_PrdPF.printid; OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].Mtrlorigin,& :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].pfklmode,& :ls_s_pfmx[count].pfgroup,:ls_s_pfmx[count].pfgroupmode,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,& :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,& :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,& :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].Mtrlorigin,& :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].pfklmode,& :ls_s_pfmx[count].pfgroup,:ls_s_pfmx[count].pfgroupmode,& :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,& :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg,& :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,& :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,& :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,& :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,& :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF Decimal ld_qty_scll,ld_qty_cmpl,ld_qty_standard Decimal ld_sonloss String ls_status_son,ls_woodcode_son,ls_pcode_son Long tem_long s_mrp_arg s_mrp_arg1 FOR ll_j = 1 To count ld_qty_scll = 0 ld_qty_cmpl = 0 ld_sonloss = 0 ld_qty_standard = 0 ld_qty_standard = (ld_cmplqty/ld_cmpqty)/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale IF Trim(ls_s_pfmx[ll_j].sonlossstr) = '' THEN ld_sonloss = ls_s_pfmx[ll_j].sonloss ELSE IF uof_get_prdpf_sonloss(Trim(ls_s_pfmx[ll_j].sonlossstr),ld_qty_standard,ld_sonloss) = 0 THEN ld_sonloss = 100 //非法 END IF IF ld_sonloss > 1 Or ld_sonloss < 0 THEN ld_sonloss = 100 //非法 END IF END IF IF ld_sonloss < 1 THEN IF ls_s_pfmx[ll_j].baseqty > 1 THEN ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10)) ELSE IF ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 THEN ld_qty_scll = Round(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg) ELSE IF ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 THEN ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10)) ELSE tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10) * tem_long)/tem_long ld_qty_scll = Round(ld_qty_scll , ls_s_pfmx[ll_j].u_mtrldef_mrparg) END IF END IF END IF IF ls_s_pfmx[ll_j].buyarg = 0 THEN ls_s_pfmx[ll_j].buyarg = 1 ld_qty_cmpl = ld_qty_scll * ls_s_pfmx[ll_j].buyarg //按辅助单位补数 CHOOSE CASE ls_s_pfmx[ll_j].mrp_unit CASE 1 IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_buy) * ls_s_pfmx[ll_j].rate_unit_buy END IF CASE 2 IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_scll) * ls_s_pfmx[ll_j].rate_unit_scll END IF CASE 3 IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_sale) * ls_s_pfmx[ll_j].rate_unit_sale END IF END CHOOSE ELSE ld_qty_scll = 0 ld_qty_cmpl = 0 ld_sonloss = 0 END IF CHOOSE CASE ls_s_pfmx[ll_j].scllqtytype CASE 0 ls_s_pfmx[ll_j].scllqty = ld_qty_scll CASE 1 ls_s_pfmx[ll_j].scllqty = ld_qty_standard CASE 2 IF ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 THEN ls_s_pfmx[ll_j].scllqty = Round(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg) ELSE IF ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 THEN ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,10)) ELSE tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,10) * tem_long)/tem_long ls_s_pfmx[ll_j].scllqty = Round(ls_s_pfmx[ll_j].scllqty , ls_s_pfmx[ll_j].u_mtrldef_mrparg ) END IF END IF END CHOOSE IF ls_s_pfmx[ll_j].ifover = 1 THEN CHOOSE CASE ls_s_pfmx[ll_j].dipztype CASE 0 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = '' ls_pcode_son = '' CASE 1 ls_status_son = '' ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = '' CASE 2 ls_status_son = '' ls_woodcode_son = '' ls_pcode_son = arg_s_mrp.arg_pcode CASE 3 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = '' CASE 4 ls_status_son = '' ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = arg_s_mrp.arg_pcode CASE 5 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = '' ls_pcode_son = arg_s_mrp.arg_pcode CASE 6 ls_status_son = arg_s_mrp.arg_status ls_woodcode_son = arg_s_mrp.arg_woodcode ls_pcode_son = arg_s_mrp.arg_pcode END CHOOSE ELSE ls_status_son = ls_s_pfmx[ll_j].status ls_woodcode_son = ls_s_pfmx[ll_j].woodcode ls_pcode_son = ls_s_pfmx[ll_j].pcode END IF s_mrp_arg1.arg_scid = arg_s_mrp.arg_scid s_mrp_arg1.arg_orderid = arg_s_mrp.arg_orderid s_mrp_arg1.arg_ifdate = arg_s_mrp.arg_ifdate s_mrp_arg1.arg_pmtrlid = arg_s_mrp.arg_mtrlid s_mrp_arg1.arg_mtrlid = ls_s_pfmx[ll_j].SonMtrlid s_mrp_arg1.arg_status = ls_status_son s_mrp_arg1.arg_woodcode = ls_woodcode_son s_mrp_arg1.arg_pcode = ls_pcode_son s_mrp_arg1.arg_pfcode = ls_s_pfmx[ll_j].sonpfcode s_mrp_arg1.arg_qty = ld_qty_scll s_mrp_arg1.arg_cmplqty = ld_qty_cmpl s_mrp_arg1.arg_wrkgrpid_scll = ls_s_pfmx[ll_j].wrkGrpid s_mrp_arg1.arg_up_sdate = ldt_sdate s_mrp_arg1.arg_up_rqdate = ldt_edate s_mrp_arg1.arg_if_allowuse = arg_s_mrp.arg_if_allowuse s_mrp_arg1.arg_gydscrp = ls_s_pfmx[ll_j].dscrp s_mrp_arg1.arg_pfklmode = ls_s_pfmx[ll_j].pfklmode s_mrp_arg1.arg_pfgroup = ls_s_pfmx[ll_j].pfgroup s_mrp_arg1.arg_pfgroupmode = ls_s_pfmx[ll_j].pfgroupmode s_mrp_arg1.arg_advancetime = ls_s_pfmx[ll_j].advancetime s_mrp_arg1.arg_Sonscale = ls_s_pfmx[ll_j].Sonscale s_mrp_arg1.arg_sonloss = ld_sonloss s_mrp_arg1.arg_sondecloss = ls_s_pfmx[ll_j].sondecloss s_mrp_arg1.arg_scllloss = ls_s_pfmx[ll_j].scllloss s_mrp_arg1.arg_sclldecloss = ls_s_pfmx[ll_j].sclldecloss s_mrp_arg1.arg_scllqtytype = ls_s_pfmx[ll_j].scllqtytype s_mrp_arg1.arg_scllqty = ls_s_pfmx[ll_j].scllqty s_mrp_arg1.arg_if_follow = ls_s_pfmx[ll_j].if_follow s_mrp_arg1.arg_lasthour = ls_s_pfmx[ll_j].lasthour s_mrp_arg1.arg_strandqty = ld_qty_standard rslt = uof_cmpl_rqmtrl_re(arg_lp + 1,ls_s_pfmx[ll_j].mtrlorigin,s_mrp_arg1,arg_s_mtrl,arg_msg) //递归处理下级 IF rslt = 0 THEN GOTO ext END IF NEXT ext: RETURN rslt end function public function integer uof_saletaskmx_pf_add (s_saletaskmx_pf arg_s_stpf, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i IF UpperBound(arg_s_stpf.scid) > 0 THEN FOR i = 1 To UpperBound(arg_s_stpf.scid) INSERT INTO u_saletaskmx_pf(scid,taskid,printid,mtrlid,sonmtrlid,status,woodcode,pcode,sonscale) VALUES (:arg_s_stpf.scid[i], :arg_s_stpf.taskid[i], :arg_s_stpf.printid[i], :arg_s_stpf.mtrlid[i], :arg_s_stpf.sonmtrlid[i], :arg_s_stpf.status[i], :arg_s_stpf.woodcode[i], :arg_s_stpf.pcode[i], :arg_s_stpf.sonscale[i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立销售订单明细个性清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_saletaskmx_pf_del (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DELETE FROM u_saletaskmx_pf WHERE u_saletaskmx_pf.scid = :arg_scid AND u_saletaskmx_pf.taskid = :arg_taskid And u_saletaskmx_pf.printid = :arg_printid; 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 uof_add_rqmtrl_scll_find (long arg_p, long arg_p_mtrlid, integer arg_ifpackpro, string arg_status, string arg_woodcode, string arg_pcode, s_order_ml_rqmtrl arg_s_mtrl, ref s_order_ml_rqmtrl_scll arg_s_mtrl_scll, long arg_e, ref string arg_msg);Int rslt = 1 Long ll_i,i Long ll_p Long ll_lp_f Long ll_p_end,ll_p_start Boolean lb_f Boolean lb_f_lb = False Int li_ft DO WHILE arg_p <> -1 ll_p_start = 0 ll_p_end = 0 lb_f = False lb_f_lb = False li_ft = 0 ll_lp_f = 0 FOR i = arg_p To arg_e //UpperBound(arg_s_mtrl.mtrlid) // IF i = UpperBound(arg_s_mtrl.mtrlid) THEN IF i = arg_e THEN IF Not lb_f THEN ll_p_start = arg_e END IF ll_p_end = arg_e //UpperBound(arg_s_mtrl.mtrlid) EXIT END IF IF arg_s_mtrl.qty[i] = 0 THEN CONTINUE // IF arg_ifpackpro = 4 And arg_s_mtrl.ifcfg[i] = 1 THEN CONTINUE IF arg_s_mtrl.ifcfg[i] = 1 THEN CONTINUE //找下级最后行 IF lb_f THEN IF li_ft = 1 And arg_s_mtrl.lp[i] < ll_lp_f THEN lb_f_lb = True ll_p_end = i EXIT ELSEIF li_ft = 2 And arg_s_mtrl.lp[i] <= ll_lp_f THEN lb_f_lb = True ll_p_end = i EXIT END IF END IF //找开始级别 IF Not lb_f And arg_s_mtrl.pmtrlid[i] = arg_p_mtrlid THEN IF arg_ifpackpro <> 3 And arg_ifpackpro <> 4 THEN lb_f = True ll_lp_f = arg_s_mtrl.lp[i] ll_p_start = i li_ft = 1 ELSEIF arg_ifpackpro = 3 And Trim(arg_s_mtrl.status[i]) = Trim(arg_status) And Trim(arg_s_mtrl.woodcode[i]) = Trim(arg_woodcode) And Trim(arg_s_mtrl.pcode[i]) = Trim(arg_pcode) THEN lb_f = True ll_lp_f = arg_s_mtrl.lp[i] ll_p_start = i + 1 li_ft = 2 ELSEIF arg_ifpackpro = 4 THEN lb_f = True ll_lp_f = arg_s_mtrl.lp[i] ll_p_start = i li_ft = 2 END IF END IF NEXT IF lb_f_lb THEN ll_p_end = ll_p_end - 1 ELSE ll_p_end = ll_p_end END IF IF ll_p_start = 0 THEN ll_p_start += 1 END IF IF ll_p_start > ll_p_end THEN rslt = 1 GOTO ext END IF //yyx2012-11-14 // IF upperbound(arg_s_mtrl_scll.mtrlid) > 0 And ll_p_start = 1 And ll_p_end = UpperBound(arg_s_mtrl.mtrlid) then IF UpperBound(arg_s_mtrl_scll.mtrlid) > 0 And ll_p_start = 1 And ll_p_end = arg_e THEN rslt = 1 GOTO ext END IF //yyx2012-11-14_end // IF ll_p_end = UpperBound(arg_s_mtrl.mtrlid) THEN IF ll_p_end = arg_e THEN arg_p = -1 ELSE arg_p = ll_p_end + 1 END IF FOR ll_i = ll_p_start To ll_p_end IF arg_s_mtrl.qty[ll_i] = 0 THEN CONTINUE // IF arg_ifpackpro = 4 And arg_s_mtrl.ifcfg[ll_i] = 1 THEN CONTINUE IF arg_s_mtrl.ifcfg[ll_i] = 1 THEN CONTINUE If (arg_ifpackpro = 1 Or arg_ifpackpro = 2) And arg_s_mtrl.ifpack[ll_i] > 0 THEN CONTINUE IF arg_s_mtrl.pmtrlid[ll_i] = arg_p_mtrlid THEN Int li_ifselforder,li_mtrlorigin String ls_mtrlcode SELECT mtrlcode, ifselforder, mtrlorigin INTO :ls_mtrlcode, :li_ifselforder, :li_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_s_mtrl.mtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Long ll_p_mtrlid Long ll_arr ll_arr = UpperBound(arg_s_mtrl_scll.mtrlid) IF li_ifselforder = 0 And li_mtrlorigin = 0 THEN //自制虚拟件 // IF arg_s_mtrl.ifselforder[ll_i] = 0 And arg_s_mtrl.mtrlorigin[ll_i] = 0 THEN //自制虚拟件 // IF ll_i = UpperBound(arg_s_mtrl.mtrlid) THEN IF ll_i = arg_e THEN ll_arr++ arg_s_mtrl_scll.mtrlid[ll_arr] = arg_s_mtrl.mtrlid[ll_i] arg_s_mtrl_scll.wrkgrpid[ll_arr] = arg_s_mtrl.wrkgrpid_scll[ll_i] arg_s_mtrl_scll.status[ll_arr] = arg_s_mtrl.status[ll_i] arg_s_mtrl_scll.woodcode[ll_arr] = arg_s_mtrl.woodcode[ll_i] arg_s_mtrl_scll.pcode[ll_arr] = arg_s_mtrl.pcode[ll_i] arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.scllqty[ll_i] rslt = 1 GOTO ext ELSE ll_p = ll_i IF arg_s_mtrl.qty[ll_i] > arg_s_mtrl.cmplqty[ll_i] THEN // arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i] IF arg_s_mtrl.cmplqty[ll_i] > 0 THEN ll_p_mtrlid = arg_s_mtrl.mtrlid[ll_i] IF uof_add_rqmtrl_scll_find(ll_p,ll_p_mtrlid,arg_s_mtrl.ifpackpro[ll_i],& arg_s_mtrl.status[ll_i],arg_s_mtrl.woodcode[ll_i],arg_s_mtrl.pcode[ll_i],& arg_s_mtrl,arg_s_mtrl_scll,ll_p_end,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE rslt = 1 GOTO ext END IF ELSE ll_p_mtrlid = arg_s_mtrl.mtrlid[ll_i] IF uof_add_rqmtrl_scll_find(ll_p,ll_p_mtrlid,arg_s_mtrl.ifpackpro[ll_i],& arg_s_mtrl.status[ll_i],arg_s_mtrl.woodcode[ll_i],arg_s_mtrl.pcode[ll_i],& arg_s_mtrl,arg_s_mtrl_scll,ll_p_end,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF ELSE ll_arr++ arg_s_mtrl_scll.mtrlid[ll_arr] = arg_s_mtrl.mtrlid[ll_i] arg_s_mtrl_scll.wrkgrpid[ll_arr] = arg_s_mtrl.wrkgrpid_scll[ll_i] arg_s_mtrl_scll.status[ll_arr] = arg_s_mtrl.status[ll_i] arg_s_mtrl_scll.woodcode[ll_arr] = arg_s_mtrl.woodcode[ll_i] arg_s_mtrl_scll.pcode[ll_arr] = arg_s_mtrl.pcode[ll_i] arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.scllqty[ll_i] END IF END IF NEXT LOOP ext: RETURN rslt end function on uo_order_ml_mrp.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml_mrp.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('274',str_optionvalue,arg_msg) uo_option_packpro2_pf_pack2_useifover = Long(str_optionvalue) f_get_sys_option_value('340',str_optionvalue,arg_msg) uo_option_ifpackpro2_if_no_pack2 = Long(str_optionvalue) f_get_sys_option_value('356',str_optionvalue,arg_msg) uo_option_scll_ifchanged = Long(str_optionvalue) f_get_sys_option_value('089',str_optionvalue,arg_msg) uo_option_produce_dec = Long(str_optionvalue) SELECT wrkgrpid INTO :ins_produce_wrkgrpid_bj FROM u_sc_wkp Where ifbj = 1; IF sqlca.SQLCode <> 0 THEN ins_produce_wrkgrpid_bj = 0 END IF SELECT wrkgrpid INTO :ins_wrkGrpid_scll_bj FROM u_sc_workgroup Where ifbj = 1; IF sqlca.SQLCode <> 0 THEN ins_wrkGrpid_scll_bj = 0 END IF end event