OO ALV报表实现 后面再说其他的 由简入繁助于理解
下面介绍一下OO ALV的灵魂

两个类(SE24查看):
CL_GUI_ALV_GRID
CL_GUI_DOCKING_CONTAINER

介绍实现步骤:
1、创建程序(都会)
2、创建屏幕(OOALV与FUNCTION ALV的区别,屏幕自己创建,所以扩展性好)

创建GUI状态

3、撸代码
代码如下:


TABLES: SFLIGHT."输出结构
TYPES: BEGIN OF TY_OUTPUT.INCLUDE STRUCTURE SFLIGHT.
TYPES: ZBOX       TYPE C,SEATSOCC_O TYPE SFLIGHT-SEATSOCC. "经济舱剩余座位
TYPES: END OF TY_OUTPUT.DATA: GT_OUTPUT TYPE TABLE OF TY_OUTPUT. "输出内表
DATA: GS_OUTPUT TYPE TY_OUTPUT. "输出工作区DATA: GS_LAYOUT TYPE LVC_S_LAYO. "布局
DATA: GT_FIELDCAT TYPE LVC_T_FCAT. "字段属性内表
DATA: GS_FIELDCAT TYPE LVC_S_FCAT. "
DATA: GV_COL TYPE I.DATA: OK_CODE TYPE SY-UCOMM. "用户功能码接收
DATA: SAVE_OK TYPE SY-UCOMM. "用户功能码接收"声明灵魂
DATA: GS_ALV TYPE REF TO CL_GUI_ALV_GRID. "屏幕alv对象
*DATA: GS_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GS_DOCK TYPE REF TO CL_GUI_DOCKING_CONTAINER. "屏幕容器对象"选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
SELECT-OPTIONS: S_CARRID FOR SFLIGHT-CARRID.
SELECTION-SCREEN END OF BLOCK BLK1 .START-OF-SELECTION."取数PERFORM FRM_SELECT_DATA.END-OF-SELECTION."调用100屏幕输出CALL SCREEN 0100.*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'ZSTATUS_0100'.SET TITLEBAR 'ZTITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.SAVE_OK = OK_CODE.CLEAR OK_CODE.CASE SAVE_OK.WHEN 'ZBACK' .LEAVE TO SCREEN 0. "返回上一个屏幕WHEN 'ZCANCEL'.LEAVE TO SCREEN 0.WHEN 'EXIT'.LEAVE PROGRAM. "返回程序WHEN OTHERS.ENDCASE.ENDMODULE.*&---------------------------------------------------------------------*
*& Module INIT_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE INIT_ALV OUTPUT.IF GS_ALV IS INITIAL.PERFORM FRM_SET_GRID.PERFORM FRM_SET_LAYOUT.PERFORM FRM_SET_FIELDCAT.PERFORM FRM_DISPLAY_ALV.ELSE.PERFORM FRM_REFRESH_ALV.ENDIF.ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SELECT_DATA .SELECT *FROM SFLIGHTINTO CORRESPONDING FIELDS OF TABLE GT_OUTPUTWHERE CARRID IN S_CARRID."数据处理LOOP AT GT_OUTPUT INTO GS_OUTPUT.GS_OUTPUT-SEATSOCC_O = GS_OUTPUT-SEATSMAX - GS_OUTPUT-SEATSOCC.MODIFY GT_OUTPUT FROM GS_OUTPUT.ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SET_GRID ."实例化屏幕容器CREATE OBJECT GS_DOCKEXPORTING
*     PARENT                      =REPID                       = SY-REPID                                                            "当前程序DYNNR                       = '0100'                                                               "屏幕编号SIDE                        = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT   "容器吸附左侧EXTENSION                   = 1300                                                              "ALV的宽度
*     STYLE                       =
*     LIFETIME                    = lifetime_default
*     CAPTION                     =METRIC                      = 0
*     RATIO                       = 100                                                                    "ALV的比率,优先级高于上面的EXTENSION
*     NO_AUTODEF_PROGID_DYNNR     =
*     NAME                        =EXCEPTIONSCNTL_ERROR                  = 1CNTL_SYSTEM_ERROR           = 2CREATE_ERROR                = 3LIFETIME_ERROR              = 4LIFETIME_DYNPRO_DYNPRO_LINK = 5OTHERS                      = 6.IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.*
*  CREATE OBJECT GS_CON
*    EXPORTING
**     PARENT                      =
*      CONTAINER_NAME              = 'GC_CON'
**     STYLE                       =
**     LIFETIME                    = lifetime_default
**      REPID                       = SY-REPID
**      DYNNR                       = '0100'
**     NO_AUTODEF_PROGID_DYNNR     =
*    EXCEPTIONS
*      CNTL_ERROR                  = 1
*      CNTL_SYSTEM_ERROR           = 2
*      CREATE_ERROR                = 3
*      LIFETIME_ERROR              = 4
*      LIFETIME_DYNPRO_DYNPRO_LINK = 5
*      OTHERS                      = 6.
*  IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  ENDIF."实例化alv展示对象CREATE OBJECT GS_ALVEXPORTING
*     I_SHELLSTYLE      = 0
*     I_LIFETIME        =I_PARENT          = GS_DOCK
*     I_APPL_EVENTS     = space
*     I_PARENTDBG       =
*     I_APPLOGPARENT    =
*     I_GRAPHICSPARENT  =
*     I_NAME            =
*     I_FCAT_COMPLETE   = SPACEEXCEPTIONSERROR_CNTL_CREATE = 1ERROR_CNTL_INIT   = 2ERROR_CNTL_LINK   = 3ERROR_DP_CREATE   = 4OTHERS            = 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.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .CLEAR: GS_LAYOUT.GS_LAYOUT-CWIDTH_OPT = 'X'.GS_LAYOUT-ZEBRA = 'X'.GS_LAYOUT-BOX_FNAME = 'ZBOX'. "左侧选择块GS_LAYOUT-SEL_MODE = 'A'. "A 左端有选择块 SPACE 空白
*  GS_LAYOUT-EDIT = 'X'.GS_LAYOUT-DETAILINIT = 'X'.GS_LAYOUT-DETAILTITL = '详细信息'.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .DEFINE M_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-FIELDNAME = &1.GS_FIELDCAT-REF_TABLE = &2.GS_FIELDCAT-REF_FIELD = &3.GS_FIELDCAT-SCRTEXT_L = &4.GV_COL = GV_COL + 1.GS_FIELDCAT-COL_POS = GV_COL.APPEND GS_FIELDCAT TO GT_FIELDCAT.END-OF-DEFINITION.REFRESH GT_FIELDCAT.CLEAR GV_COL.M_FIELDCAT 'CARRID' 'SFLIGHT' 'CARRID' '航线'.M_FIELDCAT 'CONNID' 'SFLIGHT' 'CONNID' '航班'.M_FIELDCAT 'FLDATE' 'SFLIGHT' 'FLDATE' '航班日期'.M_FIELDCAT 'PRICE' 'SFLIGHT' 'PRICE' '航空运费'.M_FIELDCAT 'CURRENCY' 'SFLIGHT' 'CURRENCY' '价格'.M_FIELDCAT 'PLANETYPE' 'SFLIGHT' 'PLANETYPE' '飞机类型'.M_FIELDCAT 'SEATSMAX' 'SFLIGHT' 'SEATSMAX' '经济舱位'.M_FIELDCAT 'SEATSOCC' 'SFLIGHT' 'SEATSOCC' '经济舱占据位'.M_FIELDCAT 'SEATSOCC_O' 'SFLIGHT' 'SEATSOCC' '经济舱剩余位'.M_FIELDCAT 'PAYMENTSUM' 'SFLIGHT' 'PAYMENTSUM' '当前预定总数'.M_FIELDCAT 'SEATSMAX_B' 'SFLIGHT' 'SEATSMAX_B' '商务舱位'.M_FIELDCAT 'SEATSOCC_B' 'SFLIGHT' 'SEATSOCC_B' '商务舱占据位'.M_FIELDCAT 'SEATSMAX_F' 'SFLIGHT' 'SEATSMAX_F' '头等舱位'.M_FIELDCAT 'SEATSOCC_F' 'SFLIGHT' 'SEATSOCC_F' '头等舱占据位'.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .DATA: LS_VARIANT TYPE DISVARIANT.LS_VARIANT-REPORT = 'H001'."调用方法生成alvCALL METHOD GS_ALV->SET_TABLE_FOR_FIRST_DISPLAYEXPORTING
*     I_BUFFER_ACTIVE               =
*     I_BYPASSING_BUFFER            =
*     I_CONSISTENCY_CHECK           =
*     I_STRUCTURE_NAME              =IS_VARIANT                    = LS_VARIANTI_SAVE                        = 'A'I_DEFAULT                     = 'X'IS_LAYOUT                     = GS_LAYOUT
*     IS_PRINT                      =
*     IT_SPECIAL_GROUPS             =
*     IT_TOOLBAR_EXCLUDING          = GT_UI_FUNC
*     IT_HYPERLINK                  =
*     IT_ALV_GRAPHICS               =
*     IT_EXCEPT_QINFO               =
*     IR_SALV_ADAPTER               =CHANGINGIT_OUTTAB                     = GT_OUTPUTIT_FIELDCATALOG               = GT_FIELDCAT
*     IT_SORT                       =
*     IT_FILTER                     =EXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR                 = 2TOO_MANY_LINES                = 3OTHERS                        = 4.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_REFRESH_ALV .DATA: LS_STABLE TYPE LVC_S_STBL.LS_STABLE-COL = 'X'.LS_STABLE-ROW = 'X'.CALL METHOD GS_ALV->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLE
*     I_SOFT_REFRESH =EXCEPTIONSFINISHED  = 1OTHERS    = 2.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.

代码中有一块代码需要解释一下

为什么要将OK_CODE复制一份然后清空呢
这里引用一下大佬博文中的说明:

在程序中你应该使用OK_CODE来代替SY-UCOMM,这有两种原因:第一,ABAP程序可以完全控制在它里面定义的变量,第二,你不应该修改ABAP系统变量的值。然而,你必须在ABAP程序中清空OK_CODE,因为以下几个原因:如果一个屏幕中的某个按钮未设置Function Code时也是可以触发PAI事件时,并且由于其Function Code此时为空而不会去设置OK_CODE(但此时SYST- UCOMM 或 SY-UCOMM会被重新设置为空),这样的话OK_CODE中的值还为上一次触发PAI时所设置的Function Code。所以一般情况下在使用OK_CODE之前,先将OK_CODE拷贝到SAVE_OK变量中,并随后将OK_CODE清空,以便为下一次PAI事件所使用做准备(比如下一屏幕直接在屏幕上按回车时,Function Code为空,因为在回车时命令框里没有输入任何命令,则此时OK_CODE字段不会被设置,所以还回沿用上次所设置的OK_CODE,所以就会出现问题)
地址:博文地址

运行效果:


附:还有另外一种方法,用CL_GUI_CUSTOM_CONTAINER容器实现,这里就不做介绍了,想了解的同学可以自行百度或谷歌。

OVER。

OO ALV简单报表之DOCKING容器实现相关推荐

  1. ALV (一)、funtion ALV,OO ALV,SALV

    ALV报表是我们再SAP经常需要用到的一种报表格式,除此之外还有list报表以及report的报表,他们之间可以相互的替换,但是ALV自带的函数会更多一些. 通常我们在使用ALV报表的时候有三种方式, ...

  2. 【ABAP】OO ALV 概述

    •OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出 •基本使用原理: –通过界面调用,在界面的Customer Control控件中,输出ALV •CLASS A ...

  3. abap oo alv

    OO ALV 1.相关类 CL_GUI_ALV_GRID CL_GUI_CUSTOM_CONTAINER CL_GUI_DOCKING_CONTAINER CL_GUI_SPLITTER_CONTAI ...

  4. SAP ABAP OO ALV全屏显示

    通过CL_GUI_SPLITTER_CONTAINER拆分容器,实现OO ALV全屏幕显示. 1.创建屏幕0100 . 代码实现如下: DATA SPLITTER TYPE REF TO CL_GUI ...

  5. ABAP - OO ALV基本实现步骤

    ABAP - OO ALV基本实现步骤 新建程序 定义屏幕 PBO实现 PAI实现 完整代码 新建程序 使用T-code:SE38 新建Report: ZOOALV 为新建的Report分配一个pac ...

  6. SAP小技巧 DOCKING容器解决分辨率问题

    一 前言 通过SAP ENJOY演示中心可以学习SAP常用容器的用法(TCODE: DWDM ) 其中有5个DEMO程序介绍不同的容器 自定义容器 固定容器(DOCKING容器) 拆分器容器 easy ...

  7. python开源报表系统_流程设计器、表单设计器和简单报表管理开源OA系统smart-web...

    smart-web2是一套相对简单的OA系统:包含了流程设计器,表单设计器,权限管理,简单报表管理等功能: 系统后端基于SpringMVC+Spring+Hibernate框架,前端页面采用JQuer ...

  8. OO ALV 工具栏对于的功能码

    原文地址:OO ALV 工具栏对于的功能码作者:Lemon 图标与对应的 功能码 明细 &DETAIL 检查 &CHECK 刷新 &REFRESH 剪切 &LOCAL& ...

  9. OO ALV 设置搜索帮助的三种方式 ONF4 EVENT

    一.在 FIELDCAT 中设置参照 二.CALL FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST ' 三.CALL FUNCTION ' HELP_VALUES_GE ...

最新文章

  1. Sentinel 高可用流量管理框架
  2. 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究
  3. html5边框有圆弧,CSS圆角有立体感的DIV边框
  4. 5.spring boot使用FastJson解析JSON数据
  5. exception日志 php_PHP 错误与异常的日志记录
  6. 使用Eclipse+PyDev创建Django项目一windows下
  7. Android开发 ---如何操作资源目录中的资源文件2
  8. vue hot true 不起作用_Vue + Flask 小知识(二)
  9. MacOS之Chrome弹框:代理要求提供用户名和密码(已解决)
  10. 基于SOCKS的IPv4向IPv6过渡技术
  11. 使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...
  12. (亲测有效).net framework 在计算机上已安装了更高的 4.x 版本,则无法安装以前的 4.5 版本。
  13. uniapp怎么使用阿里矢量图标,阿里矢量图标下载,阿里矢量图标应用,改变iconfont,uniapp 引用阿里矢量图标
  14. java-用for循环打印大写字母(部分简单大写字母)
  15. 【论文阅读笔记】faster rcnn 代码阅读细节
  16. C++编写COM组件
  17. 少儿教育和游戏的火花在哪里?
  18. 苹果笔记本怎样设置解除屏保时不需要输入密码
  19. 前端工作随笔日记 Day01
  20. docker push 到私服问题 : Retrying in 5 seconds

热门文章

  1. json bosn
  2. GMSK技术的原理(Principle of GMSK technologies)
  3. 广告位招租C: City
  4. Cent OS 7.7 搭建蓝鲸智云社区版5.1.27(2)——标准部署
  5. LSA/LSI算法原理和实践
  6. mysql数据库之存储过程
  7. 菜鸟菜鸟菜鸟菜鸟编程之路
  8. Shor’s algorithm
  9. python量化交易pandas中的用途
  10. SoapUI模拟服务端进行接口测试