成本中心组下嵌套成本中心组
成本中心后台数据表是 CSKS,描述表是 CSKT。在表 CSKS 中,主键是 MANDT(客户端)、KOKRS(控制范围)、KOSTL(成本中心)、DATBI(有效截至日期),在一个控制范围下的某个成本中心,会因为时间段的不同,会在表 CSKS 和 CSKT 存储多条记录。

这是一个树型结构,针对根节点、子节点、叶节点,SAP 有三张表:SETHEADER、SETNODE、SETLEAF。既然是树型结构那用递归遍历是最合适不过了。
*&--------------------------------------------------------------------*
*& Form frm_get_kostl
*&--------------------------------------------------------------------*
* 递归查询一个成本中心组下的所有成本中心。
*---------------------------------------------------------------------*
* -->I_TREE 成本中心组根节点
*---------------------------------------------------------------------*
FORM FRM_GET_KOSTL USING I_TREE LIKE I_TREE.
DATA: I_TEMPTREE LIKE I_TREE OCCURS 0 WITH HEADER LINE.
SELECT SUBSETNAME
INTO I_TEMPTREE
FROM SETNODE
WHERE SETCLASS = '0101'
AND SUBCLASS = 'YZJT'
AND SETNAME = I_TREE-SETNAME.
IF SY-SUBRC = 0.
PERFORM FRM_GET_KOSTL USING I_TEMPTREE.
ENDIF.
ENDSELECT.
SELECT VALFROM FROM SETLEAF INTO F_KOSTL
WHERE SETCLASS = '0101'
AND SUBCLASS = 'YZJT'
AND SETNAME = I_TREE-SETNAME.
APPEND F_KOSTL .
ENDSELECT.
ENDFORM. "frm_get_kostl
调用:
"数据结构定义"
DATA: BEGIN OF I_TREE OCCURS 0,
SETNAME LIKE SETNODE-SETNAME,
END OF I_TREE.
DATA: BEGIN OF I_KOSTL OCCURS 0,
VALFROM LIKE SETLEAF-VALFROM,
END OF I_KOSTL.
DATA: I_SETHEADER LIKE I_TREE OCCURS 0 WITH HEADER LINE.
PERFORM FRM_GET_KOSTL USING I_SETHEADER.
针对 SAP 中 SET(集)的操作,有好多函数
- G_SET_GET_ALL_VALUES:Read All Values in a Set Hierarchy