动态移动类型列显示物料移动

REPORT Z_BARRY_TEST_FIELDSYMOLS .
TYPE-POOLS SLIS .

TABLES MSEG ,
        MKPF .

DATA GD_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV .
DATA SLA          TYPE SLIS_LAYOUT_ALV ,
      IVARIANT     LIKE DISVARIANT ,
      I_REPID      LIKE SY -REPID ,
      I_EXCLUDING  TYPE SLIS_T_EXTAB .

TYPES BEGIN  OF TY_SUM  ,
         WERKS  LIKE MSEG -WERKS ,
         MATNR  LIKE MSEG -MATNR ,
         LGORT  LIKE MSEG -LGORT ,
         BWART  LIKE MSEG -BWART ,
         MENGE  LIKE MSEG -MENGE ,
        END  OF TY_SUM .

DATA  ITAB  TYPE  STANDARD  TABLE  OF TY_SUM  WITH  HEADER  LINE  .
DATA  HS_SUM  TYPE  HASHED  TABLE  OF TY_SUM  WITH  UNIQUE  KEY WERKS MATNR LGORT BWART  WITH  HEADER  LINE  .
DATA  ITAB_SUM  TYPE  STANDARD  TABLE  OF TY_SUM  WITH  HEADER  LINE  .

TYPES BEGIN  OF TY_BWART  ,
         BWART  LIKE MSEG -BWART ,
        END  OF TY_BWART .

DATA  HS_BWART  TYPE  HASHED  TABLE  OF TY_BWART  WITH  UNIQUE  KEY BWART  WITH  HEADER  LINE  .
DATA  ITAB_BWART  TYPE  STANDARD  TABLE  OF TY_BWART  WITH  HEADER  LINE  .

FIELD-SYMBOLS   ,
                    TYPE  STANDARD  TABLE ,
                 .

DATA MAX_COUNT  TYPE  I ,
      DY_OUT     TYPE  REF  TO  DATA ,
      DY_OUT_WA  TYPE  REF  TO  DATA ,
      XFC        TYPE LVC_S_FCAT ,
      IFC        TYPE LVC_T_FCAT .
DATA C ( 2 )     TYPE N ,
      TXT ( 20 TYPE  C .

SELECT-OPTIONS :
S_MATNR  FOR MSEG -MATNR ,
S_MBLNR  FOR MSEG -MBLNR ,
S_BUDAT  FOR MKPF -BUDAT .
PARAMETERS :     P_SUM  AS  CHECKBOX  .

START-OF-SELECTION .
   PERFORM GETDATA .
   PERFORM FIXDATA .
   IF P_SUM  'X' .
     PERFORM OUTDATA .
   ELSE .
     PERFORM OUTDATA2 .
   ENDIF .
*&---------------------------------------------------------------------*
*&      Form GETDATA
*&---------------------------------------------------------------------*
FORM GETDATA .
   SELECT
    WERKS
    MATNR
    LGORT
    BWART
    MENGE
     INTO  TABLE ITAB
   FROM MKPF
    INNER  JOIN MSEG  ON MKPF ~MBLNR  MSEG ~MBLNR
                    AND MKPF ~MJAHR  MSEG ~MJAHR
   WHERE MKPF ~MBLNR  IN S_MBLNR
     AND MKPF ~BUDAT  IN S_BUDAT
     AND MSEG ~MATNR  IN S_MATNR .
ENDFORM .                     " GETDATA
*&---------------------------------------------------------------------*
*&      Form FIXDATA
*&---------------------------------------------------------------------*
FORM FIXDATA .

   DATA INDEX  LIKE SY -TABIX  .

   LOOP  AT ITAB .
    HS_SUM  ITAB . "汇总成唯一值
     COLLECT HS_SUM .

    HS_BWART  ITAB -BWART  . "所有的唯一移动类型
     COLLECT HS_BWART .
   ENDLOOP .

   SORT HS_BWART .

  ITAB_BWART[]  HS_BWART[] . "赋值给标准表

  ITAB_SUM[]  HS_SUM[] . "赋值给标准表

   PERFORM CREAT_ITAB_OUT . "动态列的构造

   LOOP  AT ITAB_SUM .
     ASSIGN  COMPONENT  'WERKS'  OF  STRUCTURE   TO  .
      ITAB_SUM -WERKS .

     ASSIGN  COMPONENT  'MATNR'  OF  STRUCTURE   TO  .
      ITAB_SUM -MATNR .

     ASSIGN  COMPONENT  'LGORT'  OF  STRUCTURE   TO  .
      ITAB_SUM -LGORT .

     READ  TABLE ITAB_BWART  WITH  KEY BWART  ITAB_SUM -BWART  .
     INDEX  SY -TABIX +  3 . "查找到的位置加3就是当前写入的位置

     ASSIGN  COMPONENT  INDEX  OF  STRUCTURE   TO  .
      ITAB_SUM -MENGE .

     ASSIGN  COMPONENT  'LINE_SUM'  OF  STRUCTURE   TO  .
      ITAB_SUM -MENGE .

     COLLECT   INTO   .
     CLEAR  .
   ENDLOOP .

ENDFORM .                     " FIXDATA
*&---------------------------------------------------------------------*
*&      Form outdata
*&---------------------------------------------------------------------*
FORM OUTDATA .
   PERFORM FIELDCAT_INIT  .
  SLA -COLWIDTH_OPTIMIZE  'X' .
  SLA -ZEBRA              'X' .
  I_REPID  SY -REPID .
   CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
      I_CALLBACK_PROGRAM  I_REPID
      IT_FIELDCAT         GD_FIELDCAT[]
      I_SAVE              'A'
      IS_VARIANT          IVARIANT
      IS_LAYOUT           SLA
      IT_EXCLUDING        I_EXCLUDING
*     i_callback_user_command = 'USER_COMMAND'
     TABLES
      T_OUTTAB            ITAB_SUM
     EXCEPTIONS
      PROGRAM_ERROR       1
       OTHERS              2 .
ENDFORM .                     " outdata
*---------------------------------------------------------------------*
*       FORM fieldcat_init                                            *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT  .
   PERFORM FRM_CATLG_SET  USING :
         'WERKS'      'WERKS'  'X'  ,
         'MATNR'      'MATNR'  'X'  ,
         'LGORT'      'LGORT'  'X'  ,
         'BWART'      'BWART'  ''  ,
         'MENGE'      'MENGE'  ''  .
ENDFORM .                     "fieldcat_init
*---------------------------------------------------------------------*
*       FORM frm_catlg_set                                            *
*---------------------------------------------------------------------*
FORM FRM_CATLG_SET  USING
                          P_FIELD
                          P_TEXT
                          P_KEY .
   DATA LS_FIELDCAT  TYPE SLIS_FIELDCAT_ALV .
  LS_FIELDCAT -FIELDNAME      P_FIELD .
  LS_FIELDCAT -SELTEXT_L      P_TEXT .
  LS_FIELDCAT - KEY            P_KEY .
   IF P_FIELD  'LINE_SUM' .
    LS_FIELDCAT -EMPHASIZE  'C700' .
   ENDIF .
   APPEND LS_FIELDCAT  TO GD_FIELDCAT  .
   CLEAR LS_FIELDCAT  .
ENDFORM .                     "frm_catlg_set
*&--------------------------------------------------------------------*
*&      Form user_command
*&--------------------------------------------------------------------*
*FORM user_command USING r_ucomm LIKE sy-ucomm
*                    rs_selfield TYPE slis_selfield.
* READ TABLE itab INDEX rs_selfield-tabindex.
* CASE r_ucomm.
*    WHEN '&IC1'. "双击
*
*    WHEN 'EXIT'.
*      LEAVE PROGRAM.
* ENDCASE.
** rs_selfield-refresh = 'X'. "自动刷新
*ENDFORM. "user_com
*---------------------------------------------------------------------*
*       FORM outdata2                                                 *
*---------------------------------------------------------------------*
FORM OUTDATA2 .
   PERFORM FIELDCAT_INIT2  .
  SLA -COLWIDTH_OPTIMIZE  'X' .
  SLA -ZEBRA              'X' .
  I_REPID  SY -REPID .
   CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
      I_CALLBACK_PROGRAM  I_REPID
      IT_FIELDCAT         GD_FIELDCAT[]
      I_SAVE              'A'
      IS_VARIANT          IVARIANT
      IS_LAYOUT           SLA
      IT_EXCLUDING        I_EXCLUDING
     TABLES
      T_OUTTAB           
     EXCEPTIONS
      PROGRAM_ERROR       1
       OTHERS              2 .
ENDFORM .                     " outdata
*---------------------------------------------------------------------*
*       FORM fieldcat_init2                                           *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT2  .
   CLEAR  .
   PERFORM FRM_CATLG_SET  USING :
         'WERKS'    'WERKS'  'X'  ,
         'MATNR'    'MATNR'  'X'  ,
         'LGORT'    'LGORT'  'X'  .
   LOOP  AT HS_BWART  .
     1 .
     CONCATENATE  'MENGE'  INTO TXT .
     PERFORM FRM_CATLG_SET  USING TXT HS_BWART -BWART  ''  .
   ENDLOOP .
   PERFORM FRM_CATLG_SET  USING 'LINE_SUM'  'SUM'  ''  .
ENDFORM .                     "fieldcat_init
*---------------------------------------------------------------------*
*       FORM creat_itab_out                                           *
*---------------------------------------------------------------------*
FORM CREAT_ITAB_OUT .
   CLEAR  C . "C是字符数字型累加的

   "前面三列是固定的
   PERFORM BUILD_ITAB_STRU  USING :
         'WERKS'  'MSEG'  'WERKS'  ,
         'MATNR'  'MSEG'  'MATNR'  ,
         'LGORT'  'MSEG'  'LGORT'  .

   "动态列
   LOOP  AT HS_BWART .
     1 .
     CONCATENATE  'MENGE'  INTO TXT .
     PERFORM BUILD_ITAB_STRU  USING TXT  'MSEG'  'MENGE'  .
   ENDLOOP .

   "汇总数
   PERFORM BUILD_ITAB_STRU  USING 'LINE_SUM'  'MSEG'  'MENGE'  .

   CALL  METHOD CL_ALV_TABLE_CREATE =>CREATE_DYNAMIC_TABLE
     EXPORTING
      IT_FIELDCATALOG  IFC
     IMPORTING
      EP_TABLE         DY_OUT .
   ASSIGN DY_OUT ->TO  .
   CREATE  DATA DY_OUT_WA  LIKE  LINE  OF  .
   ASSIGN DY_OUT_WA ->TO  .
ENDFORM .
*---------------------------------------------------------------------*
*       FORM build_itab_stru                                          *
*---------------------------------------------------------------------*
FORM BUILD_ITAB_STRU  USING FDNAME REF_T REF_F .
  XFC -FIELDNAME  FDNAME  .
  XFC -REF_TABLE  REF_T .
  XFC -REF_FIELD  REF_F .
   APPEND XFC  TO IFC .

ENDFORM.

动态移动类型列显示物料移动_第1张图片

你可能感兴趣的:(程序人生,ABAPer)