• 动态ALV表实例-移动类型汇总


    TABLES:MSEG,MAKT.
    "定义结构
    TYPES:BEGIN OF TY_DATA,
            MJAHR      LIKE MSEG-MJAHR, "物料凭证的年份
            MBLNR      LIKE MSEG-MBLNR, "物料凭证
            BWART      LIKE MSEG-BWART, "移动类型
            XAUTO      LIKE MSEG-XAUTO, "是否自动创建
            MATNR      LIKE MSEG-MATNR, "物料编码
            MAKTX      LIKE MAKT-MAKTX, "物料描述
            WERKS      LIKE MSEG-WERKS, "工厂
            LGORT      LIKE MSEG-LGORT, "库位
            CHARG      LIKE MSEG-CHARG, "批次
            MENGE      LIKE MSEG-MENGE, "基本单位数量
            MEINS      LIKE MSEG-MEINS, "基本单位
            ERFMG      LIKE MSEG-ERFMG, "录入数量
            ERFME      LIKE MSEG-ERFME, "录入单位
            BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期
            CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期
            CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间
            USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名
          END OF TY_DATA.
    TYPES:BEGIN OF TY_DATA1,
    *        MJAHR      LIKE MSEG-MJAHR, "物料凭证的年份
    *        MBLNR      LIKE MSEG-MBLNR, "物料凭证
            WERKS LIKE MSEG-WERKS, "工厂
            LGORT LIKE MSEG-LGORT, "库位
            MATNR LIKE MSEG-MATNR, "物料编码
            MAKTX LIKE MAKT-MAKTX, "物料描述
            BWART LIKE MSEG-BWART, "移动类型
    *        XAUTO      LIKE MSEG-XAUTO, "是否自动创建
    *        CHARG      LIKE MSEG-CHARG, "批次
            MENGE LIKE MSEG-MENGE, "基本单位数量
            MEINS LIKE MSEG-MEINS, "基本单位
    *        ERFMG      LIKE MSEG-ERFMG, "录入数量
    *        ERFME      LIKE MSEG-ERFME, "录入单位
    *        BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期
    *        CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期
    *        CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间
    *        USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名
          END OF TY_DATA1.
    TYPES:BEGIN OF TY_DATA2,
    *        MJAHR      LIKE MSEG-MJAHR, "物料凭证的年份
    *        MBLNR      LIKE MSEG-MBLNR, "物料凭证
    *        WERKS      LIKE MSEG-WERKS, "工厂
    *        LGORT      LIKE MSEG-LGORT, "库位
    *        MATNR      LIKE MSEG-MATNR, "物料编码
    *        MAKTX      LIKE MAKT-MAKTX, "物料描述
            BWART LIKE MSEG-BWART, "移动类型
    *        XAUTO      LIKE MSEG-XAUTO, "是否自动创建
    *        CHARG      LIKE MSEG-CHARG, "批次
    *        MENGE      LIKE MSEG-MENGE, "基本单位数量
    *        MEINS      LIKE MSEG-MEINS, "基本单位
    *        ERFMG      LIKE MSEG-ERFMG, "录入数量
    *        ERFME      LIKE MSEG-ERFME, "录入单位
    *        BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期
    *        CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期
    *        CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间
    *        USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名
          END OF TY_DATA2.
    DATA:IT_DATA TYPE STANDARD TABLE OF TY_DATA,
         WA_DATA TYPE TY_DATA.
    DATA:IT_DATA1 TYPE STANDARD TABLE OF TY_DATA1,
         WA_DATA1 TYPE TY_DATA1.
    DATA:IT_DATA2 TYPE STANDARD TABLE OF TY_DATA2,
         WA_DATA2 TYPE TY_DATA2.
    DATA:N TYPE I.
    DATA: IT_TABLE     TYPE REF TO DATA,
          IT_STRUCTURE TYPE LVC_T_FCAT,
          WA_STRUCTURE TYPE LVC_S_FCAT.
    DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
          IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          WA_LAYOUT   TYPE LVC_S_LAYO.
    DATA: G_TITLE    TYPE LVC_TITLE.
    "FIELD SYMBOLS
    FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
                   <DYN_WA>,
                   <DYN_FIELD>.
    "定义屏幕
    SELECTION-SCREEN BEGIN OF BLOCK BLK01.
    SELECT-OPTIONS:S_WERKS FOR MSEG-WERKS,"工厂
                   S_LGORT FOR MSEG-LGORT,"库位
                   S_MATNR FOR MSEG-MATNR,"物料
                   S_BUDAT FOR MSEG-BUDAT_MKPF,"过账日期
                   S_CPUDT FOR MSEG-CPUDT_MKPF,"输入日期
                   S_BWART FOR MSEG-BWART,"移动类型
                   S_USNAM FOR MSEG-USNAM_MKPF."username
    SELECTION-SCREEN END OF BLOCK BLK01.
    "主程序
    
    START-OF-SELECTION.
      PERFORM GET_DATA."取数
      PERFORM CREAT_STRUCTURE."创建内表结构
      PERFORM CREAT_TABLE."按照结构定义内表
      PERFORM DATA_TO_TABLE."写数据进内表
      PERFORM FRM_INIT_LAYOUT.
      PERFORM FRM_SHOW_ALV."内表数据展示
    FORM GET_DATA.
      SELECT
      MSEG~MJAHR,
      MSEG~MBLNR,
      MSEG~BWART,
      MSEG~XAUTO,
      MSEG~MATNR,
      MAKT~MAKTX,
      MSEG~WERKS,
      MSEG~LGORT,
      MSEG~CHARG,
      CASE  MSEG~SHKZG
       WHEN 'H' THEN ( 0 - MSEG~MENGE )
      ELSE MSEG~MENGE
        END AS MENGE,
      MSEG~MEINS,
      CASE  MSEG~SHKZG
       WHEN 'H' THEN ( 0 - MSEG~ERFMG )
      ELSE MSEG~ERFMG
        END AS ERFMG,
      MSEG~ERFME,
      MSEG~BUDAT_MKPF,
      MSEG~CPUDT_MKPF,
      MSEG~CPUTM_MKPF,
      MSEG~USNAM_MKPF
      FROM MSEG
      LEFT JOIN MAKT ON MAKT~MATNR = MSEG~MATNR
      INTO CORRESPONDING FIELDS OF TABLE @IT_DATA
      WHERE MSEG~WERKS IN @S_WERKS
            AND MSEG~LGORT IN @S_LGORT
            AND MSEG~MATNR IN @S_MATNR
            AND MSEG~BUDAT_MKPF IN @S_BUDAT
            AND MSEG~BWART IN @S_BWART
            AND MSEG~USNAM_MKPF IN @S_USNAM
            AND MSEG~CPUDT_MKPF IN @S_CPUDT.
      LOOP AT IT_DATA INTO WA_DATA.
        MOVE-CORRESPONDING WA_DATA TO WA_DATA1.
        COLLECT WA_DATA1 INTO IT_DATA1.
        CLEAR:WA_DATA,WA_DATA1.
      ENDLOOP.
    
    
    ENDFORM.
    FORM CREAT_STRUCTURE.
      DATA: L_LINES TYPE I.
      LOOP AT IT_DATA1 INTO WA_DATA1.
        MOVE-CORRESPONDING WA_DATA1 TO WA_DATA2.
        APPEND WA_DATA2 TO IT_DATA2.
      ENDLOOP.
    
      SORT IT_DATA2 BY BWART.
      DELETE ADJACENT DUPLICATES FROM IT_DATA2 COMPARING BWART.
      DESCRIBE TABLE IT_DATA2 LINES N.
      L_LINES = 5.
    
    
    * 创建静态结构部分
      PERFORM FRM_ALV_FCAT_SET USING:
        1   'WERKS' TEXT-007 'WERKS'  'MSEG'  SPACE   SPACE,
        2   'LGORT' TEXT-008 'LGORT'  'MSEG'  SPACE   SPACE,
        3   'MATNR' TEXT-008 'MATNR'  'MAKT'  SPACE   SPACE,
        4   'MAKTX' TEXT-008 'MAKTX'  'MAKT'  SPACE   SPACE.
    *    5   'BUDAT_MKPF' TEXT-008 'BUDAT_MKPF'  'MSEG'  SPACE   SPACE,
    *    6   'CPUDT_MKPF' TEXT-008 'CPUDT_MKPF'  'MSEG'  SPACE   SPACE.
    
      LOOP AT IT_DATA2 INTO WA_DATA2.
    *    DO N TIMES.
        CLEAR WA_STRUCTURE.
    *字段名称
        WA_STRUCTURE-FIELDNAME = WA_DATA2-BWART.
    *列名称
    *    CONCATENATE '移动类型' WA_DATA2-BWART INTO WA_STRUCTURE-SCRTEXT_L.
        WA_STRUCTURE-SCRTEXT_L = WA_DATA2-BWART.
        WA_STRUCTURE-SCRTEXT_M = WA_STRUCTURE-SCRTEXT_L.
        WA_STRUCTURE-SCRTEXT_S = WA_STRUCTURE-SCRTEXT_L.
        WA_STRUCTURE-COLTEXT   = WA_STRUCTURE-SCRTEXT_L.
        WA_STRUCTURE-NO_ZERO   = 'X'.
        WA_STRUCTURE-DO_SUM    = 'X'.
    
        WA_STRUCTURE-REF_FIELD = 'MENGE'.
        WA_STRUCTURE-REF_TABLE = 'EKPO'.
    
        WA_STRUCTURE-COL_POS    = L_LINES.
        APPEND WA_STRUCTURE TO IT_STRUCTURE.
    
        L_LINES = L_LINES + 1.
      ENDLOOP.
      WA_STRUCTURE-FIELDNAME = 'SUM'.
      WA_STRUCTURE-SCRTEXT_L = '行总计'.
      WA_STRUCTURE-SCRTEXT_M = WA_STRUCTURE-SCRTEXT_L.
      WA_STRUCTURE-SCRTEXT_S = WA_STRUCTURE-SCRTEXT_L.
      WA_STRUCTURE-COLTEXT   = WA_STRUCTURE-SCRTEXT_L.
      WA_STRUCTURE-NO_ZERO   = 'X'.
      WA_STRUCTURE-DO_SUM    = 'X'.
    *  WA_STRUCTURE-REF_FIELD = 'MENGE'.
    *  WA_STRUCTURE-REF_TABLE = 'EKPO'.
      WA_STRUCTURE-COL_POS   = L_LINES.
      APPEND WA_STRUCTURE TO IT_STRUCTURE.
    
    ENDFORM.
    FORM CREAT_TABLE.
      CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
        EXPORTING
          IT_FIELDCATALOG = IT_STRUCTURE
        IMPORTING
          EP_TABLE        = IT_TABLE.
    
      ASSIGN IT_TABLE->* TO <DYN_TABLE>.
    ENDFORM.
    FORM DATA_TO_TABLE.
      DATA:WA_NEW_LINE TYPE REF TO DATA.
      CREATE DATA WA_NEW_LINE LIKE LINE OF <DYN_TABLE>.
      ASSIGN WA_NEW_LINE->* TO <DYN_WA>.
    
      DATA: L_SUM(7) TYPE P DECIMALS 3.
    
      DATA:L_FIELDNAME TYPE LVC_S_FCAT-FIELDNAME.
      DATA:LW_ERFMG TYPE TY_DATA1.
      SORT IT_DATA1 BY WERKS LGORT MATNR.
      LOOP AT IT_DATA1 INTO WA_DATA1.
        CLEAR:L_FIELDNAME.
        L_FIELDNAME = WA_DATA1-BWART.
        ASSIGN COMPONENT L_FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
        IF WA_DATA1-MENGE IS NOT INITIAL.
          <DYN_FIELD> = WA_DATA1-MENGE.
          L_SUM = L_SUM + WA_DATA1-MENGE.
        ENDIF.
        LW_ERFMG = WA_DATA1.
        AT END OF MATNR.
          ASSIGN COMPONENT 'WERKS' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
          <DYN_FIELD> = LW_ERFMG-WERKS.
          ASSIGN COMPONENT 'LGORT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
          <DYN_FIELD> = LW_ERFMG-LGORT.
          ASSIGN COMPONENT 'MATNR' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
          <DYN_FIELD> = LW_ERFMG-MATNR.
          ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
          <DYN_FIELD> = LW_ERFMG-MAKTX.
    *      ASSIGN COMPONENT 'BUDAT_MKPF' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
    *      <DYN_FIELD> = LW_ERFMG-BUDAT_MKPF.
    *      ASSIGN COMPONENT 'CPUDT_MKPF' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
    *      <DYN_FIELD> = LW_ERFMG-CPUDT_MKPF.
          ASSIGN COMPONENT 'SUM' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
          <DYN_FIELD> = L_SUM.
          APPEND <DYN_WA> TO <DYN_TABLE>.
          CLEAR: L_SUM, <DYN_WA>.
        ENDAT.
    
        CLEAR: LW_ERFMG, WA_DATA1.
    
    
    
      ENDLOOP.
    
    
    *  DELETE <DYN_TABLE> WHERE MATNR IS INITIAL.
    
    
    ENDFORM.
    *设置layout属性
    FORM FRM_INIT_LAYOUT .
      G_TITLE = TEXT-006.
    
      CLEAR WA_LAYOUT.
      WA_LAYOUT-CWIDTH_OPT = 'X'.
    ENDFORM.                    " FRM_INIT_LAYOUT
    FORM FRM_SHOW_ALV.
    *  * ALV显示函数
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          I_CALLBACK_PROGRAM = SY-REPID
          IS_LAYOUT_LVC      = WA_LAYOUT
          IT_FIELDCAT_LVC    = IT_STRUCTURE
          I_GRID_TITLE       = G_TITLE
    *     i_callback_pf_status_set = 'PF_STATUS_SET'
    *     IT_EXCLUDING       =       "系统自带STATUS图标控制内表
          I_SAVE             = 'A'
    *     i_callback_pf_status_set = 'PF_STATUS_SET'
    *     i_callback_user_command  = 'FRM_USER_COMMAND'
        TABLES
          T_OUTTAB           = <DYN_TABLE>
        EXCEPTIONS
          PROGRAM_ERROR      = 1
          OTHERS             = 2.
      IF SY-SUBRC <> 0.
    *    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    
    
    
    
    ENDFORM.
    FORM FRM_ALV_FCAT_SET USING PU_POS    TYPE I
                                PU_FNAME  TYPE C
                                PU_FTEXT  TYPE C
                                PU_RFIELD TYPE C
                                PU_RTABLE TYPE C
                                PU_QNAME  TYPE C
                                PU_EDIT   TYPE C.
      CLEAR WA_STRUCTURE.
      WA_STRUCTURE-COL_POS    = PU_POS.
      WA_STRUCTURE-FIELDNAME  = PU_FNAME.
      WA_STRUCTURE-SCRTEXT_L  = PU_FTEXT.
      WA_STRUCTURE-SCRTEXT_M  = PU_FTEXT.
      WA_STRUCTURE-SCRTEXT_S  = PU_FTEXT.
      WA_STRUCTURE-REF_FIELD  = PU_RFIELD.
      WA_STRUCTURE-REF_TABLE  = PU_RTABLE.
      WA_STRUCTURE-QFIELDNAME = PU_QNAME.
      WA_STRUCTURE-EDIT       = PU_EDIT.
      WA_STRUCTURE-KEY = 'X'.
      APPEND WA_STRUCTURE TO IT_STRUCTURE.
    ENDFORM.                    " FRM_ALV_FCAT_S
  • 相关阅读:
    YYC松鼠视频pro版安装实操001
    YYC松鼠视频短信对接教程
    此处指讲解自定义的一些目录结构及组件-yyc松鼠短视频系统
    APP启动无视频数据-YYC松鼠短视频系统
    后台提示登录失败----YYC松鼠短视频开源
    C++静态成员变量和静态成员函数
    内联函数和宏定义的区别
    C++中的接口继承和实现继承
    拷贝构造函数(define)
    类的封装
  • 原文地址:https://www.cnblogs.com/BruceKing/p/11171201.html
Copyright © 2020-2023  润新知