$PBExportHeader$f_addmx_mtrl_change.srf global type f_addmx_mtrl_change from function_object end type forward prototypes global function integer f_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg) end prototypes global function integer f_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg);Long ll_pmtrlid,ll_ordertype,ll_porderid long ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid String ls_ordercode,ls_relcode, ls_taskrelcode Decimal ld_rqqty Long ll_mtrlorigin Int rslt = 1 Long ll_row Long i = 1 Long ll_porderid_arr[] String ls_ordercode_arr[],ls_relcode_arr[], ls_taskrelcode_arr[] Long ll_i Boolean lb_iffind = False Decimal ld_DstrQty uo_find_sc_wrkgrpid uo_fscwrkgrpid uo_fscwrkgrpid = Create uo_find_sc_wrkgrpid SELECT ordertype,mtrlid INTO :ll_ordertype,:ll_pmtrlid FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询指令单相关信息失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_ordertype <> 4 THEN //生产计划,明细插入自己本身 uo_fscwrkgrpid.deep = 0 uo_fscwrkgrpid.lb_find = false IF uo_fscwrkgrpid.uof_rst_top1_produce_wrkGrpid(arg_scid,arg_orderid,ll_pmtrlid,& arg_mtrlid,arg_wrkgrpid,arg_status,arg_woodcode,arg_pcode,& ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF SELECT mtrlorigin INTO :ll_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_mtrlorigin = 6 THEN ll_mtrlorigin = 0 IF ll_mtrlorigin <> 0 THEN ll_produce_wrkGrpid = 0 //yyx20101020 // IF ll_mtrlorigin = 3 THEN ll_produce_wrkGrpid = 0 //yyx20100622 SELECT rqqty,DstrQty INTO :ld_rqqty,:ld_DstrQty FROM u_orderrqmtrl WHERE scid = :arg_scid AND orderid = :arg_orderid AND mtrlid = :arg_mtrlid AND wrkgrpid = :arg_wrkgrpid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plantype = :ll_mtrlorigin And produce_wrkGrpid = :ll_produce_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText GOTO ext END IF SELECT ordercode,relcode, taskrelcode INTO :ls_ordercode,:ls_relcode , :ls_taskrelcode FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询主生产计划信息失败'+"~n"+sqlca.SQLErrText GOTO ext END IF ll_row++ arg_s_mx[ll_row].printid = ll_row arg_s_mx[ll_row].orderid = arg_orderid arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty ELSE //生产指令单,搜索明细表得出相关主生产计划 DECLARE cur_mx CURSOR FOR SELECT u_order_ml_mx.taskid, u_order_ml_mx.taskcode, u_order_ml.relcode, u_order_ml.taskrelcode FROM u_order_ml_mx, u_order_ml WHERE ( u_order_ml_mx.scid = u_order_ml.scid ) AND ( u_order_ml_mx.taskid = u_order_ml.orderid ) AND ( u_order_ml_mx.orderid = :arg_orderid ) AND ( u_order_ml_mx.scid = :arg_scid ) ; OPEN cur_mx; FETCH cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i]; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i]; LOOP CLOSE cur_mx; FOR ll_i = 1 To i - 1 uo_fscwrkgrpid.deep = 0 uo_fscwrkgrpid.lb_find = false IF uo_fscwrkgrpid.uof_rst_top1_produce_wrkGrpid(arg_scid,ll_porderid_arr[ll_i],ll_pmtrlid,& arg_mtrlid,arg_wrkgrpid,arg_status,arg_woodcode,arg_pcode,& ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF SELECT mtrlorigin INTO :ll_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_mtrlorigin = 6 THEN ll_mtrlorigin = 0 IF ll_mtrlorigin <> 0 THEN ll_produce_wrkGrpid = 0 SELECT rqqty,DstrQty INTO :ld_rqqty,:ld_DstrQty FROM u_orderrqmtrl WHERE scid = :arg_scid AND orderid = :ll_porderid_arr[ll_i] AND mtrlid = :arg_mtrlid AND wrkgrpid = :arg_wrkgrpid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plantype = :ll_mtrlorigin And produce_wrkGrpid = :ll_produce_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText GOTO ext END IF ll_row++ arg_s_mx[ll_row].printid = ll_row arg_s_mx[ll_row].orderid = ll_porderid_arr[ll_i] arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty NEXT END IF Decimal ld_sumqty ld_sumqty = 0 FOR ll_i = 1 To ll_row ld_sumqty = ld_sumqty + arg_s_mx[ll_i].rateqty NEXT FOR ll_i = 1 To ll_row IF ld_sumqty > 0 THEN arg_s_mx[ll_i].rqqty_ori = arg_sqty / ld_sumqty * arg_s_mx[ll_i].rateqty arg_s_mx[ll_i].rqqty = arg_dqty / ld_sumqty * arg_s_mx[ll_i].rateqty ELSE arg_s_mx[ll_i].rqqty_ori = arg_sqty / ll_row arg_s_mx[ll_i].rqqty = arg_dqty / ll_row END IF NEXT ext: Destroy uo_fscwrkgrpid RETURN rslt end function