二维码

[report] AT LINE-SELECTION双击事件的多层级屏幕的用法

Twilight发表于 2014-03-30 16:03Twilight 最后回复于 2014-03-30 16:03 [复制链接] 5034 0

AT LINE-SELECTION用于在报表输出时,点击某行时所产生的操作,响应的位置在整行,具体应用时一般和 HIDE 连用。
sy-lsind  判断是第几层显示,不双击,默认当前的屏幕sy-lsind=0.

选择屏幕:
at line selection1.jpg
执行效果:
at line selection2.jpg
双击某行,显示下一屏
at line selection3.jpg

主程序代码:
  1. TABLES: mara, makt.
  2. **********************************************************************
  3. *自定义内表,工作区
  4. **********************************************************************
  5. DATA: BEGIN OF itab,
  6.         matnr TYPE mara-matnr,  "物料编号
  7.         ersda TYPE mara-ersda,  "创建日期
  8.         ernam TYPE mara-ernam,  "创建人
  9.         mtart TYPE mara-mtart,  "物料类型
  10.         meins TYPE mara-meins,  "单位
  11.         gewei TYPE mara-gewei,  "单位
  12.       END OF itab.
  13. DATA wa_itab LIKE itab.
  14. DATA it_itab  LIKE TABLE OF itab.

  15. DATA: BEGIN OF makt1,
  16.           matnr TYPE makt-matnr,   " 物料编号
  17.           spras TYPE makt-spras,   "语言
  18.           maktx TYPE makt-maktx,   "物料描述(短文本)
  19.           maktg TYPE makt-maktg,   "相关匹配码大写物料描述
  20.         END OF makt1.
  21. DATA: wa_makt1 LIKE makt1,
  22.       it_makt1 LIKE TABLE OF makt1.

  23. DATA: BEGIN OF matkl,
  24.         matnr TYPE mara-matnr,
  25.         matkl TYPE mara-matkl,
  26.       END OF matkl.
  27. DATA:wa_matkl LIKE matkl,
  28.      it_matkl LIKE TABLE OF matkl.

  29. **********************************************************************
  30. *定义选择屏幕
  31. **********************************************************************
  32. SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE  text-001.
  33. SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE  text-002.
  34. SELECT-OPTIONS p_matnr FOR mara-matnr DEFAULT '20' TO '800'.
  35. SELECT-OPTIONS p_ersda FOR mara-ersda DEFAULT '19910101'
  36.                                            TO '20121212'.
  37. SELECT-OPTIONS p_ernam FOR mara-ersda.
  38. SELECT-OPTIONS p_mtart FOR mara-mtart.
  39. SELECT-OPTIONS p_meins FOR mara-meins.
  40. SELECTION-SCREEN END OF BLOCK bk2.
  41. SELECTION-SCREEN END OF BLOCK bk1.
  42. *INITIALIZATION.
  43. *  p_matnr-low = '20'.
  44. *  p_matnr-high = '800'.
  45. *  p_ersda-low = '1991-01-01'.
  46. *  p_ersda-high = '2012-12-12'.

  47. **********************************************************************
  48. *start-of-selection
  49. **********************************************************************
  50. START-OF-SELECTION.
  51.   PERFORM get_sec1.

  52. **********************************************************************
  53. *at line-selection
  54. **********************************************************************
  55. AT LINE-SELECTION.
  56.   PERFORM get_sec2.

  57. **********************************************************************
  58. *子程序1  第一次屏幕输出调用
  59. **********************************************************************
  60. FORM get_sec1.
  61. **********************************************************************
  62. *从数据库表取数
  63. **********************************************************************
  64.   SELECT matnr ersda ernam mtart meins gewei
  65.     INTO CORRESPONDING FIELDS OF TABLE it_itab
  66.     FROM mara
  67.     WHERE matnr BETWEEN p_matnr-low AND p_matnr-high
  68.       AND ersda BETWEEN p_ersda-low AND p_ersda-high.
  69.   HIDE mara-matnr.

  70. **********************************************************************
  71. *    格式化输出内表数据
  72. **********************************************************************
  73. *    WRITE: '123456789112345678921234567893123456789412345678951234567896123456789'.
  74.   ULINE AT /(74).
  75.   WRITE: / sy-vline,  (10) '物料编号',
  76.            sy-vline,15(10) '创建日期',
  77.            sy-vline,27(10) '创建人',
  78.            sy-vline,39(10) '物料类型',
  79.            sy-vline,51(10) '单位',
  80.            sy-vline,63(10) '毛重',sy-vline.
  81.   ULINE /(74).
  82.   LOOP AT it_itab INTO wa_itab.
  83.     FORMAT HOTSPOT ON.
  84.     WRITE: / sy-vline,(10) wa_itab-matnr COLOR 6 INVERSE ON.
  85.     FORMAT HOTSPOT OFF  COLOR OFF.
  86.     WRITE:   sy-vline,15(10) wa_itab-ersda,
  87.              sy-vline,27(10) wa_itab-ernam,
  88.              sy-vline,39(10) wa_itab-mtart,
  89.              sy-vline,51(10) wa_itab-meins,
  90.              sy-vline,63(10) wa_itab-gewei,sy-vline.
  91. *      FORMAT HOTSPOT. wa_itab-matnr.
  92.     HIDE wa_itab-matnr. "隐藏关键字段
  93.     ULINE /(74).
  94.   ENDLOOP.
  95. ENDFORM.                    "get_sec1

  96. **********************************************************************
  97. *子程序2 触发双击事件后调用
  98. **********************************************************************
  99. FORM get_sec2.
  100.   IF sy-lsind = 1.
  101. *  read LINE sy-index FIELD VALUE wa_itab-matnr.
  102.     SELECT matnr spras maktx maktg
  103.       INTO CORRESPONDING FIELDS OF TABLE it_makt1
  104.       FROM makt
  105.       WHERE matnr = wa_itab-matnr. "按双击行关键字查找
  106. **********************************************************************
  107. *格式化输出
  108. **********************************************************************
  109.     ULINE (104).
  110.     WRITE: / sy-vline,  (10) '物料编号',
  111.              sy-vline,15(4) '语言',
  112.              sy-vline,21(40) '物料描述(短文本)',
  113.              sy-vline,63(40) '相关匹配码的大写物料描述',sy-vline.
  114.     ULINE /(104).
  115.     LOOP AT it_makt1 INTO wa_makt1.
  116.       FORMAT HOTSPOT ON.
  117.       WRITE: / sy-vline,  (10) wa_makt1-matnr COLOR 6 INVERSE ON.
  118.       FORMAT HOTSPOT OFF  COLOR OFF.
  119.       WRITE: sy-vline,15(4) wa_makt1-spras,
  120.              sy-vline,21(40) wa_makt1-maktx,
  121.              sy-vline,63(40) wa_makt1-maktg,sy-vline.
  122. *       HIDE:wa_makt1-matnr.
  123.       ULINE /(104).
  124.     ENDLOOP.
  125.   ENDIF.

  126.   IF sy-lsind = 2.
  127.     SELECT matnr matkl
  128.     INTO CORRESPONDING FIELDS OF TABLE it_matkl
  129.     FROM mara
  130.     WHERE matnr = wa_itab-matnr.

  131.     ULINE (25).
  132.     WRITE:/ sy-vline, 2(10) '物料编号',
  133.             sy-vline, 14(10) 'MATKL',sy-vline.
  134.     ULINE /(25).


  135.     LOOP AT it_matkl INTO wa_matkl.
  136.       WRITE:/ sy-vline, 2(10) wa_matkl-matnr.
  137.       WRITE:  sy-vline, 14(10) wa_matkl-matkl,sy-vline.
  138.       ULINE /(25).
  139.     ENDLOOP.
  140.   ENDIF.
  141. ENDFORM.                    "get_sec2
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

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