$PBExportHeader$uo_cp_auto_scll.sru forward global type uo_cp_auto_scll from nonvisualobject end type end forward global type uo_cp_auto_scll from nonvisualobject end type global uo_cp_auto_scll uo_cp_auto_scll forward prototypes public function integer uof_cp_scll (long arg_scid, long arg_orderid, long arg_mtrlid, decimal arg_qty, ref s_cp_scll arg_s_cp_scll[], ref long arg_itmxt, ref string arg_msg) end prototypes public function integer uof_cp_scll (long arg_scid, long arg_orderid, long arg_mtrlid, decimal arg_qty, ref s_cp_scll arg_s_cp_scll[], ref long arg_itmxt, ref string arg_msg);Int rslt = 1 Long count Long ll_mtrlid,ll_wrkGrpid Decimal ld_orderqty,ld_trueRqqty,ld_scllqty,ld_dstrqty String ls_status,ls_woodcode,ls_pcode String ls_mtrlcode Decimal ld_Sonscale,ld_SonLoss,ld_SonDECLosS Int li_mtrlkind IF arg_orderid = 0 THEN count = 0 DECLARE pf_scll CURSOR FOR SELECT u_PrdPF.sonMtrlID, u_PrdPF.wrkGrpid, u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_mtrldef.mtrlcode FROM u_PrdPF,u_mtrldef,u_mtrl_pf WHERE ( u_mtrl_pf.mtrlid = :arg_mtrlid ) AND ( u_mtrl_pf.ifdft = 1 ) AND ( u_mtrl_pf.mtrlid = u_PrdPF.mtrlid ) AND ( u_mtrl_pf.pfcode = u_PrdPF.pfcode ) AND ( u_PrdPF.sonMtrlID = u_mtrldef.mtrlid ); OPEN pf_scll; FETCH pf_scll INTO :ll_mtrlid,:ll_wrkGrpid,& :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,& :ls_status,:ls_woodcode,:ls_pcode,& :ls_mtrlcode; DO WHILE sqlca.SQLCode = 0 count++ IF ld_SonLoss = 1 THEN ld_scllqty = 0 ELSE ld_scllqty = arg_qty * (ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS) END IF arg_s_cp_scll[count].scid = arg_scid arg_s_cp_scll[count].orderid = arg_orderid arg_s_cp_scll[count].mtrlid = ll_mtrlid arg_s_cp_scll[count].wrkGrpid = ll_wrkGrpid arg_s_cp_scll[count].status = ls_status arg_s_cp_scll[count].woodcode = ls_woodcode arg_s_cp_scll[count].pcode = ls_pcode arg_s_cp_scll[count].mtrlcode = ls_mtrlcode arg_s_cp_scll[count].qty = ld_scllqty arg_s_cp_scll[count].noallocqty = ld_scllqty arg_s_cp_scll[count].allocqty = 0 FETCH pf_scll INTO :ll_mtrlid,:ll_wrkGrpid,& :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,& :ls_status,:ls_woodcode,:ls_pcode,& :ls_mtrlcode; LOOP CLOSE pf_scll; ELSE count = 0 SELECT orderqty INTO :ld_orderqty FROM u_order_ml WHERE orderid = :arg_orderid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产指令单生产数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DECLARE ml_scll CURSOR FOR SELECT u_OrderRqMtrl_scll.MtrlID, u_OrderRqMtrl_scll.wrkGrpid, u_OrderRqMtrl_scll.trueRqqty, u_orderrqmtrl_scll.dstrqty, u_OrderRqMtrl_scll.status, u_OrderRqMtrl_scll.woodcode, u_OrderRqMtrl_scll.pcode, u_mtrldef.mtrlcode, u_mtrldef.mtrlkind FROM u_OrderRqMtrl_scll,u_mtrldef WHERE ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND ( u_OrderRqMtrl_scll.orderid = :arg_orderid ) AND ( u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid ); OPEN ml_scll; FETCH ml_scll INTO :ll_mtrlid,:ll_wrkGrpid,& :ld_trueRqqty,:ld_dstrqty,:ls_status,:ls_woodcode,:ls_pcode,& :ls_mtrlcode,:li_mtrlkind; DO WHILE sqlca.SQLCode = 0 count++ ld_scllqty = ld_trueRqqty * arg_qty/ld_orderqty arg_s_cp_scll[count].scid = arg_scid arg_s_cp_scll[count].orderid = arg_orderid arg_s_cp_scll[count].mtrlid = ll_mtrlid arg_s_cp_scll[count].wrkGrpid = ll_wrkGrpid arg_s_cp_scll[count].status = ls_status arg_s_cp_scll[count].woodcode = ls_woodcode arg_s_cp_scll[count].pcode = ls_pcode arg_s_cp_scll[count].mtrlcode = ls_mtrlcode arg_s_cp_scll[count].qty = ld_scllqty IF li_mtrlkind = 0 THEN arg_s_cp_scll[count].noallocqty = 0 arg_s_cp_scll[count].allocqty = ld_scllqty ELSEIF li_mtrlkind = 1 THEN arg_s_cp_scll[count].noallocqty = ld_scllqty arg_s_cp_scll[count].allocqty = 0 ELSE IF ld_dstrqty > 0 THEN IF ld_dstrqty >= ld_scllqty THEN arg_s_cp_scll[count].noallocqty = 0 arg_s_cp_scll[count].allocqty = ld_scllqty ELSE arg_s_cp_scll[count].noallocqty = 0 arg_s_cp_scll[count].allocqty = ld_dstrqty END IF ELSE arg_s_cp_scll[count].noallocqty = ld_scllqty arg_s_cp_scll[count].allocqty = 0 END IF END IF FETCH ml_scll INTO :ll_mtrlid,:ll_wrkGrpid,& :ld_trueRqqty,:ld_dstrqty,:ls_status,:ls_woodcode,:ls_pcode,& :ls_mtrlcode,:li_mtrlkind; LOOP CLOSE ml_scll; END IF arg_itmxt = count ext: RETURN rslt end function on uo_cp_auto_scll.create call super::create TriggerEvent( this, "constructor" ) end on on uo_cp_auto_scll.destroy TriggerEvent( this, "destructor" ) call super::destroy end on