123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- $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
|