前进、目标  

 *&---------------------------------------------------------------------*
*& Report  ZTEST_ALV_02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_ALV_02.
INCLUDE ZINC_SF_HELPER .
TABLES:SFLIGHT.
TYPE-POOLS:SLIS.
data:e04_lt_top_of_page type slis_t_listheader.

TYPES:
  BEGIN OF IT_OUT,
    CARRID        LIKE   SFLIGHT-CARRID,
    CONNID        LIKE   SFLIGHT-CONNID,
    FLDATE        LIKE   SFLIGHT-FLDATE,
    PRICE         LIKE   SFLIGHT-PRICE,
    SEATSMAX      LIKE   SFLIGHT-SEATSMAX,
  END OF IT_OUT.

DATA:
      G_AUDAT(30)     TYPE c,
      G_TITLE(30)     TYPE c.


DATA:
  GT_OUT TYPE TABLE OF IT_OUT,
  GS_OUT TYPE IT_OUT,
  TD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
  TH_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

CONTROLS TABCONCTROL TYPE TABLEVIEW USING SCREEN 9000.

PARAMETERS:
  P_PRICE TYPE SFLIGHT-PRICE DEFAULT '500'.
SELECT-OPTIONS:
  S_FLDATE FOR SFLIGHT-FLDATE.
PARAMETERS:
  P1 TYPE RADIOBUTTON GROUP P_RD,
  P2 TYPE RADIOBUTTON GROUP P_RD.

INITIALIZATION.
  S_FLDATE-SIGN = 'I'.
  S_FLDATE-OPTION = 'BT'.
  S_FLDATE-LOW = '19950228'.
  S_FLDATE-HIGH = '20070630'.

  APPEND S_FLDATE.

START-OF-SELECTION.

  perform frm_get_head_rtn.

  PERFORM FRM_SET_FIELDCAT.

  PERFORM FRM_GET_DATA.


  IF GT_OUT IS INITIAL.
    MESSAGE S888(SABAPDOCU) DISPLAY LIKE 'E' WITH '没有符合条件的数据!'.
    LEAVE LIST-PROCESSING.
  ELSE.
    IF P1 = 'X'.
      PERFORM FRM_DISPLAY_ALV.
    ELSEIF P2 = 'X'.
      PERFORM FRM_WRITE_DATA.
    ENDIF.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  frm_get_head_rtn
*&---------------------------------------------------------------------*
FORM frm_get_head_rtn .
 G_TITLE = '航班计划表'.
  concatenate S_FLDATE-low+0(4)  '年'
              S_FLDATE-low+4(2)  '月'
              S_FLDATE-low+6(2)  '日至'
              S_FLDATE-high+0(4) '年'
              S_FLDATE-high+4(2) '月'
              S_FLDATE-high+6(2) '日'
  into G_AUDAT.

ENDFORM.                    " frm_get_head_rtn

*表头页的数据
form TOP_OF_PAGE.
  data: ls_line type slis_listheader.

   clear e04_lt_top_of_page.   "清空ALV抬头
   clear e04_lt_top_of_page[].

  clear ls_line.
  ls_line-typ    = 'S'.
  ls_line-info   = G_TITLE.

  append ls_line to e04_lt_top_of_page.

  call function 'REUSE_ALV_COMMENTARY_WRITE'
         EXPORTING
      it_list_commentary = e04_lt_top_of_page.
endform.                    "top_of_page

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
  SELECT CARRID CONNID FLDATE PRICE SEATSMAX FROM SFLIGHT INTO TABLE
GT_OUT
    WHERE PRICE > P_PRICE
      AND FLDATE IN S_FLDATE.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_DATA
*&---------------------------------------------------------------------*
FORM FRM_WRITE_DATA .

  WRITE '航班表'.

  ULINE.

  WRITE : / '航班价格 > :', P_PRICE.
  WRITE: / '时间范围:',S_FLDATE-LOW ,'---',S_FLDATE-HIGH.

  ULINE.

  WRITE:/5(15)'航线承运人ID' no-gap,
         20(15)'航班连接 Id' no-gap,
         35(10)'航班日期' no-gap,
         50(10)'航空运费' no-gap,
         75(10)'最大容量' no-gap.

  LOOP AT GT_OUT INTO GS_OUT.

    WRITE:/5(15)  GS_OUT-CARRID,    "航线承运人ID
           20(15) GS_OUT-CONNID,    "航班连接 Id
           35(10) GS_OUT-FLDATE,    "航班日期
           50(10) GS_OUT-PRICE,     "航空运费
           75(10) GS_OUT-SEATSMAX.  "最大容量
  ENDLOOP.
ENDFORM.                    " FRM_WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .

data: ls_event type slis_alv_event.
data: e03_lt_events type slis_t_event.

*显示ALV抬头
  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = e03_lt_events.
  read table e03_lt_events with key name = slis_ev_top_of_page
                           into ls_event.
  if sy-subrc = 0.
    move 'TOP_OF_PAGE' to ls_event-form.
    append ls_event to e03_lt_events.
  endif.

 DATA TH_LAYOUT TYPE SLIS_LAYOUT_ALV.

  TH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'."设置ALV表格输出的时候,列宽根据数据长度自动适应
  TH_LAYOUT-ZEBRA             = 'X'."设置数据行背景颜色交替显示
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING

      I_CALLBACK_PROGRAM                =  SY-CPROG
      I_CALLBACK_PF_STATUS_SET          = 'FRM_SET_MENU'
      I_CALLBACK_USER_COMMAND           = 'FRM_USER_COMMAND'
      IS_LAYOUT                         = TH_LAYOUT
      IT_EVENTS                         = E03_LT_EVENTS[]
      IT_FIELDCAT                       = TD_FIELDCAT
    TABLES
      T_OUTTAB                          = GT_OUT
   EXCEPTIONS
     PROGRAM_ERROR                     = 1
     OTHERS                            2
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " FRM_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .

    CLEAR TH_FIELDCAT.

    DEFINE ADDFIELDCAT.
      TH_FIELDCAT-COL_POS      = &1.
      TH_FIELDCAT-FIELDNAME    = &2.
      TH_FIELDCAT-SELTEXT_L    = &3.
      TH_FIELDCAT-JUST         = &4.

     APPEND TH_FIELDCAT TO TD_FIELDCAT.

    END-OF-DEFINITION.

    ADDFIELDCAT 'CARRID'    '航线承运人ID' 'L'.

    ADDFIELDCAT 'CONNID'    '航班连接ID'   'L'.

    ADDFIELDCAT 'FLDATE'    '航班日期'     'L'.

    ADDFIELDCAT 'PRICE'     '航空费用'     'L'.

    ADDFIELDCAT 'SEATSMAX'  '最大容量'     'L'.

ENDFORM.                    " FRM_SET_FIELDCAT

*&-------------------------------------------------------------*
*&      Form  frm_set_menu
*&-------------------------------------------------------------*
*       实现ALV自定义状态条的绑定处理
*--------------------------------------------------------------*
form FRM_SET_MENU using rt_extab type slis_t_extab.
 set pf-status 'STANDARD'.  "引号内字符串为状态条对象的名称
endform.                    " FRM_SET_MENU

*&----------------------------------------------------------------*
*&      Form  frm_user_command
*&----------------------------------------------------------------*
*       实现对用户命令的响应
*-----------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELD slis_selfield
*-----------------------------------------------------------------*
form FRM_USER_COMMAND using p_ucomm like sy-ucomm selfield type
slis_selfield.
  case p_ucomm.
    when 'PRT'."响应自定义工具条中的自定义按钮事件
      if not  GT_OUT[] is initial.
        perform frm_print_selected.  "调用打印输出子程序
      else.
        MESSAGE S888(SABAPDOCU) DISPLAY LIKE 'E' with '没有可打印的数据!'.
      endif.
    when 'BACK' OR 'EXIT' OR 'CANCEL'."返回 退出
      leave program.
  endcase.
endform.                    "frm_user_command

*&-----------------------------------------------------------------*
*&      Form  frm_print_selected
*&-----------------------------------------------------------------*
*       实现对SmartForm的调用
*------------------------------------------------------------------*
form frm_print_selected .

*  DATA: headername(18) TYPE c.
  DATA: itemsname(30) TYPE c.
  " 在句柄中加上服务器当前时间作为句柄名称,防止多人同时使用该程序,导致句柄名称相同
*   CONCATENATE 'ZSPMMF1002HD' SY-UZEIT INTO headername .
   CONCATENATE 'ZSPMMF1002IT' SY-UZEIT INTO itemsname.

*  savebuffer ig_output_h[] headername. "ig_output_h是保存输出表单表头数据的内表
  savebuffer GT_OUT itemsname.
"ig_output_d是保存输出数据明细的内表,与表头数据有关联字段


  data: FM_NAME type rs38l_fnam.


  call function 'SSF_FUNCTION_MODULE_NAME'
    exporting
      formname = 'ZSFTEST002'"参数传值为要调用的Form名称
    importing
      fm_name  = FM_NAME.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.


*参数列表与Form中定义的接口对象需完全一致
  call function FM_NAME
   exporting
     ptr_items                  = itemsname
   exceptions
     formatting_error           = 1
     internal_error             = 2
     send_error                 = 3
     user_canceled              = 4
     others                     5.

  if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno
              with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

endform.                    " frm_print_selected

posted on 2011-11-15 15:59  前进、目标  阅读(1139)  评论(0)    收藏  举报