• ABAP 内表的行列转换-NEW


    REPORT Z_TEST_COL_TO_ROW.

    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.
    TYPESBEGIN 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 .
    DATABEGIN OF itab_out OCCURS 0,
            werks LIKE mseg-werks ,
            matnr LIKE mseg-matnr ,
            lgort LIKE mseg-lgort ,
            menge01 TYPE ,
            menge02 TYPE ,
            menge03 TYPE ,
            menge04 TYPE ,
            menge05 TYPE ,
            menge06 TYPE ,
            menge07 TYPE ,
            menge08 TYPE ,
            menge09 TYPE ,
            menge10 TYPE ,
            menge11 TYPE ,
            menge12 TYPE ,
            menge13 TYPE ,
            menge14 TYPE ,
            menge15 TYPE ,
            menge16 TYPE ,
            menge17 TYPE ,
            menge18 TYPE ,
            menge19 TYPE ,
            menge20 TYPE ,
            menge21 TYPE ,
            menge22 TYPE ,
            menge23 TYPE ,
            menge24 TYPE ,
            menge25 TYPE ,
            menge26 TYPE ,
            line_sum TYPE ,
    END OF itab_out.

    TYPESBEGIN 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: <f_fs1> ,
    <f_fs2>.
    DATA: max_count TYPE .
    SELECT-OPTIONS:
          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 .
    ENDFORM" GETDATA
    *&---------------------------------------------------------------------*
    *& Form FIXDATA
    *&---------------------------------------------------------------------*
    FORM fixdata.
    DATAindex 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[].
    LOOP AT itab_sum.
        itab_out-werks = itab_sum-werks .
        itab_out-matnr = itab_sum-matnr .
        itab_out-lgort = itab_sum-lgort .
    READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart .
    index = sy-tabix + 3.
    ASSIGN COMPONENT index OF STRUCTURE itab_out TO <f_fs1>.
    <f_fs1> = itab_sum-menge.
    itab_out-line_sum = itab_sum-menge.
    COLLECT itab_out.
    CLEAR itab_out.
    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' 'X' ,
          '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 i_callback_user_command 
    'USER_COMMAND'
    TABLES t_outtab 
    = itab_out
    EXCEPTIONS program_error 
    1
    OTHERS 2.
    ENDFORM" outdata
    *---------------------------------------------------------------------*
    * FORM fieldcat_init2 *
    *---------------------------------------------------------------------*
    FORM fieldcat_init2 .
    DATAc(2TYPE n , txt
    (20TYPE .
    PERFORM frm_catlg_set USING:       
    'WERKS' 'WERKS' 'X' ,       
    'MATNR' 'MATNR' 'X' ,       
    'LGORT' 'LGORT' 'X' .
    LOOP AT hs_bwart .
    c + 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

  • 相关阅读:
    P1772 [ZJOI2006]物流运输
    P3951 小凯的疑惑
    P1082 同余方程(【模板】exgcd)
    T107741 【模板】权值线段树合并
    P3205 [HNOI2010]合唱队
    P1062 数列
    P1144 最短路计数
    P1502 窗口的星星
    P4147 玉蟾宫(【模板】悬线法)
    CSP模拟赛#3 分段(T1-26)
  • 原文地址:https://www.cnblogs.com/eagle-dtq/p/5193154.html
Copyright © 2020-2023  润新知