ALV屏幕输出小结

2019-10-09

用 ALV 输出的基本流程:

PERFORM get_data.

PERFORM event_build.
  PERFORM layout_build.
  PERFORM fields.
  PERFORM output_alv.

1. 定义 ALV 用到的变量.

TYPE-POOLS: slis.  "package

DATA: i_alv_fieldcat TYPE slis_t_fieldcat_alv.
   DATA: i_alv_field TYPE slis_fieldcat_alv.
   DATA: i_layout TYPE slis_layout_alv.
   DATA: w_repid LIKE sy-repid.
   DATA: i_events TYPE slis_t_event,
         i_event_exit TYPE slis_t_event_exit,
         i_list_comments TYPE slis_t_listheader, "用来填充表单标题区域
         i_excluding TYPE slis_t_extab.
   DATA: w_variant LIKE disvariant,
         w_variant_save(1) TYPE c,
         w_events LIKE LINE OF i_events,
         w_list_comments LIKE LINE OF i_list_comments,

i_sort TYPE STANDARD TABLE OF slis_sortinfo_alv,
         w_sort LIKE LINE OF i_sort.

2. 定义INITIALIZATION部分

CLEAR: w_variant.
    w_repid = sy-repid.
    w_variant-report = w_repid.
    w_variant-username = sy-uname.
    w_variant_save = ‘A‘.   "All types

3. 对标题区和页尾区赋值

FORM event_build .

CALL FUNCTION ‘REUSE_ALV_EVENTS_GET‘  "获得事件名称及 form 的内表, 后面去填补 form"
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = i_events.
  READ TABLE i_events WITH KEY name = slis_ev_top_of_page INTO w_events.
  IF sy-subrc = 0.
    MOVE ‘ALV_TOP_OF_PAGE‘ TO w_events-form. "将标题区数据赋值给 W_EVENTS
    MODIFY i_events FROM w_events INDEX sy-tabix.
  ENDIF.
  READ TABLE i_events WITH KEY name = slis_ev_end_of_list INTO w_events.
  IF sy-subrc = 0.
    MOVE ‘ALV_END_OF_LIST‘ TO w_events-form. "将页尾数据赋值给 W_EVENTS
    MODIFY i_events FROM w_events INDEX sy-tabix.
  ENDIF.
  READ TABLE i_events WITH KEY name = slis_ev_end_of_page INTO w_events.
  IF sy-subrc = 0.
    MOVE ‘ALV_END_OF_PAGE‘ TO w_events-form. "将页脚区数据赋值给 W_EVENTS.
    MODIFY i_events FROM w_events INDEX sy-tabix.
  ENDIF.

ENDFORM.

 定义上面用到的子函数

FORM alv_top_of_page.

DATA: p_werks(40).
  CLEAR: i_list_comments[].
  w_list_comments-typ = ‘H‘. "H=Header, S=Selection, A=Action
  w_list_comments-key = ‘‘.
  w_list_comments-info = ‘USI 同一 PO 分批收料报表‘.
  APPEND w_list_comments TO i_list_comments.
*  w_list_comments-typ = ‘S‘. "H = Header, S = Selection, A = Action
*  w_list_comments-key = ‘‘.
*  CONCATENATE ‘厂别‘ ‘1000‘ INTO p_werks.
*  w_list_comments-info = p_werks.
*  APPEND w_list_comments TO i_list_comments.
*
*  w_list_comments-typ = ‘S‘. "H = Header, S = Selection, A = Action
*  w_list_comments-key = ‘‘.
*  CONCATENATE ‘厂别‘ ‘2000‘ INTO p_werks.
*  w_list_comments-info = p_werks.
*  APPEND w_list_comments TO i_list_comments.
  CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE‘
    EXPORTING
      i_logo             = ‘ENJOYSAP_LOGO‘
      it_list_commentary = i_list_comments.

ENDFORM.                    "alv_top_of_page

*&---------------------------------------------------------------------*
*&      Form  alv_end_of_list
*&---------------------------------------------------------------------*
FORM alv_end_of_list.
  clear: i_list_comments[].
  w_list_comments-typ = ‘H‘. "H=Header, S=Selection, A=Action
  w_list_comments-key = ‘‘.
  w_list_comments-info = ‘页脚显示‘.
  APPEND w_list_comments to i_list_comments.
  call FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE‘
    EXPORTING
      it_list_commentary = i_list_comments
      i_logo             = ‘ENJOYSAP_LOGO‘
      i_end_of_list_grid = ‘X‘.
ENDFORM.                    "alv_end_of_list
*&---------------------------------------------------------------------*
*&      Form  alv_end_of_page
*&---------------------------------------------------------------------*
FORM alv_end_of_page.
*  CLEAR: i_list_comments[].
*  w_list_comments-typ = ‘A‘. "H=Header, S=Selection, A=Action
*  w_list_comments-key = ‘‘.
*  w_list_comments-info = ‘END OF PAGE‘.
*  APPEND w_list_comments TO i_list_comments.
*
*  CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE‘
*    EXPORTING
*      it_list_commentary = i_list_comments
*      i_logo             = ‘ENJOYSAP_LOGO‘
*      i_end_of_list_grid = ‘X‘.
ENDFORM.                    "alv_end_of_page

4. Layout设置

FORM layout_build .

w_repid = sy-repid.                "当前程式

i_layout-zebra = ‘X‘.              "斑马条纹间隔

i_layout-colwidth_optimize = ‘X‘.  "优化列宽

*  i_layout-no_vline = ‘X‘.           "用来设置是否有列间隔线

i_layout-detail_initial_lines = ‘X‘.

i_layout-detail_titlebar = ‘详细内容‘.  "设置弹出窗口的标题栏

i_layout-detail_popup = ‘X‘. "是否弹出详细信息窗口

i_layout-f2code = ‘&ETA‘. "设置触发弹出详细窗口的功能码,这里是双击

*  i_layout-info_fieldname = ‘COLOR‘ ."设置颜色属性,设置ALV输出报表每一行的颜色,

"其参数为输出内表的栏位名称,要注意的是,使用
  "该属性需要同时在内表中定义一个与该参数所定义
  "字段相同的栏位,然后往该栏位位填值.  "

先介绍ALV里色码.就是颜色编码,4位CHAR型.

Cxyz---

Color X:1-7

Y:1/0: 强化 开/关

Z:1/0: 相反 开/关

其中C是固定的第一位,第二位代表是颜色编码(1到7),第三位是加强的设置,第四位是相反,个人理解,在强化关闭的情况下,相反的作用是背景和字体的变化.

颜色编码:

x 颜色 主要使用在

1 Gray-blue headers

2 Light gray List bodies

3 yellow totals

4 Blue-green Key columns

5 green Positive threshold value

6 red Negative threshold value

7 orange Control levels

ENDFORM.                    " LAYOUT_BUILD

5. Fieldcat设置

pos = pos + 1.
  PERFORM set_fieldcat USING pos ‘EXCESS‘ ‘Excess‘ ‘C500‘.

FORM set_fieldcat  USING  p_pos p_field_name p_field_text p_color.

w_fieldcat-col_pos = p_pos.
  w_fieldcat-fieldname = p_field_name.
  w_fieldcat-seltext_m = p_field_text.
  w_fieldcat-emphasize = p_color.         "设置列的颜色,注意:行的颜色会覆盖列的颜色
  w_fieldcat-do_sum = ‘X‘.                "对列求和

w_fieldcat-just = ‘R‘.                  "对齐试(R, L, C)

w_fieldcat-lzero = ‘X‘.                 "前导0的形式显示

*  w_fieldcat-no_sign = ‘X‘.                "将定义栏位的符号设置为不显示
*  w_fieldcat-hotspot = ‘X‘.                "设置栏位是否有热点

APPEND w_fieldcat TO i_fieldcat.

ENDFORM.                    " SET_FIELDCAT

6. 输出

     REUSE_ALV_GRID_DISPLAY

     REUSE_ALV_LIST_DISPLAY

FORM output_alv .
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
    EXPORTING
      i_callback_program = w_repid
      i_save             = ‘A‘
      i_default          = ‘X‘
      is_layout          = i_layout
      it_fieldcat        = i_alv_fieldcat
      it_events          = i_events

it_sort          = i_sort[]

i_callback_html_top_of_page = ‘DGL_HTML_TOP_OF_PAGE‘  "覆盖 i_events中定义的.
    TABLES
      t_outtab           = it_output[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.

7. 颜色的显示

ALV中每行颜色显示都是通过LAYOUT控制的, 要实现每行颜色的控制

step 1. 
   在输出内表中新增一个字段, 用于保存颜色的属性.

step 2.

给内表的颜色字段赋值.

step 3.

在LAYOUT中指定内表中定义的颜色字段名称.

i_layout-info_fieldname = ‘COLOR‘ ."设置颜色属性,设置ALV输出报表每一行的颜色,

8. ALV输出值的排序及汇总

该属性设置在IT_SORT接口之中.

IT_SORT 的属性有如下:

SPOS: 排序顺序,多个字段排序时使用.

FIELDNAME: 排序字段名称.

UP/DOWN: 升序/降序排序.

GROUP: 控制中断.

SUBTOT: 对指定字段小计输出. 要实现小计, 首先要保证ALV输出内表的合并功能, FIELDCAT 的DO_SUM字段

设置为‘X‘.

FORM set_sort .

w_sort-fieldname = ‘MATKL‘.

w_sort-up = ‘X‘.

w_sort-group = ‘*‘.

w_sort-subtot = ‘X‘.

APPEND w_sort TO i_sort.

ENDFORM.

这样相同的那列就会合并,如果要避免合并,请在布局中设置"no_merging"为"X" .

9. ALV 标题中的表头

表头信息可以通过ALV的接口"I_CALLBACK_HTML_TOP_OF_PAGE"实现.

其实表头完全是个HTML文件,所以可参考HTML语法.

FORM dgl_html_top_of_page USING r_ddoc TYPE REF TO cl_dd_document.

DATA: text TYPE sdydo_text_element.
  CALL METHOD r_ddoc->initialize_document.  "定义表头文本
  DEFINE write_inf.
    call  method r_ddoc->new_line.           "换行
    call  method r_ddoc->add_icon           "输出图标
      exporting
        sap_icon = &1.
    call  method r_ddoc->add_text          "输出文本
      exporting
        text = &2.
  END-OF-DEFINITION.
  CALL METHOD r_ddoc->add_text
    EXPORTING
      text         = ‘Justin Test‘
      sap_emphasis = ‘STRONG‘.
  write_inf ‘ICON_GREEN_LIGHT‘ ‘: 商品库存‘.
  write_inf ‘ICON_RED_LIGHT‘ ‘: 商品无可用库存‘.
ENDFORM.

data: m_buff TYPE string.
data: m_p TYPE i.

m_buff = ‘<html>‘.

CALL METHOD cl_dd->html_insert

EXPORTING

contents = m_buff

CHANGING

position = m_p.

m_buff = ‘<center><H2>配件报废品种汇总表</H2></Center>‘.

CALL METHOD CL_DD->HTML_INSERT

EXPORTING

CONTENTS = m_buff

CHANGING

POSITION = m_p.

CONCATENATE ‘报表日期:‘ S_DATE-LOW ‘ TO ‘ S_DATE-HIGH  ‘<BR>‘ into m_buff.

CALL METHOD CL_DD->HTML_INSERT

EXPORTING

CONTENTS = m_buff

CHANGING

POSITION = m_p.

m_buff = ‘</html>‘.

CALL METHOD cl_dd->html_insert

EXPORTING

contents = m_buff

CHANGING

position = m_p.

原文地址:https://www.cnblogs.com/salah/p/11641939.html

时间: 2024-08-10 09:29:29

ALV屏幕输出小结的相关文章

Linux命令执行的屏幕输出内容重定向到日志文件

摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到文件,比如 echo "hello,word">> temp.txt 那么我现在想把hadoop或者spark的命令执行的屏幕输出到文件怎么办?很简单,命令如下 hadoop jar *.jar $mrClass > mr.log 2>&1 注意上面命令 *

Python实现屏幕输出进度条的方法

一般输出到屏幕的时候是一组数据一次性全部显示出来得.这是因为电脑为了提高效率,数据会先暂时放入缓存,等缓存满了或者操作结束了,再一次性将数据进行处理. 类似进度条的情况需要字符一次一个的蹦出来,这时候就需要使用flush()来强制执行这个处理缓存内数据的操作. 上课讲文件flush()的时候,最后提到了这个.就先抄下来了. import sys,time for i in range(20):     sys.stdout.write("#")  # 调用sys在屏幕输出     sy

JavaScript的屏幕输出及时间函数

Js屏幕输出 重定向页面输出: 更改输出流,如果在加载时使用则会正常排序,如果在HTML加载完成后使用,如点击事件,则会全部覆盖原HTML的内容. 1 <script> 2 //参数为输出内容 3 document.write("dongxiaodong<br/>东小东"); 4 </script> 弹框网页: 可以实现打开一个类似于提示栏窗口网页. window.open("https://www.cnblogs.com/dongxiao

第三章 键盘输入和屏幕输出

1.顺序结构 a.输入数据--处理数据--输出数据 b.程序获得输入数据的方式:键盘.文件 c.程序输出数据的方式:屏幕.文件 d.若是需要输入输出数据,则必须使用编译预处理指令:#include <stdio.h> 2.printf()格式字符 %d     decimal--输出十进制有符号 int 型 %u     unsigned--输出十进制无符号 int 型 %f      float--以小数形式(6位小数)输出 float,double 型 %e     exponent--以

nohup 同时实现记录日志和屏幕输出

nohup nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应的进程.nohup就是不挂断的意思( no hang up). 该命令的一般形式为:nohup command & 使用nohup命令提交作业 如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: nohup command > myout.f

C语言格式化输出小结

函数说明 在gcc编程中,我们常用到的字符格式化输出函数是printf的,实际上gcc继承了C语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库函数文件stdio.h/ stdarg.h中,具体函数如下: #include <stdio.h> printf, int printf(const char *format, ...); fprintf, int fprintf(FILE *stream, const char *format, ...); sprintf

android 屏幕适配小结

做android开发,开源嘛,满市场都是凌乱的机型,总少不了适配这样或那样的型号.在这里分享一下自己在开发中用到的方法. 首先要介绍一下drawable-mdpi.drawable-hdpi-1280x800.drawable-hdpi.这个相信好好看一下也明白.就是代表着分辨率 320X480.1280X800.480X800三款屏幕图片资源包.其实适配也很多.我大致说一种就行,其他大家慢慢琢磨,或上网周转. 说明一下这个图的意思,就是我要说的配置方法,就是一套图片资源(资源文件要看美工的设计

根据输入的行数及列数在屏幕输出菱形图案

/*程序运行结果:        1234567  1          #                2        ###  3      #####  4    #######  5      #####  6        ###                         7          #  */ #include <stdio.h> #include <stdlib.h> void diamond(int, int, char); int main(v

你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?

2.2  基本输入/输出流 听过HelloWorld.exe的自我介绍之后,大家已经知道了一个C++程序的任务就是描述数据和处理数据.这两大任务的对象都是数据,可现在的问题是,数据不可能无中生有地产生,C++程序也不可能凭空创造出来数据.那么,C++程序中的数据又从何而来呢? 在现实世界中,国与国之间的交流是通过外交官来完成的.在C++世界中,也有负责应用程序跟外界进行数据交流的外交官,它们的名字就是基本输入/输出流对象(iostream).一个C++程序在工作的时候,负责输入的外交官(istr