zoukankan      html  css  js  c++  java
  • ABAP报表返回选择屏幕时回到上次的页签

    如下,报表选择屏幕有三个页签:

    *----------------------------------------------------------------------*                                         
    CONSTANTS: gc_push1(5) TYPE C VALUE 'PUSH1',
               gc_push2(5) TYPE C VALUE 'PUSH2',
               gc_push3(5) TYPE C VALUE 'PUSH3'.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
    SELECTION-SCREEN BEGIN OF BLOCK B11 WITH FRAME TITLE T011.
       SELECT-OPTIONS : s_werks FOR vbap-werks,                            
                        s_matkl FOR t023t-matkl.
    SELECTION-SCREEN END OF BLOCK B11.
    SELECTION-SCREEN END OF SCREEN 100.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
    SELECTION-SCREEN BEGIN OF BLOCK B21 WITH FRAME TITLE T021.
       SELECT-OPTIONS : s_werks2 FOR vbap-werks,                           
                        s_lgort2 FOR vbap-lgort,
                        s_matkl2 FOR t023t-matkl.
    SELECTION-SCREEN END OF BLOCK B21.
    SELECTION-SCREEN END OF SCREEN 200.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
      SELECTION-SCREEN BEGIN OF BLOCK b31 WITH FRAME TITLE T031.
        SELECT-OPTIONS: s_werks3 FOR vbap-werks,
                        s_matnr3 FOR mara-matnr,
                        s_lgort3 FOR vbap-lgort.
      SELECTION-SCREEN END OF BLOCK B31.
    SELECTION-SCREEN END OF SCREEN 300.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    SELECTION-SCREEN: BEGIN OF TABBED BLOCK blk1 for 16 LINES,
                      TAB (20) gct_1 USER-COMMAND push1 DEFAULT SCREEN 100,
                      TAB (20) gct_2 USER-COMMAND push2 DEFAULT SCREEN 200,
                      TAB (20) gct_3 USER-COMMAND push3 DEFAULT SCREEN 300,
                      END OF BLOCK blk1.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    INITIALIZATION.
      PERFORM fm_init.
    
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    AT SELECTION-SCREEN OUTPUT.
      PERFORM fm_set_screen.
    
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    AT SELECTION-SCREEN.
      PERFORM fm_authority_check.
      PERFORM fm_screen_check.
      PERFORM fm_process_screen.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    START-OF-SELECTION.
      PERFORM fm_alv.
    
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    END-OF-SELECTION.
    
    *----------------------------------------------------------------------*

    首先,在FORM fm_init中取内存中上次用到的页签,如果是第一次,则默认设置为subscreen:100

    *----------------------------------------------------------------------*
    FORM fm_init.
      T011 = '检索参数'.
      T021 = '检索参数'.
      T031 = '检索参数'.
      gct_1 = '按单***'.
      gct_2 = '按单***'.
      gct_3 = '按库***'.
    
    *  获取上次用的子屏幕
      IMPORT gv_dynnr TO gv_dynnr FROM MEMORY ID 'ZSDD_025'.
      blk1-prog = sy-repid.
      IF gv_dynnr = space.
        blk1-dynnr = 100.
        gv_push = gc_push1.
        blk1-activetab = gc_push1.
      ELSE.
        blk1-dynnr = gv_dynnr.
        IF gv_dynnr = 300.
          gv_push = gc_push3.
          blk1-activetab = gc_push3.
        ENDIF.
        IF gv_dynnr = 200 .
          gv_push = gc_push2.
          blk1-activetab = gc_push2.
        ENDIF.
        IF gv_dynnr = 100 .
          gv_push = gc_push1.
          blk1-activetab = gc_push1.
        ENDIF.
      ENDIF.
    ENDFORM.
    *----------------------------------------------------------------------*

    然后在FORM fm_screen_checkF8(ONLI)执行的时候,将当前页签编号写入内存:

    *----------------------------------------------------------------------*
    FORM fm_screen_check.
      IF sscrfields-ucomm = gc_push1 OR sscrfields-ucomm = gc_push2 OR sscrfields-ucomm = gc_push3.
        gv_push = sscrfields-ucomm.
      ENDIF.
    
    *  CHECK sy-fleng = 18.
    
    * F8的时候将页签编号存到内存
      IF sscrfields-ucomm = 'ONLI'.
    *   按单***
        IF gv_push = gc_push1 OR gv_push = space.
          gv_dynnr = 100.
          gv_push = gc_push1.
          EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'.
        ENDIF.
    
    *   按单***
        IF gv_push = gc_push2.
          gv_dynnr = 200.
          gv_push = gc_push2.
          EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'.
        ENDIF.
    
    *    按库***
        IF gv_push = gc_push3.
          gv_dynnr = 300.
          gv_push = gc_push3.
          EXPORT gv_dynnr FROM gv_dynnr TO MEMORY ID 'ZSDD_025'.
        ENDIF.
      ENDIF.
    
    ENDFORM.
    *----------------------------------------------------------------------*

    完成.

  • 相关阅读:
    MP3文件格式解析
    各种流媒体服务器的架设(一)
    fread函数和fwrite函数
    [转]C#算法 一对小兔子一年后长成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。假定第一年年初投放了一对小兔子,试编程计算,第n年末总共会有多少对兔子
    C#算法 质因数 最大公约数与最小公倍数
    数据库删除语句 Drop/Delete/Truncate比较
    [转]C# 截取指定长度的中英文混合字符串的算法
    C#算法 母牛从第4年起每年生一头小母牛,并且母牛不会死
    C#算法 有一个母羊,第2年和第4年可以生一头小母羊,在第5年死去,小母羊在它出生的第2年和第4年生小母羊,第5年死去
    C#算法 最值/平均
  • 原文地址:https://www.cnblogs.com/ybinlog/p/11345847.html
Copyright © 2011-2022 走看看