屏幕上显示LIST的三种方法
在abap开发中,经常有用户提出list的需求,实现的方法很多,通常用的有以下三种总结一下供大家参考:
1:手工添加-就是根据需要把LIST要显示的内容一条一条加到LIST列表中。对于手工添加,其优点就是简单,对列表数据少且固定的LIST较易实现,缺点就是维护量大。
2:函数调用-就是编写一个显示LIST的函数实现,这种方法可一次生成LIST。
3:子例程实现-就是在程序中编写子例程实现LIST的显示,和第二种方法大同小异。
*1:手工添加
P_kostl_ID = 'P_CBZX'.
value-key = '0011002101'.
value-text = '成本中心'.
APPEND value TO list.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = P_CONGR_id
values = list.
*2: 函数调用
REPORT z_functionlist.
**************取合并单元描述
DATA: BEGIN OF i_kostl OCCURS 0,
bukrs LIKE csks-bukrs,
kostl LIKE cskt-kostl,
ltext LIKE cskt-ltext,
name(50),
END OF i_kostl.
data: p_name(30) type c.
*************CREAT SCREEN
PARAMETERS:p_bukrs LIKE csks-bukrs DEFAULT '1100'.
PARAMETERS: p_cbzx(30) AS LISTBOX VISIBLE LENGTH 45.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
CALL FUNCTION 'ZFI_LIST_KOSTL'
EXPORTING
l_bukrs = p_bukrs
l_field = 'P_CBZX'.
************************************************************
* 显示LIST的FUCTION定义
************************************************************
FUNCTION zfi_list_kostl.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(L_BUKRS) TYPE BUKRS
*" REFERENCE(L_FIELD) TYPE C
*"----------------------------------------------------------------------
TYPE-POOLS: vrm.
DATA: congr_id TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list.
DATA: BEGIN OF i_kostl OCCURS 0,
bukrs LIKE csks-bukrs,
kostl LIKE cskt-kostl,
ltext LIKE cskt-ltext,
END OF i_kostl.
congr_id = l_field.
SELECT csks~kostl cskt~ltext INTO CORRESPONDING FIELDS OF TABLE i_kostl
FROM csks
INNER JOIN cskt ON csks~kostl EQ cskt~kostl
WHERE csks~bukrs = l_bukrs.
LOOP AT i_kostl.
value-key = i_kostl-kostl .
CONCATENATE i_kostl-kostl '-' i_kostl-ltext INTO value-text.
APPEND value TO list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = congr_id
values = list.
ENDFUNCTION.
*3: 子例程实现 ――也相当于函数调用,不过这里用到的是子例程
在at-selection-screen output 事件中调用
生成LIST的例程实现动态LIST的生成。
DATA: p_name(30) type c.
AT SELECTION-SCREEN OUTPUT.
p_name = 'P_CBZX'.
PERFORM get_kostl USING p_name.
*&---------------------------------------------------------------------*
*& Form get_kostl
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PU_CBZX text
*----------------------------------------------------------------------*
FORM get_kostl USING l_name TYPE c.
**************CREAT LISTBOX
TYPE-POOLS: vrm.
DATA: name TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list.
CLEAR i_kostl.
name = l_name.
SELECT csks~kostl cskt~ltext INTO CORRESPONDING FIELDS OF TABLE i_kostl
FROM csks
INNER JOIN cskt ON csks~kostl EQ cskt~kostl
WHERE csks~bukrs = p_bukrs.
LOOP AT i_kostl.
value-key = i_kostl-kostl .
CONCATENATE i_kostl-kostl '-' i_kostl-ltext INTO value-text.
APPEND value TO list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = name
values = list.
ENDFORM. " GET_KOSTL