123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- $PBExportHeader$uo_cmpl_mtrlprice.sru
- forward
- global type uo_cmpl_mtrlprice from nonvisualobject
- end type
- end forward
- global type uo_cmpl_mtrlprice from nonvisualobject
- end type
- global uo_cmpl_mtrlprice uo_cmpl_mtrlprice
- type variables
- long deep = 0
- boolean ifcmpl_1 = false
- end variables
- forward prototypes
- public function integer uof_get_cost (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, decimal arg_qty, long arg_lp, ref s_mtrlprice_sum arg_s_price, ref string arg_msg)
- public function integer uof_get_wageprice (long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, ref s_mtrlprice_sum arg_s_price, ref string arg_msg)
- end prototypes
- public function integer uof_get_cost (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, decimal arg_qty, long arg_lp, ref s_mtrlprice_sum arg_s_price, ref string arg_msg);Int rslt = 1
- Decimal Sonscale,SonLoss,SonDECLosS
- Long SonMtrlid,count = 0,ls_i
- String mtrlcode, mtrlname
- s_pfmx ls_s_pfmx[]
- Decimal ld_price,ld_qty,ld_outcost,ld_wageprice
- Decimal ld_planprice
- Int li_mtrlorigin
- String ls_mtrlsectype
- deep++
- IF deep > 10000 THEN //防止死递归
- arg_msg = '物料:'+arg_mtrlcode+'死循环'
- rslt = 0
- GOTO ext
- END IF
- DECLARE pf_cur CURSOR FOR
- SELECT u_PrdPF.Sonscale,
- u_PrdPF.SonLoss,
- u_PrdPF.SonDECLosS,
- u_PrdPF.SonMtrlid,
- u_mtrldef.mtrlcode,
- u_PrdPF.sonpfcode
- FROM u_PrdPF,
- u_mtrldef
- WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND
- ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
- ( u_PrdPF.pfcode = :arg_pfcode );
-
- OPEN pf_cur;
- count = 1
- FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode;
-
- DO WHILE sqlca.SQLCode = 0
- count++
- FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode;
- LOOP
- count = count - 1
- CLOSE pf_cur;
- IF arg_lp > 1 OR ifcmpl_1 THEN
-
-
- SELECT mtrlorigin,planprice,mtrlsectype
- INTO :li_mtrlorigin,:ld_planprice,:ls_mtrlsectype
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询:'+arg_mtrlcode+'来源失败'
- rslt = 0
- GOTO ext
- END IF
-
- CHOOSE CASE li_mtrlorigin
- CASE 2,3
- SELECT price INTO :ld_price
- FROM v_maxprice_sptprice
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- GOTO ext
- END IF
-
- IF IsNull(ld_price) THEN ld_price = 0
-
- IF li_mtrlorigin = 3 THEN
- arg_s_price.wfjgprice = arg_s_price.wfjgprice + ld_price * arg_qty
- END IF
-
- IF li_mtrlorigin = 2 AND count = 0 THEN
- CHOOSE CASE ls_mtrlsectype
- CASE '木材'
- arg_s_price.mucai = arg_s_price.mucai + ld_price * arg_qty
- CASE '板材/面板'
- arg_s_price.bancai = arg_s_price.bancai + ld_price * arg_qty
- CASE '油漆'
- arg_s_price.youqi = arg_s_price.youqi + ld_price * arg_qty
-
- CASE '皮/布'
- arg_s_price.pibu = arg_s_price.pibu + ld_price * arg_qty
-
- CASE '海绵'
- arg_s_price.haimian = arg_s_price.haimian + ld_price * arg_qty
-
- CASE '纸箱'
- arg_s_price.zhixiang = arg_s_price.zhixiang + ld_price * arg_qty
-
- CASE '包材'
- arg_s_price.baocai = arg_s_price.baocai + ld_price * arg_qty
-
- CASE '配件/五金'
- arg_s_price.peijian = arg_s_price.peijian + ld_price * arg_qty
-
- END CHOOSE
- rslt = 1
- GOTO ext
- END IF
-
- CASE 0
- //计算人工
- IF uof_get_wageprice(arg_mtrlid,arg_mtrlcode,arg_qty,arg_s_price,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END CHOOSE
- END IF
- FOR ls_i = 1 TO count
- ld_qty = arg_qty * (ls_s_pfmx[ls_i].Sonscale / (1 - ls_s_pfmx[ls_i].SonLoss) + ls_s_pfmx[ls_i].SonDECLosS)
- IF uof_get_cost(ls_s_pfmx[ls_i].SonMtrlid,ls_s_pfmx[ls_i].mtrlcode,ls_s_pfmx[ls_i].sonpfcode,ld_qty,arg_lp+1,arg_s_price,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- NEXT
- ext:
- RETURN rslt
- end function
- public function integer uof_get_wageprice (long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, ref s_mtrlprice_sum arg_s_price, ref string arg_msg);Int rslt = 1
- Decimal ld_wageprice
- SELECT sum(u_sc_workprice.workprice * u_sc_workprice.workqty) INTO :ld_wageprice
- FROM u_sc_workprice INNER JOIN
- u_sc_workgroup ON u_sc_workprice.wrkGrpid = u_sc_workgroup.wrkGrpid
- WHERE u_sc_workprice.ifownpro = 0
- AND u_sc_workprice.mtrlid = :arg_mtrlid
- AND u_sc_workgroup.dscrp = '木工';
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
- rslt = 0
- GOTO ext
- END IF
- IF IsNull(ld_wageprice) THEN ld_wageprice = 0
- arg_s_price.mugong_rl = arg_s_price.mugong_rl + ld_wageprice * arg_qty
- SELECT sum(u_sc_workprice.workprice * u_sc_workprice.workqty) INTO :ld_wageprice
- FROM u_sc_workprice INNER JOIN
- u_sc_workgroup ON u_sc_workprice.wrkGrpid = u_sc_workgroup.wrkGrpid
- WHERE u_sc_workprice.ifownpro = 0
- AND u_sc_workprice.mtrlid = :arg_mtrlid
- AND u_sc_workgroup.dscrp = '油漆';
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
- rslt = 0
- GOTO ext
- END IF
- IF IsNull(ld_wageprice) THEN ld_wageprice = 0
- arg_s_price.youqi_rl = arg_s_price.youqi_rl + ld_wageprice * arg_qty
- SELECT sum(u_sc_workprice.workprice * u_sc_workprice.workqty) INTO :ld_wageprice
- FROM u_sc_workprice INNER JOIN
- u_sc_workgroup ON u_sc_workprice.wrkGrpid = u_sc_workgroup.wrkGrpid
- WHERE u_sc_workprice.ifownpro = 0
- AND u_sc_workprice.mtrlid = :arg_mtrlid
- AND u_sc_workgroup.dscrp = '软体前工序';
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
- rslt = 0
- GOTO ext
- END IF
- IF IsNull(ld_wageprice) THEN ld_wageprice = 0
- arg_s_price.ruanti_rl = arg_s_price.ruanti_rl + ld_wageprice * arg_qty
- SELECT sum(u_sc_workprice.workprice * u_sc_workprice.workqty) INTO :ld_wageprice
- FROM u_sc_workprice INNER JOIN
- u_sc_workgroup ON u_sc_workprice.wrkGrpid = u_sc_workgroup.wrkGrpid
- WHERE u_sc_workprice.ifownpro = 0
- AND u_sc_workprice.mtrlid = :arg_mtrlid
- AND u_sc_workgroup.dscrp = '扪皮及包装';
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
- rslt = 0
- GOTO ext
- END IF
- IF IsNull(ld_wageprice) THEN ld_wageprice = 0
- arg_s_price.mengpi_rl = arg_s_price.mengpi_rl + ld_wageprice * arg_qty
- ext:
- RETURN rslt
- end function
- on uo_cmpl_mtrlprice.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_cmpl_mtrlprice.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|