$PBExportHeader$f_cmp_di_qty.srf global type f_cmp_di_qty from function_object end type forward prototypes global function integer f_cmp_di_qty (long arg_mtrlid, long arg_storageid, string arg_status, ref decimal arg_ref_qty, ref string arg_lsg, ref string arg_msg) end prototypes global function integer f_cmp_di_qty (long arg_mtrlid, long arg_storageid, string arg_status, ref decimal arg_ref_qty, ref string arg_lsg, ref string arg_msg);Int rslt = 1 Long ll_SonMtrlid[] String ls_pf_status[],ls_status_find Decimal ld_Sonscale[] Long it_mxt = 1 Decimal ld_qty Long ll_i,ll_row DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status FROM u_PrdPF Where u_PrdPF.mtrlid = :arg_mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; IF it_mxt = 0 THEN rslt = 0 arg_msg = '该产品没有建立组装结构,不能计算' GOTO ext END IF String ls_mtrlcode,ls_mtrlname Decimal ld_noallocqty,ld_allqty,ld_maxqty ld_maxqty = 1000000 FOR ll_i = 1 To it_mxt SELECT mtrlcode, mtrlname INTO :ls_mtrlcode, :ls_mtrlname FROM u_mtrldef Where mtrlid = :ll_SonMtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品资料失败' GOTO ext END IF IF sys_option_if_color = 1 THEN ls_status_find = arg_status ELSE ls_status_find = ls_pf_status[ll_i] END IF ld_noallocqty = 0 ld_allqty = 0 SELECT sum(noallocqty) INTO :ld_noallocqty FROM u_mtrlware WHERE (storageid = :arg_storageid OR :arg_storageid = -1) AND mtrlid = :ll_SonMtrlid[ll_i] And status = :ls_status_find; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询该产品组装材料'+ls_mtrlname+'的库存资料失败' GOTO ext END IF ld_allqty = ld_noallocqty/ld_Sonscale[ll_i] ld_maxqty = Min(ld_maxqty,ld_allqty) IF IsNull(ld_maxqty) THEN ld_maxqty = 0 NEXT ld_qty = Truncate ( ld_maxqty, 0 ) arg_lsg = '可装货数量:'+String(ld_qty,'#,##0.####') arg_ref_qty = ld_qty ext: RETURN rslt end function