设为首页 收藏本站
查看: 1457|回复: 0

[经验分享] SAP 练习alv调用smartforms

[复制链接]
累计签到:12 天
连续签到:1 天
发表于 2015-9-17 13:28:15 | 显示全部楼层 |阅读模式
   *&---------------------------------------------------------------------*
*& 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 C RADIOBUTTON GROUP P_RD,
  P2 TYPE C 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 1 'CARRID'    '航线承运人ID' 'L'.
    ADDFIELDCAT 2 'CONNID'    '航班连接ID'   'L'.
    ADDFIELDCAT 3 'FLDATE'    '航班日期'     'L'.
    ADDFIELDCAT 4 'PRICE'     '航空费用'     'L'.
    ADDFIELDCAT 5 '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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115001-1-1.html 上篇帖子: 【原创】2011.09.18 SAP 订单中修改订单净价 下篇帖子: SAP屏幕设计器专题:表格控件属性的设定(七)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表