二维码

[report] 用write输出带有表头和交通灯的格式化数据报表

Twilight发表于 2014-02-22 19:05Twilight 最后回复于 2014-02-22 19:05 [复制链接] 3685 0

先阅读:用write输出带有表头的格式化数据报表

作业2 将ZBC2_<YN>_HM1拷贝为ZBC2_<YN>_HM2
1 定义结构类型,包含表sflight的carrid connid fldate price currency planetype seatsmax seatsocc 字段,并新增一个字段occpercent 用来表示当前已经卖出去的座位的比例,即seatsocc/seatsmax,取值范围是0-1的两位小数,用p类型进行定义。
2 将内表与工作区用该类型重新定义
3 更改数据库取数据逻辑,将数据取道新的内表中
4 遍历取得的内表,将每条数据取出来,计算occpercent,并更新内表
5 输出数据时,在右边增加一列,将百分比数据在最后输出。
6 在输出的最右边再增加一列 找到图标中的红绿灯图标。如果百分比低于50 显示绿灯,高于50 低于75  显示黄灯 高于75  显示红灯。
7 更改选择屏幕,增加一个checkbox,打勾时,显示百分比和红绿灯图标,不打勾时,不不显示
8 更改选择屏幕,增加一组radiobox ,选第一项时 显示所有数据,选第二项时,只显示绿灯和黄灯的,选第三项时,只显示绿灯的。
9 调整选择屏幕外观,将数据的录入与选项的勾选,分成两个block 上下排列。

选择屏幕:
选择屏幕2block.jpg
带有红绿灯的list报表效果
WRITE_LIST.jpg

主程序代码:
  1. REPORT  ZLXG_HM2 .
  2. *--------------------------------------------------------------------*
  3. *TYPES
  4. *--------------------------------------------------------------------*
  5. TYPES:BEGIN OF TP_SFLIGHT,
  6.        carrid    TYPE SFLIGHT-carrid ,
  7.        connid    TYPE SFLIGHT-connid ,
  8.        fldate    TYPE SFLIGHT-fldate ,
  9.        price     TYPE SFLIGHT-price  ,
  10.        currency  TYPE SFLIGHT-currency,
  11.        planetypE TYPE SFLIGHT-planetypE,
  12.        seatsmax  TYPE SFLIGHT-seatsmax,
  13.        seatsocc  TYPE SFLIGHT-seatsocc,
  14.        occpercent TYPE P DECIMALS 2,
  15.       END OF TP_SFLIGHT.
  16. *--------------------------------------------------------------------*
  17. *DATA
  18. *--------------------------------------------------------------------*
  19. DATA:WA_SFLIGHT TYPE TP_SFLIGHT.
  20. DATA:IT_SFLIGHT TYPE STANDARD TABLE OF TP_SFLIGHT.
  21. DATA:IT_SFLIGHT_OUT TYPE STANDARD TABLE OF TP_SFLIGHT.
  22. *--------------------------------------------------------------------*
  23. *SELECTION-SCREEN
  24. *--------------------------------------------------------------------*
  25. SELECTION-SCREEN BEGIN OF BLOCK B_P1 WITH FRAME TITLE TEXT-010.
  26. PARAMETERS:PA_CARR TYPE SFLIGHT-CARRID.
  27. SELECT-OPTIONS:SO_CONN FOR WA_SFLIGHT-CONNID,
  28.                SO_FLDA FOR WA_SFLIGHT-FLDATE.
  29. SELECTION-SCREEN END OF BLOCK B_P1.
  30. SELECTION-SCREEN BEGIN OF BLOCK B_P2 WITH FRAME TITLE TEXT-011.
  31. PARAMETERS: PA_check  AS CHECKBOX.
  32. PARAMETERS: radio1 RADIOBUTTON GROUP int,
  33.             radio2 RADIOBUTTON GROUP int,
  34.             radio3 RADIOBUTTON GROUP int.
  35. SELECTION-SCREEN END OF BLOCK B_P2.
  36. *--------------------------------------------------------------------*
  37. *LOAD-OF-PROGRAM = INITIALIZATION
  38. *--------------------------------------------------------------------*
  39. LOAD-OF-PROGRAM.
  40. PA_CARR = 'AA'.
  41. PA_check = 'X'.
  42. *--------------------------------------------------------------------*
  43. *AT SELECTION-SCREEN
  44. *--------------------------------------------------------------------*
  45. AT SELECTION-SCREEN ON PA_CHECK.
  46.   IF PA_check IS NOT INITIAL.
  47.      MESSAGE W003(ZVINO).
  48. *   Invalid operator!
  49.   ENDIF.
  50. *--------------------------------------------------------------------*
  51. *TOP-OF-PAGE.
  52. *--------------------------------------------------------------------*
  53. TOP-OF-PAGE.
  54. FORMAT COLOR COL_HEADING.
  55. IF PA_check = 'X'.
  56.   ULINE 1(131).
  57. ELSE.
  58.   ULINE /1(107).
  59. ENDIF.
  60. WRITE:/ SY-VLINE, AT 2(10) 'carrid'(001) ,
  61.         SY-VLINE, AT 14(10)'connid'(002),
  62.         SY-VLINE, AT 26(20)'fldate'(003),
  63.         SY-VLINE, AT 48(10)'price'(004),
  64.         SY-VLINE, AT 60(10)'currency'(005),
  65.         SY-VLINE, AT 72(10)'planetype'(006),
  66.         SY-VLINE, AT 84(10)'seatsmax'(007),
  67.         SY-VLINE, AT 96(10)'seatsocc'(008).
  68.         IF PA_check = 'X'.
  69.           WRITE:SY-VLINE, AT 108(10)'percent'(009),
  70.                 SY-VLINE, AT 120(10)'STATUS'(012),SY-VLINE.
  71.           ULINE /1(131).
  72.           ELSE.
  73.             WRITE:SY-VLINE.
  74.             ULINE /1(107).
  75.         ENDIF.
  76. FORMAT RESET.

  77. *--------------------------------------------------------------------*
  78. *START-OF-SELECTION.
  79. *--------------------------------------------------------------------*
  80. START-OF-SELECTION."主处理事件 这个不能放在perform里
  81. PERFORM select_date."把查询写成了了一个子程序,后面还可以附using changing  参数来对应取值
  82. form select_date.

  83. SELECT *
  84.   FROM SFLIGHT
  85.   INTO CORRESPONDING FIELDS OF TABLE IT_SFLIGHT
  86.   WHERE CARRID = PA_CARR
  87.   AND CONNID IN SO_CONN
  88.   AND FLDATE IN SO_FLDA.

  89. LOOP AT IT_SFLIGHT INTO WA_SFLIGHT.
  90. WA_SFLIGHT-occpercent = WA_SFLIGHT-seatsocc / WA_SFLIGHT-seatsmax.
  91. MODIFY IT_SFLIGHT FROM WA_SFLIGHT.
  92. ENDLOOP.

  93. CASE 'X'.
  94.   WHEN radio1.
  95.     IT_SFLIGHT_OUT = IT_SFLIGHT.
  96.   WHEN RADIO2.
  97.     LOOP AT IT_SFLIGHT INTO WA_SFLIGHT WHERE occpercent < '0.75'.
  98.        APPEND WA_SFLIGHT TO IT_SFLIGHT_OUT.
  99.     ENDLOOP.
  100.   WHEN RADIO3.
  101.     LOOP AT IT_SFLIGHT INTO WA_SFLIGHT WHERE occpercent < '0.5'.
  102.        APPEND WA_SFLIGHT TO IT_SFLIGHT_OUT.
  103.     ENDLOOP.
  104. ENDCASE.

  105. LOOP AT IT_SFLIGHT_OUT INTO WA_SFLIGHT.
  106. WRITE:/ SY-VLINE, AT 2(10)  WA_SFLIGHT-carrid COLOR COL_KEY,
  107.         SY-VLINE, AT 14(10) WA_SFLIGHT-connid COLOR COL_KEY,
  108.         SY-VLINE, AT 26(20) WA_SFLIGHT-fldate COLOR COL_KEY,
  109.         SY-VLINE, AT 48(10) WA_SFLIGHT-price  CURRENCY WA_SFLIGHT-currency,
  110.         SY-VLINE, AT 60(10) WA_SFLIGHT-currency,
  111.         SY-VLINE, AT 72(10) WA_SFLIGHT-planetype,
  112.         SY-VLINE, AT 84(10) WA_SFLIGHT-seatsmax,
  113.         SY-VLINE, AT 96(10) WA_SFLIGHT-seatsocc.
  114.         IF PA_check = 'X'.
  115.         WRITE:SY-VLINE, AT 108(10) WA_SFLIGHT-occpercent.
  116.           IF WA_SFLIGHT-occpercent < '0.5'.
  117.             WRITE: SY-VLINE, AT 120(10) ICON_GREEN_LIGHT AS ICON ,SY-VLINE.
  118.             ELSEIF WA_SFLIGHT-occpercent < '0.75'.
  119.               WRITE: SY-VLINE, AT 120(10) ICON_YELLOW_LIGHT AS ICON ,SY-VLINE.
  120.               ELSE.
  121.               WRITE: SY-VLINE, AT 120(10) ICON_RED_LIGHT AS ICON ,SY-VLINE.
  122.           ENDIF.
  123.           ULINE /1(131).
  124.         ELSE.
  125.             WRITE:SY-VLINE.
  126.             ULINE /1(107).
  127.         ENDIF.
  128. ENDLOOP.
  129. endform.
复制代码
回复

使用道具 举报

快速回帖

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

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