凡尘clsoho™的博客

E-mail & MSN: clsoho@hotmail.com
QQ1超级群: <101817641已满> QQ2群:<110722895已满>
QQ3超级群:<23765855>QQ4超级群:<85338969>

屏幕上显示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

posted on 2010-01-19 10:57  凡尘clsoho  阅读(1863)  评论(0编辑  收藏  举报