• SAP 动态选择屏幕实例


    DATA:BEGIN OF gs_sel,
           werks TYPE marc-werks, "工厂
           matnr TYPE mara-matnr, "物料
           mtart TYPE mara-mtart, "物料类型
           beskz TYPE marc-beskz, "采购类型
           ersda TYPE mara-ersda, "创建时间
         END OF gs_sel.
    
    
    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
    PARAMETERS:p_but1  RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND cm1,
               p_but2  RADIOBUTTON GROUP g1,
               p_chek1 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK blk1.
    
    SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002.
    SELECT-OPTIONS:
        s_werks FOR gs_sel-werks MODIF ID ty1 OBLIGATORY DEFAULT gco_9020,"工厂
        s_matnr FOR gs_sel-matnr MODIF ID ty1,"物料
        s_mtart FOR gs_sel-mtart MODIF ID ty2, "物料类型
        s_beskz FOR gs_sel-beskz MODIF ID ty2, "采购类型
        s_ersda FOR gs_sel-ersda MODIF ID ty2. "创建时间
    SELECTION-SCREEN END OF BLOCK blk2.
    
    AT SELECTION-SCREEN OUTPUT.
      IF p_but2 IS NOT INITIAL.
        PERFORM frm_get_date.
      ENDIF.
    
      LOOP AT SCREEN.
        CASE screen-group1.
          WHEN 'TY1'.
            IF screen-name = 'S_MATNR-LOW'.
              IF p_but1 IS NOT INITIAL.
                screen-required = '2'.
              ENDIF.
            ENDIF.
    
          WHEN 'TY2'.
            IF p_but2 IS INITIAL.
              screen-active = '0'.
            ELSE.
              screen-active = '1'.
              IF screen-name = 'S_ERSDA-LOW'.
                screen-required = '2'.
              ENDIF.
            ENDIF.
        ENDCASE.
        MODIFY SCREEN.
      ENDLOOP.
    
    AT SELECTION-SCREEN ON s_ersda.
      IF p_but2 IS NOT INITIAL AND
        sy-ucomm <> 'CM1' AND s_ersda IS INITIAL.
        MESSAGE e001(00) WITH TEXT-003.
      ENDIF.
    
    AT SELECTION-SCREEN ON s_matnr.
      IF p_but1 IS NOT INITIAL AND
         sy-ucomm <> 'CM1' AND s_matnr IS INITIAL.
        MESSAGE e001(00) WITH TEXT-003.
      ENDIF.
    
    
    *&---------------------------------------------------------------------*
    *&                FRM_GET_DATE
    *&---------------------------------------------------------------------*
    FORM frm_get_date.
    *  REFRESH:s_ersda.
      DELETE  s_ersda[]  WHERE  sign  EQ  space .
      s_ersda-high = sy-datum.
      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
        EXPORTING
          date      = s_ersda-high
          days      = '00'
          months    = 1
          signum    = '-'
          years     = '00'
        IMPORTING
          calc_date = s_ersda-low.
      APPEND s_ersda.
    
    ENDFORM.

     

  • 相关阅读:
    hdu1240 bfs 水题
    hdu 2102 BFS
    gym 101081E Polish Fortress 几何
    Gym 101081K Pope's work dp
    hdu 6188 贪心
    hdu 6186 水
    Codeforces Round #430 (Div. 2) A B 水 C dfs,思维 D trie,二进制
    hdu6152 拉姆齐定理
    hdu6165 缩点,dfs
    hdu6153 扩展KMP
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13069255.html
Copyright © 2020-2023  润新知