ALV中动态内表+行转化为列–老白

ALV中动态内表+行转化为列–老白

071101103234.jpg

转换为:
071101104029.jpg
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 .
DATA: BEGIN OF itab_out OCCURS 0,

        werks LIKE mseg-werks ,

        matnr LIKE mseg-matnr ,

        lgort LIKE mseg-lgort ,

        menge01 TYPE i        ,

        menge02 TYPE i        ,

        menge03 TYPE i        ,

        menge04 TYPE i        ,

        menge05 TYPE i        ,

        menge06 TYPE i        ,

        menge07 TYPE i        ,

        menge08 TYPE i        ,

        menge09 TYPE i        ,

        menge10 TYPE i        ,

        menge11 TYPE i        ,

        menge12 TYPE i        ,

        menge13 TYPE i        ,

        menge14 TYPE i        ,

        menge15 TYPE i        ,

        menge16 TYPE i        ,

        menge17 TYPE i        ,

        menge18 TYPE i        ,

        menge19 TYPE i        ,

        menge20 TYPE i        ,

        menge21 TYPE i        ,

        menge22 TYPE i        ,

        menge23 TYPE i        ,

        menge24 TYPE i        ,

        menge25 TYPE i        ,

        menge26 TYPE i        ,

        line_sum TYPE i       ,

      END OF itab_out.
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: <f_fs1> ,

               <f_fs2>.

DATA: max_count TYPE i .
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.

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[].
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 .

DATA: c(2) TYPE n ,

        txt(20) TYPE c .
PERFORM frm_catlg_set USING: ‘WERKS’   ‘WERKS’ ‘X’ ,

                               ‘MATNR’   ‘MATNR’ ‘X’ ,

                               ‘LGORT’   ‘LGORT’ ‘X’ .

LOOP AT hs_bwart .

    c = c + 1.

    CONCATENATE ‘MENGE’ c INTO txt.

    PERFORM frm_catlg_set USING: txt hs_bwart-bwart ” .

ENDLOOP.

PERFORM frm_catlg_set USING: ‘LINE_SUM’ ‘SUM’ ” .

ENDFORM.                    “fieldcat_init
使用指针动态生成内表的方法:
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: <f_fs1> ,

               <f_out> TYPE STANDARD TABLE ,

               <f_out_wa> .

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_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.

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 <f_out_wa> TO <f_fs1>.

    <f_fs1> = itab_sum-werks.

    ASSIGN COMPONENT ‘MATNR’ OF STRUCTURE <f_out_wa> TO <f_fs1>.

    <f_fs1> = itab_sum-matnr.

    ASSIGN COMPONENT ‘LGORT’ OF STRUCTURE <f_out_wa> TO <f_fs1>.

    <f_fs1> = itab_sum-lgort.
    READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart .

    index = sy-tabix + 3.

    ASSIGN COMPONENT index OF STRUCTURE <f_out_wa> TO <f_fs1>.

    <f_fs1> = itab_sum-menge.
    ASSIGN COMPONENT ‘LINE_SUM’ OF STRUCTURE <f_out_wa> TO <f_fs1>.

    <f_fs1> = itab_sum-menge.
    COLLECT <f_out_wa> INTO <f_out> .

    CLEAR <f_out_wa>.

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                = <f_out>

       EXCEPTIONS

            program_error           = 1

            OTHERS                  = 2.

ENDFORM.                    ” outdata
*———————————————————————*

*       FORM fieldcat_init2                                           *

*———————————————————————*

FORM fieldcat_init2 .

CLEAR c .

PERFORM frm_catlg_set USING: ‘WERKS’   ‘WERKS’ ‘X’ ,

                               ‘MATNR’   ‘MATNR’ ‘X’ ,

                               ‘LGORT’   ‘LGORT’ ‘X’ .

LOOP AT hs_bwart .

    c = c + 1.

    CONCATENATE ‘MENGE’ c 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.

PERFORM build_itab_stru USING: ‘WERKS’ ‘MSEG’ ‘WERKS’ ,

                                 ‘MATNR’ ‘MSEG’ ‘MATNR’ ,

                                 ‘LGORT’ ‘MSEG’ ‘LGORT’ .
LOOP AT hs_bwart.

    c = c + 1.

    CONCATENATE ‘MENGE’ c 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 <f_out>.

CREATE DATA dy_out_wa LIKE LINE OF <f_out>.

ASSIGN dy_out_wa->* TO <f_out_wa>.

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.

转载于:https://www.cnblogs.com/johnson_yao/archive/2011/09/09/2172238.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110556.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm使用技巧及常用快捷键_2010版excel快捷键大全

    pycharm使用技巧及常用快捷键_2010版excel快捷键大全本文对Pycharm常用快捷键进行了汇总整理,强烈建议你收藏学习,相信这些快捷键一定能提高你Python编程的效率。1.格式化代码【Ctrl+Alt+L】我们写代码的时候会发现…

    2022年8月28日
    1
  • 现场校时错乱分析,开启NTP校时延迟分析以及部署建议「建议收藏」

    现场校时错乱分析,开启NTP校时延迟分析以及部署建议「建议收藏」1.问题背景描述2021年7月23日宜春现场出现一台信号机在应该跑早高峰方案的时候,实际上跑了凌晨的方案,从而造成现场车辆拥堵的问题,客户进行了投诉并要求给出解释和解决方案。2.问题排查和分析排查过程中发现宜春现场的校时配置十分混乱。现场存在NTP,GPS,平台校时三种模式同时进行校时的情况。并且现场并不止有一个平台,也就是通过平台校时这个方式的校时源有多种。所以可以得知的是,现场的信号机在较多情况下同时会接受3-5种不同的校时源进行校时。3.同时有多种不同校时源下存在的风险信号机是一个时

    2022年6月18日
    26
  • C++ 单例模式_c 单例模式

    C++ 单例模式_c 单例模式原创文章,转载请注明出处。本文主要从单例的用处以及问题所做介绍

    2025年6月12日
    2
  • 河北对口计算机录取分数线_河北对口计算机专科院校名单

    河北对口计算机录取分数线_河北对口计算机专科院校名单技校网专门为您推荐的类似问题答案问题1:2009年河北对口计算机高考分数线360问题2:谁能告诉我湖南职高计算机专业对口升学本科和专科分数线湖南省2010年普通高校职高对口招生录取控制分数线代码专业门类本科专科71师范44820072种植54473养殖52374机电56675电子电工50676计算机55877建筑48278旅游48981…

    2022年9月13日
    0
  • 动态规划之01背包问题及其优化(python实现)「建议收藏」

    动态规划之01背包问题及其优化(python实现)「建议收藏」动态规划之01背包问题及其优化(python实现)**背包问题(**Knapsackproblem)是一种组合优化的NP完全问题。问题描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。解决思路:动态规划,对每一件物品遍历背包容量,当背包可容纳值大于等于当前物品,与之前已放…

    2022年7月26日
    3
  • 2020最新Java面试题(常见面试题及答案汇总)「建议收藏」

    2020最新Java面试题(常见面试题及答案汇总)「建议收藏」Java基础篇1.JDK和JRE的区别是什么?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。总结:JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含…

    2022年6月21日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号