二维码

tablestrip control设计实例

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

建立程序ZBCDialog_<YN>_HM和Dialog相关的程序,都写在这一个程序中
步骤1
建立一个屏幕,要求如下:
tablestrip1.jpg
步骤2:在这个屏幕的PAI事件中,建立Module user_command_100,并建立相应的include(程序名_100_PAI)
步骤3:该PAI模块的功能为退出该屏幕,返回主程序,在该模块中写代码完成该功能。
步骤4:建立GUI Title 命名为 TITLE_100,内容为”Flight Data”.
步骤5:建立GUI Status命名为STATUS_100,在标准工具栏中,将Back按钮填上指令。
步骤6:在PBO事件中,编写status_100 module,在该module中设定title 和status
步骤7:在窗体设计其中将OK_CODE填写上,并在程序中声明相应的数据对象
步骤8:建立一个PBO模块(Clearok_code),在PBO事件执行的最开始,将OK_CODE清空。
步骤9:画窗体字段,要求如下
tablestrip2.jpg
(sdyn_conn为表名字,-后面是字段名字,注意右边的属性)
步骤10:在程序中声明相对应的数据对象
步骤11:用户输入完前三个字段后,按回车,从表sflight中读取对应的数据,如果找不到,则返回错误消息E038(bc410)如果能找到数据,则将数据显示在屏幕上。
步骤12:在该屏幕的GUI STATUS中,将标准工具栏EXIT和CANCEL功能实现,设定其Function Type 为E ,在屏幕的PAI模块中,确保当用户点击EXIT或者CANCEL时,不经过数据校验,直接退出屏幕。
步骤13:打开屏幕设计器,在carrid字段的录入框处,将dropdown的属性设置为listbox,并确保Valu List属性,勾选了,来自abap数据字典。(观察一下有什么不同)
步骤14:建立如下三个子屏幕:
tablestrip3.jpg
步骤15:利用字屏幕区与与TabControl,将三个字屏幕都放到主屏幕中
设计好俄屏幕如下图:
tablestrip6.jpg tablestrip8.jpg
步骤17:编写屏幕110 120的PBO事件,为他们填充数据
步骤18:在屏幕130中放置一个表,用来显示sflight下面的sbook表里面的数据,字段如下:
tablestrip4.jpg
步骤19:编写PBO和PAI事件,填充表格里面的数据。规定缓存数据的内表名称为IT_SDYN_BOOK,声明相应的工作区,类型为sdyn_book
步骤20(从这里开始,拓展作业,上课没讲):
在子屏幕130上,增加三个pushbutton按钮,具体如下:
tablestrip5.jpg
步骤21:前两个按钮为全选和全不选,通过控制每一行的MARK字段来达到
步骤22:实施删除的功能:具体步骤如下:
建立内表 IT_SBOOK_UPD,以及相关的工作区,类型为sbook,
从IT_SBOOK_SDYN里面,将用户选中的行,拷贝到IT_SBOOK_UPD内表中
在IT_SBOOK_UPD中,设置这些数据的flag字段为’X’。
调用BC_GLOBAL_UPDATE_BOOK Function Module,将两个内表都传过去。
执行之后,数据就可以删除了
想想看,为什么不直接从表中删除数据,而要用一个功能模块来做?(数据库中的标准表不允许直接删除,因为标准表的数据通常是相互关联的,需要用对应的function 操作)

一、主程序代码:
  1. REPORT  zlxg_014.
  2. TABLES:sflight,sdyn_conn,spfli,saplane,sdyn_book.
  3. DATA: ok_code TYPE sy-ucomm.
  4. TYPES:BEGIN OF ty_save_key,
  5.        carrid TYPE   sflight-carrid,
  6.        connid TYPE   sflight-connid,
  7.        fldate TYPE   sflight-fldate,
  8.       END OF ty_save_key.
  9. DATA wa_save_key TYPE ty_save_key.
  10. DATA wa_save_key1 TYPE ty_save_key.
  11. CONTROLS: mytab TYPE TABSTRIP.
  12. CONTROLS: mytable TYPE TABLEVIEW USING SCREEN '0130'.
  13. DATA it_sdyn_book TYPE STANDARD TABLE OF sdyn_book.
  14. DATA wa_sdyn_book TYPE sdyn_book.
  15. DATA bookins_changed TYPE c LENGTH 1.

  16. CALL SCREEN 100.

  17. INCLUDE zlxg_014_100_pbo.

  18. INCLUDE zlxg_014_100_pai.

  19. INCLUDE zlxg_014_110_pbo.

  20. INCLUDE zlxg_014_120_pbo.

  21. INCLUDE zlxg_014_130_pbo.

  22. INCLUDE zlxg_014_130_pai.
复制代码
INCLUDE zlxg_014_100_pbo.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_100_PBO .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  STATUS_0100  OUTPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE status_0100 OUTPUT.
  10.   SET PF-STATUS 'STATUS_100'.
  11.   SET TITLEBAR 'TITLE_100'.

  12. ENDMODULE.                 " STATUS_0100  OUTPUT
  13. *&---------------------------------------------------------------------*
  14. *&      Module  CLEAR_OK_CODE  OUTPUT
  15. *&---------------------------------------------------------------------*
  16. *       text
  17. *----------------------------------------------------------------------*
  18. MODULE clear_ok_code OUTPUT.
  19.   CLEAR ok_code.
  20. ENDMODULE.                 " CLEAR_OK_CODE  OUTPUT
复制代码
INCLUDE zlxg_014_100_pai.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_100_PAI .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  USER_COMMAND_0100  INPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE user_command_0100 INPUT.

  10. ENDMODULE.                 " USER_COMMAND_0100  INPUT
  11. *&---------------------------------------------------------------------*
  12. *&      Module  CHECK_SFLIGHT_DATA  INPUT
  13. *&---------------------------------------------------------------------*
  14. *       text
  15. *----------------------------------------------------------------------*
  16. MODULE check_sflight_data INPUT.
  17.   IF sdyn_conn-carrid <> wa_save_key-carrid
  18.     OR sdyn_conn-connid <> wa_save_key-connid
  19.     OR sdyn_conn-fldate <> wa_save_key-fldate.
  20.     MOVE-CORRESPONDING sdyn_conn TO wa_save_key.
  21.     SELECT SINGLE *
  22.       FROM sflight
  23.       INTO sflight
  24.       WHERE carrid = wa_save_key-carrid
  25.         AND connid = wa_save_key-connid
  26.         AND fldate = wa_save_key-fldate.
  27.     MOVE-CORRESPONDING sflight TO sdyn_conn.

  28.   ENDIF.
  29. ENDMODULE.                 " CHECK_SFLIGHT_DATA  INPUT
  30. *&---------------------------------------------------------------------*
  31. *&      Module  EXIT  INPUT
  32. *&---------------------------------------------------------------------*
  33. *       text
  34. *----------------------------------------------------------------------*
  35. MODULE exit INPUT.
  36.   CASE ok_code.
  37.     WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
  38.       LEAVE TO SCREEN 0.
  39.   ENDCASE.
  40. ENDMODULE.                 " EXIT  INPUT
复制代码
INCLUDE zlxg_014_110_pbo.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_110_PBO .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  GET_DATA  OUTPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE get_data OUTPUT.
  10.   SELECT SINGLE *
  11.     FROM spfli
  12.     INTO spfli
  13.     WHERE  carrid = sdyn_conn-carrid AND connid = sdyn_conn-connid.
  14.   MOVE-CORRESPONDING spfli TO sdyn_conn.
  15. ENDMODULE.                 " GET_DATA  OUTPUT
复制代码
INCLUDE zlxg_014_120_pbo.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_120_PBO .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  GET_SAPLANE_DATA  OUTPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE get_saplane_data OUTPUT.
  10.   SELECT SINGLE *
  11.     FROM saplane
  12.     INTO saplane
  13.     WHERE planetype = sdyn_conn-planetype.
  14. ENDMODULE.                 " GET_SAPLANE_DATA  OUTPUT
复制代码
INCLUDE zlxg_014_130_pbo.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_130_PBO .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  GET_SFLIGHT_DATA  OUTPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE get_sflight_data OUTPUT.
  10.   IF   sdyn_conn-carrid NE wa_save_key1-carrid
  11.     OR sdyn_conn-connid NE wa_save_key1-connid
  12.     OR sdyn_conn-fldate NE wa_save_key1-fldate  OR bookins_changed = 'X'.
  13.     MOVE-CORRESPONDING sdyn_conn TO wa_save_key1.

  14.     CLEAR bookins_changed.
  15.     SELECT *
  16.       FROM sbook
  17.       INTO CORRESPONDING FIELDS OF TABLE it_sdyn_book
  18.       WHERE carrid = wa_save_key1-carrid
  19.         AND connid = wa_save_key1-connid
  20.         AND fldate = wa_save_key1-fldate.
  21. *MOVE-CORRESPONDING SFLIGHT TO SDYN_CONN.
  22.     DESCRIBE TABLE it_sdyn_book LINES mytable-lines.
  23.   ENDIF.
  24. ENDMODULE.                 " GET_SFLIGHT_DATA  OUTPUT
  25. *&---------------------------------------------------------------------*
  26. *&      Module  CLEAR_OKCODE  OUTPUT
  27. *&---------------------------------------------------------------------*
  28. *       text
  29. *----------------------------------------------------------------------*
  30. MODULE clear_okcode OUTPUT.
  31.   CLEAR ok_code.
  32. ENDMODULE.                 " CLEAR_OKCODE  OUTPUT
  33. *&---------------------------------------------------------------------*
  34. *&      Module  MOVE_DATA  OUTPUT
  35. *&---------------------------------------------------------------------*
  36. *       text
  37. *----------------------------------------------------------------------*
  38. MODULE move_data OUTPUT.
  39.   MOVE-CORRESPONDING wa_sdyn_book TO sdyn_book.
  40. ENDMODULE.                 " MOVE_DATA  OUTPUT
复制代码
INCLUDE zlxg_014_130_pai.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_014_130_PAI .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  USER_COMMAND_0130  INPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE user_command_0130 INPUT.
  10.   CASE ok_code.
  11.     WHEN 'SELE'.
  12.       LOOP AT it_sdyn_book INTO wa_sdyn_book.
  13.         CHECK wa_sdyn_book-mark = ' '.
  14.         wa_sdyn_book-mark = 'X'.
  15.         MODIFY it_sdyn_book FROM wa_sdyn_book.
  16.       ENDLOOP.
  17.     WHEN 'DSELE'.
  18.       LOOP AT it_sdyn_book INTO wa_sdyn_book.
  19.         CHECK wa_sdyn_book-mark = 'X'.
  20.         wa_sdyn_book-mark = ''.
  21.         MODIFY it_sdyn_book FROM wa_sdyn_book.
  22.       ENDLOOP.
  23.     WHEN 'DELE'.
  24.       DATA it_sbook_upd TYPE STANDARD TABLE OF sbook.
  25.       DATA wa_sbook_upd TYPE sbook.

  26.       READ TABLE it_sdyn_book INTO wa_sdyn_book WITH KEY mark = 'X'
  27.           TRANSPORTING NO FIELDS.
  28.       IF sy-subrc = 0.
  29.         PERFORM cancel_booking.
  30.       ENDIF.


  31.   ENDCASE.
  32. ENDMODULE.                 " USER_COMMAND_0130  INPUT
  33. *&---------------------------------------------------------------------*
  34. *&      Form  CANCEL_BOOKING
  35. *&---------------------------------------------------------------------*
  36. *       text
  37. *----------------------------------------------------------------------*
  38. *  -->  p1        text
  39. *  <--  p2        text
  40. *----------------------------------------------------------------------*
  41. FORM cancel_booking .
  42.   CONSTANTS cancelled VALUE 'X'.

  43. *  SELECT * FROM it_sdyn_book INTO TABLE it_sbook_upd WHERE mark = 'X'.

  44.   LOOP AT it_sdyn_book INTO wa_sdyn_book .
  45.     CHECK wa_sdyn_book-mark = 'X'.
  46.     MOVE-CORRESPONDING wa_sdyn_book TO wa_sbook_upd.
  47.     MOVE cancelled TO wa_sbook_upd-cancelled.
  48.     APPEND wa_sbook_upd TO it_sbook_upd.
  49.   ENDLOOP.

  50.   CALL FUNCTION 'BC_GLOBAL_UPDATE_BOOK'
  51.     TABLES
  52.       booking_tab     = it_sdyn_book
  53.       booking_tab_upd = it_sbook_upd.
  54. *  MESSAGE s009(bc410) WITH ' WRONG '.
  55.   bookins_changed = 'X'.

  56. ENDFORM.                    " CANCEL_BOOKING
  57. *&---------------------------------------------------------------------*
  58. *&      Module  UPD_DATA  INPUT
  59. *&---------------------------------------------------------------------*
  60. *       text
  61. *----------------------------------------------------------------------*
  62. MODULE upd_data INPUT.
  63.   MOVE sdyn_book-mark TO wa_sdyn_book-mark.
  64.   MODIFY it_sdyn_book INDEX mytable-current_line
  65.   FROM wa_sdyn_book TRANSPORTING mark.

  66. ENDMODULE.                 " UPD_DATA  INPUT
复制代码

二、screen 1001.attributes->normal
2.element list 添加ok_code ,painter如下
tablestrip7.jpg
3.flow logic
  1. PROCESS BEFORE OUTPUT.
  2.   MODULE clear_ok_code.
  3.   MODULE status_0100.
  4.   CALL SUBSCREEN sub1 INCLUDING sy-cprog '0110'.
  5.   CALL SUBSCREEN sub2 INCLUDING sy-cprog '0120'.
  6.   CALL SUBSCREEN sub3 INCLUDING sy-cprog '0130'.


  7. PROCESS AFTER INPUT.
  8.   MODULE exit AT EXIT-COMMAND.
  9.   CALL SUBSCREEN sub1.
  10.   CALL SUBSCREEN sub2.
  11.   CALL SUBSCREEN sub3.
  12. * MODULE USER_COMMAND_0100.
  13.   CHAIN.
  14.     FIELD: sdyn_conn-carrid,sdyn_conn-connid,sdyn_conn-fldate.
  15.     MODULE check_sflight_data ON CHAIN-REQUEST.
  16.   ENDCHAIN.
复制代码

三、screen 1101.attributes->subscreen
2.flow logic
  1. PROCESS BEFORE OUTPUT.
  2. * MODULE STATUS_0110.
  3.   MODULE get_data.

  4. PROCESS AFTER INPUT.
  5. * MODULE USER_COMMAND_0110.
复制代码

四、screen 120
1.attributes->subscreen
2.flow logic
  1. PROCESS BEFORE OUTPUT.
  2. * MODULE STATUS_0120.
  3.   MODULE get_saplane_data.

  4. PROCESS AFTER INPUT.
  5. * MODULE USER_COMMAND_0120.
复制代码

五、screen 130
1.attributes->subscreen
2.flow logic
  1. PROCESS BEFORE OUTPUT.
  2. * MODULE STATUS_0130.
  3.   MODULE clear_okcode.
  4.   MODULE get_sflight_data.
  5.   LOOP AT it_sdyn_book INTO wa_sdyn_book WITH CONTROL mytable.
  6.     MODULE move_data.
  7.   ENDLOOP.

  8. PROCESS AFTER INPUT.
  9.   LOOP AT it_sdyn_book .
  10.     FIELD sdyn_book-mark
  11.     MODULE upd_data ON REQUEST.
  12.   ENDLOOP.
  13.   MODULE user_command_0130.
复制代码
换三个button  全选 反选 删除  注意:MARK标记
tablestrip9.jpg






回复

使用道具 举报

快速回帖

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

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