$PBExportHeader$uo_pf_cmpl.sru forward global type uo_pf_cmpl from nonvisualobject end type end forward global type uo_pf_cmpl from nonvisualobject end type global uo_pf_cmpl uo_pf_cmpl forward prototypes public function integer uof_cmpl_scll (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref s_pf_cmpl arg_pf, ref string arg_msg) end prototypes public function integer uof_cmpl_scll (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref s_pf_cmpl arg_pf, ref string arg_msg);Int rslt = 1 Long arr,ll_j,l_arr s_pf_cmpl l_s_pf Decimal ld_Sonscale Decimal ld_SonLoss Decimal ld_SonDECLosS Long ll_SonMtrlid String ls_sonpfcode String ls_status String ls_woodcode String ls_pcode Int li_ifselforder,li_mtrlorigin Int li_mrptype,li_mrparg arr = UpperBound(arg_pf.sonmtrlid) 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_mtrldef.ifselforder, u_mtrldef.mtrlorigin, u_mtrldef.mrptype, u_mtrldef.mrparg FROM u_PrdPF,u_mtrldef WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ) And ( u_PrdPF.mtrlid = :arg_mtrlid ); OPEN pf_cur; FETCH pf_cur INTO :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS, :ll_SonMtrlid,:ls_sonpfcode,:ls_status,:ls_woodcode, :ls_pcode,:li_ifselforder,:li_mtrlorigin,:li_mrptype,:li_mrparg; DO WHILE sqlca.SQLCode = 0 // l_arr++ IF ld_SonLoss = 1 THEN l_s_pf.scllqty[l_arr] = 0 ELSE IF li_mrptype = 0 THEN l_s_pf.scllqty[l_arr] = Round(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,li_mrparg) ELSE l_s_pf.scllqty[l_arr] = Ceiling(Truncate(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,10)) END IF l_s_pf.sonmtrlid[l_arr] = ll_SonMtrlid l_s_pf.sonpfcode[l_arr] = ls_sonpfcode l_s_pf.ifselforder[l_arr] = li_ifselforder l_s_pf.mtrlorigin[l_arr] = li_mtrlorigin END IF //总 arr++ IF ld_SonLoss = 1 THEN arg_pf.scllqty[arr] = 0 ELSE IF li_mrptype = 0 THEN arg_pf.scllqty[arr] = Round(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,li_mrparg) ELSE arg_pf.scllqty[arr] = Ceiling(Truncate(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,10)) END IF arg_pf.sonmtrlid[arr] = ll_SonMtrlid arg_pf.sonpfcode[arr] = ls_sonpfcode arg_pf.ifselforder[arr] = li_ifselforder arg_pf.mtrlorigin[arr] = li_mtrlorigin arg_pf.status[arr] = ls_status arg_pf.woodcode[arr] = ls_woodcode arg_pf.pcode[arr] = ls_pcode END IF FETCH pf_cur INTO :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS, :ll_SonMtrlid,:ls_sonpfcode,:ls_status,:ls_woodcode, :ls_pcode,:li_ifselforder,:li_mtrlorigin,:li_mrptype,:li_mrparg; LOOP CLOSE pf_cur; IF arr = 0 THEN rslt = 0 arg_msg = '物料没有清单内容' GOTO ext END IF FOR ll_j = 1 To l_arr IF l_s_pf.mtrlorigin[ll_j] = 0 And & l_s_pf.ifselforder[ll_j] = 0 THEN IF uof_cmpl_scll(l_s_pf.sonmtrlid[ll_j],l_s_pf.sonpfcode[ll_j],l_s_pf.scllqty[ll_j],arg_pf,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: RETURN rslt end function on uo_pf_cmpl.create call super::create TriggerEvent( this, "constructor" ) end on on uo_pf_cmpl.destroy TriggerEvent( this, "destructor" ) call super::destroy end on