• 如何从零开始开发一个ALV报表


    https://www.cnblogs.com/VerySky/articles/2192401.html

    一般一个ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。
    ALV的报表显示方式有两种
    一种调用"REUSE_ALV_GRID_DISPLAY" 函数
    一种调用"REUSE_ALV_LIST_DISPLAY"函数
    这里我们以alv_grid 来举例

    一般我们约定俗称在报表中用以下格式开发

    REPORT ZXXXXX.
    INCLUDE ZXXXX_TOP
    INCLUDE ZXXXX_FORM
    INCLUDE  ZXXXX_......
    
    • 1
    • 2
    • 3
    • 4

    一般在ZXXXXX_TOP中,我们用来存储变量
    而在ZXXXX_FORM 中,我们一般来存储各个 form
    ZXXXX_FORM 还可以分开命名为ZXXXX_F01 ZXXXX_F02 ZXXXX_F03等

    ABAP 开发属于事件驱动开发, 所以SAP程序就需要由一个个事件去触发才能够执行的程序,当我们使用SE38去创建一个可执行程序(以REPORT 开头)时,我们可以直接调试,然后会发现,程序就是按事件块的顺序去执行的。
    下面介绍几个事件块
    INITIALIZATION. (初始化。在所有以下事件块运行之前运行的,只运行一次的事件块)
    AT SELECTION-SCREEN OUTPUT. (PBO事件块,即屏幕输出前事件块)
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR 选择屏幕字段名称(自定义搜索帮助事件块)
    AT SELECTION-SCREEN (PAI 事件块,即屏幕操作后事件块)
    START-OF-SELECTION. (程序运行事件块)

    而在 START-OF-SELECTION 中,我们一般都会写以下几个PERFORM,
    PERFORM frm_get_data.(取数逻辑)
    PERFORM frm_alv_layout_build. (创建ALV显示格式)
    PERFORM frm_alv_set_columns. (调用ALV函数)

    二、开发ALV的基本流程:
    第一步: 定义ALV所要用到的类型池: TYPE-POOLS: SLIS;
    第二步: 定义ALV所要显示的数据对应的内表数据类型及内表数据对象;
    第三步: 定义一些显示ALV时索要用到的变量,例如:
    Data: w_repid like sy-repid, “ABAP程序,我们一般取当前程序

        w_callback_ucomm   type slis_formname,   "字符型,功能
    
        w_print            type slis_print_alv,  "类型组
    
        w_layout           type slis_layout_alv, "类型组
    
        w_html_top_of_page type  slis_formname,  "字符型
    
        w_fieldcat_alv     like line of i_fieldcat_alv, “从上面的数据结构类型引用过来的
    
        w_excluding        like line of i_excluding,    “同上
    
        w_events           like line of i_events,       “同上
    
        w_event_exit       like line of i_event_exit,   “同上
    
        w_list_comments    like line of i_list_comments.“同上
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    第四步: 定义选择屏幕
    第五步: 声明各个选择屏幕事件块,例如:
    定义initialization 部分,在这个部分往往需要指定w_repid = sy_repid.
    定义 start-of-selection 部分, 在这通常会调用各种子程序,以下以标准ALV显示为例:
    1.调用一个子程序(通常命名为frm_get_dataXXX)用于获取 ALV所要显示的数据,

     FORM frm_get_data.
    
        … …    “其它处理逻辑
    
    SELECT lifnr           "供应商账号
         ktokk           "账号组
         name1           "名称1
         name2           "名称2
       INTO CORRESPONDING FIELDS OF TABLE it_main
       FROM zmmjyht003
       WHERE (l_where)
       .
    
      … …    “其它处理逻辑
    
     ENDFORM.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2) 调用一个子程序 (通常命名为frm_alv_layout_build),用于设置ALV所要显示的样式;
    例如:
    FORM

  • 相关阅读:
    使用VuePress快速搭建博客
    索引-动图演示存储过程
    为博客园开发了一套脚手架及模板——实时预览页面定制效果
    javascript获取地址栏的绝对路径
    第26期 | GPTSecurity周报
    uniapp常用的生命周期
    驱动仅提供32位刷写的情况下如何完成刷写单数字节
    无人机航迹规划:六种最新智能优化算法(DBO、LO、SWO、COA、LSO、KOA)求解无人机路径规划MATLAB
    windows环境下qt-material-widget开源库的编译
    OSG笔记:对线求交失败
  • 原文地址:https://blog.csdn.net/weixin_43847969/article/details/127961112