123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- $PBExportHeader$f_cmp_di_qty_noauditqty.srf
- global type f_cmp_di_qty_noauditqty from function_object
- end type
- forward prototypes
- global function integer f_cmp_di_qty_noauditqty (long arg_mtrlid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_mtrlcuscode, ref decimal arg_ref_qty, ref string arg_lsg, ref string arg_msg)
- end prototypes
- global function integer f_cmp_di_qty_noauditqty (long arg_mtrlid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_mtrlcuscode, ref decimal arg_ref_qty, ref string arg_lsg, ref string arg_msg);Int rslt = 1
- Long cnt
- Long ll_SonMtrlid[]
- String ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode
- Decimal ld_Sonscale[],ld_Sonscale_fm[]
- Int li_ifover[],li_dipztype[],li_ifpack[]
- String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
- Long it_mxt = 1
- Decimal ld_qty
- Long ll_i
- Long ll_statusflag,ll_woodcodeflag,ll_pcodeflag
- Int li_ifpackpro
- String ls_mtrlcode
- String ls_pf_mtrlcode[]
- s_mtrlcfg_expr s_mtrlcfg[]
- Long ll_cfg,ll_cnt_s_mtrlcfg
- int li_ifplancode
- SELECT ifplancode
- INTO :li_ifplancode
- FROM u_storage
- Where storageid = :arg_storageid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询仓库是否使用批号发货属性失败,'+sqlca.SQLErrText
- RETURN 0
- END IF
- SELECT ifpackpro,statusflag,woodcodeflag,pcodeflag,mtrlcode
- INTO :li_ifpackpro,:ll_statusflag,:ll_woodcodeflag,:ll_pcodeflag,:ls_mtrlcode
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询物料是否包件产品失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- IF ll_statusflag = 3 And ll_woodcodeflag = 3 And ll_pcodeflag = 3 THEN
- IF arg_status <> '' Or arg_woodcode <> '' Or arg_pcode <> '' THEN
- arg_ref_qty = 0
- rslt = 1
- GOTO ext
- END IF
- END IF
- Long ll_scid,ll_taskid,ll_printid
- Int li_ordertype_order
- IF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN
- //查询个性包件产品订单明细是否有换包件
- IF li_ifpackpro = 2 And arg_mtrlcuscode <> '' THEN
- SELECT ordertype INTO :li_ordertype_order
- From u_order_ml Where ordercode = :arg_mtrlcuscode;
- IF sqlca.SQLCode <> 0 THEN
- cnt = 0
- ELSE
- IF li_ordertype_order = 4 THEN
- SELECT u_order_ml_p.scid,u_order_ml_p.taskid,u_order_ml_p.taskmxid
- INTO :ll_scid,:ll_taskid,:ll_printid
- FROM u_order_ml,u_order_ml u_order_ml_p
- WHERE u_order_ml.ordercode = :arg_mtrlcuscode
- AND u_order_ml.scid = u_order_ml_p.scid
- And u_order_ml.porderid = u_order_ml_p.orderid;
- IF sqlca.SQLCode <> 0 THEN
- ll_taskid = 0
- END IF
- ELSE
- SELECT scid,taskid,taskmxid
- INTO :ll_scid,:ll_taskid,:ll_printid
- FROM u_order_ml
- Where ordercode = :arg_mtrlcuscode;
- IF sqlca.SQLCode <> 0 THEN
- ll_taskid = 0
- END IF
- END IF
-
- IF ll_taskid = 0 THEN
- cnt = 0
- ELSE
- //查是否有换清单
- SELECT count(*) INTO :cnt FROM u_saletaskmx_pf
- WHERE scid = :ll_scid
- AND taskid = :ll_taskid
- And printid = :ll_printid;
- IF sqlca.SQLCode <> 0 THEN
- cnt = 0
- END IF
- END IF
- END IF
- END IF
-
- IF cnt > 0 THEN
- DECLARE cur_pf_saletaskmx CURSOR FOR
- SELECT u_saletaskmx_pf.SonMtrlid,
- u_saletaskmx_pf.Sonscale,
- u_saletaskmx_pf.Sonscale_fm,
- u_saletaskmx_pf.status,
- u_saletaskmx_pf.woodcode,
- u_saletaskmx_pf.pcode,
- 0,
- 0,
- u_mtrldef.ifpack,
- u_mtrldef.mtrlcode
- FROM u_saletaskmx_pf,u_mtrldef
- WHERE ( u_saletaskmx_pf.scid = :ll_scid )
- AND ( u_saletaskmx_pf.taskid = :ll_taskid )
- AND ( u_saletaskmx_pf.printid = :ll_printid )
- And ( u_saletaskmx_pf.SonMtrlid = u_mtrldef.mtrlid );
-
- OPEN cur_pf_saletaskmx;
- FETCH cur_pf_saletaskmx INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- DO WHILE sqlca.SQLCode = 0
- it_mxt++
- FETCH cur_pf_saletaskmx INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- LOOP
- it_mxt = it_mxt - 1
- CLOSE cur_pf_saletaskmx;
- ELSE
- DECLARE cur_pf CURSOR FOR
- SELECT u_PrdPF.SonMtrlid,
- u_PrdPF.Sonscale,
- 1,
- u_PrdPF.status,
- u_PrdPF.woodcode,
- u_PrdPF.pcode,
- u_PrdPF.ifover,
- u_prdpf.dipztype,
- u_mtrldef.ifpack,
- u_mtrldef.mtrlcode
- FROM u_PrdPF,u_mtrl_pf,u_mtrldef
- WHERE (u_PrdPF.mtrlid = :arg_mtrlid)
- AND ( u_mtrl_pf.ifdi = 1 AND :li_ifpackpro = 0
- OR u_mtrl_pf.ifdft = 1 AND (:li_ifpackpro = 1 OR :li_ifpackpro = 2) AND u_mtrldef.ifpack > 0)
- AND ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
- AND ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid )
- And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) Order By u_PrdPF.printid;
-
- OPEN cur_pf;
- FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- DO WHILE sqlca.SQLCode = 0
- it_mxt++
- FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- LOOP
- it_mxt = it_mxt - 1
- CLOSE cur_pf;
-
- IF it_mxt = 0 THEN
- IF li_ifpackpro = 0 THEN
- arg_msg = '该产品没有建立组装清单,不能计算'
- ELSE
- arg_msg = '该产品没有建立默认清单,不能计算'
- END IF
- arg_ref_qty = 0
- rslt = 1
- GOTO ext
- END IF
- END IF
- elseif li_ifpackpro = 5 then
- DECLARE cur_pf5 CURSOR FOR
- SELECT u_PrdPF.SonMtrlid,
- u_PrdPF.Sonscale,
- 1,
- u_PrdPF.status,
- u_PrdPF.woodcode,
- u_PrdPF.pcode,
- u_PrdPF.ifover,
- u_prdpf.dipztype,
- u_mtrldef.ifpack,
- u_mtrldef.mtrlcode
- FROM u_PrdPF,u_mtrldef
- WHERE (u_PrdPF.mtrlid = :arg_mtrlid)
- AND ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid )
- And ( u_PrdPF.pfcode = :arg_status )
- And ( u_mtrldef.ifpack > 0 ) Order By u_PrdPF.printid;
-
- OPEN cur_pf5;
- FETCH cur_pf5 INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- DO WHILE sqlca.SQLCode = 0
- it_mxt++
- FETCH cur_pf5 INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt],
- :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt];
- LOOP
- it_mxt = it_mxt - 1
- CLOSE cur_pf5;
-
- IF it_mxt = 0 THEN
- arg_msg = '该产品没有建立包件清单,不能计算'
- arg_ref_qty = 0
- rslt = 1
- GOTO ext
- END IF
- ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN
- it_mxt = 0
- IF arg_status = '' THEN
- arg_ref_qty = 0
- rslt = 1
- GOTO ext
- ELSE
- f_checkpz(arg_status,s_mtrlcfg)
- ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg)
- IF ll_cnt_s_mtrlcfg = 0 THEN
- arg_ref_qty = 0
- rslt = 1
- GOTO ext
- ELSE
- FOR ll_cfg = 1 To ll_cnt_s_mtrlcfg
- it_mxt++
- ll_SonMtrlid[it_mxt] = arg_mtrlid
- ls_pf_status[it_mxt] = s_mtrlcfg[ll_cfg].cfgname
- ls_pf_woodcode[it_mxt] = arg_woodcode
- ls_pf_pcode[it_mxt] = arg_pcode
- ls_pf_mtrlcode[it_mxt] = ls_mtrlcode
- ld_Sonscale[it_mxt] = Dec(s_mtrlcfg[ll_cfg].qty)
- ld_Sonscale_fm[it_mxt] = 1
- li_ifover[it_mxt] = 0
- li_ifpack[it_mxt] = 0
- NEXT
- END IF
- END IF
- END IF
- Decimal ld_noallocqty,ld_allqty,ld_maxqty
- ld_maxqty = 1000000
- FOR ll_i = 1 To it_mxt
- IF li_ifover[ll_i] = 1 THEN
- CHOOSE CASE li_dipztype[ll_i]
- CASE 0
- ls_status = arg_status
- ls_woodcode = ''
- ls_pcode = ''
- CASE 1
- ls_status = ''
- ls_woodcode = arg_woodcode
- ls_pcode = ''
- CASE 2
- ls_status = ''
- ls_woodcode = ''
- ls_pcode = arg_pcode
- CASE 3
- ls_status = arg_status
- ls_woodcode = arg_woodcode
- ls_pcode = ''
- CASE 4
- ls_status = ''
- ls_woodcode = arg_woodcode
- ls_pcode = arg_pcode
- CASE 5
- ls_status = arg_status
- ls_woodcode = ''
- ls_pcode = arg_pcode
- CASE 6
- ls_status = arg_status
- ls_woodcode = arg_woodcode
- ls_pcode = arg_pcode
- END CHOOSE
- ELSE
- ls_status = ls_pf_status[ll_i]
- ls_woodcode = ls_pf_woodcode[ll_i]
- ls_pcode = ls_pf_pcode[ll_i]
- END IF
-
- IF li_ifpackpro = 2 Or li_ifpackpro = 4 THEN
- ls_mtrlcuscode = arg_mtrlcuscode
- ELSE
- ls_mtrlcuscode = ''
- END IF
-
- ld_noallocqty = 0
- ld_allqty = 0
-
- SELECT isnull(sum(u_mtrlware.noallocqty - u_mtrlware.noauditingqty),0)
- INTO :ld_noallocqty
- FROM u_mtrlware INNER JOIN
- u_storage ON u_mtrlware.storageid = u_storage.storageid
- WHERE (( u_mtrlware.storageid = :arg_storageid AND :arg_storageid > 0 )OR
- (:arg_storageid = -1 AND u_storage.ifmrp = 1 ))
- AND u_mtrlware.mtrlid = :ll_SonMtrlid[ll_i]
- AND ( u_mtrlware.status = :ls_status )
- AND ( u_mtrlware.woodcode = :ls_woodcode )
- AND ( u_mtrlware.pcode = :ls_pcode )
- AND ( u_mtrlware.plancode = :arg_plancode and :li_ifplancode = 1 or :li_ifplancode = 0 )
- And ( u_mtrlware.mtrlcuscode = :ls_mtrlcuscode And :li_ifpack[ll_i] = 2 Or :li_ifpack[ll_i] <> 2 );
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询该产品组装件或包件:'+ls_pf_mtrlcode[ll_i]+',库存未开单数失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- if ld_Sonscale[ll_i] = 0 then
- ld_allqty = 0
- else
- ld_allqty = ld_noallocqty * ld_Sonscale_fm[ll_i]/ld_Sonscale[ll_i]
- end if
- arg_lsg = arg_lsg + '组装件或包件:'+ls_pf_mtrlcode[ll_i]+',可装数:'+String(Truncate ( ld_allqty, 0 ),'#,##0')+'~n'
-
- 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')+'~n ~n' + arg_lsg
- arg_ref_qty = ld_qty
- ext:
- RETURN rslt
- end function
|