利润Table Function实现利润中心组查询下级所有层级的利润中心

       通常我们查询某一利润中心组下的所有层级的利润中心,需要先获取当前利润中心组的下的所有层级的利润中心组,然后再根据所有的利润中心组去查询。这是个通用的功能,有经验的顾问就会将此段逻辑封装成函数,以便于公用。但是具体的需求会有利润中心的其他过滤条件,就需要针对函数的结果再进行过滤(再次和数据库进行交互)。在SAP版本7.40 SP05之后,增加了Table Function的功能。Table Funtion的结果可以当做表使用,与数据库表进行Join。下边我们就用Table Function来实现利润中心组查找下级所有层级利润中心的功能。

       Table Function需要在ABAP ADT工具上进行开发,首先我们在ADT上新建一个Table Function:ZTF_PRCTR_WITH_PHINR。

@EndUserText.label: '利润中心组下所有层级利润中心'
define table function ztf_prctr_with_phinrwith parameters@Environment.systemField: #CLIENTiv_mandt : abap.clnt,iv_kokrs : kokrs,iv_phinr : phinr
returns
{mandt : abap.clnt;prctr : prctr;phinr : phinr;}implemented by method  zcl_amdp_tf=>get_prctr_with_phinr;

其次,我们在ADMP实现类:ZCL_AMDP_TF的GET_PRCTR_WITH_PHINR方法中具体的功能逻辑。

CLASS zcl_amdp_tf DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION.INTERFACES if_amdp_marker_hdb.CLASS-METHODS:get_prctr_with_phinr FOR TABLE FUNCTION ztf_prctr_with_phinr.PROTECTED SECTION.PRIVATE SECTION.
ENDCLASS.CLASS zcl_amdp_tf IMPLEMENTATION.METHOD get_prctr_with_phinr BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPTOPTIONS READ-ONLY USING setnode cepc.declare lv_line int default 0;  -- 定义变量 行数if :iv_phinr = '' then
*没有利润中心组取,默认取所有return select distinctmandt,prctr,khinr as phinrfrom cepc where mandt = :iv_mandtand kokrs = :iv_kokrs;elselt_subsetname =select iv_mandt as mandt,iv_phinr as setname from dummy;lt_setname_all = select * from :lt_subsetname;lv_line = 1;while :lv_line > 0 do
*  取出子集lt_subsetname = select mandt,subsetname as setnamefrom setnodewhere setclass = '0106'and subclass = :iv_kokrsand ( mandt,setname )  in (select mandt,setname from :lt_subsetname);
*  获取子集的行数SELECT COUNT( * ) INTO lv_line FROM :lt_subsetname; --结果集的行数*  结果集合并IF lv_line > 0 thenlt_setname_all = SELECT * FROM :lt_setname_all  -- 合并结果表UNIONSELECT * FROM :lt_subsetname;END if;END while;RETURN SELECT mandt,prctr,khinr as phinrfrom cepc where ( mandt , khinr ) in ( select mandt,setname as khinr from :lt_setname_all )and kokrs = :iv_kokrs;end if;endmethod.
ENDCLASS.

    最后我们使用此Table Function来实现数据的查询。如下测试程序

REPORT ztest_ztf_prctr_with_phinr.PARAMETERS:p_phinr TYPE cepc-khinr.START-OF-SELECTION.SELECT b~prctr,b~khinr,b~usnamFROM ztf_prctr_with_phinr( iv_kokrs = '8888', iv_phinr = @p_phinr ) AS aINNER JOIN cepc AS bON a~prctr = b~prctrAND b~kokrs = '8888'WHERE b~usnam = 'PWC005'INTO TABLE @DATA(lt_result).cl_demo_output=>display(EXPORTINGdata = lt_result).

运行此程序,输入查询的利润中心组8888

执行结果如下


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部