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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle 存储过程

    oracle 存储过程

    2021年7月7日
    74
  • 爬虫遇到js动态渲染问题

    爬虫遇到js动态渲染问题爬虫遇到js动态渲染问题时间:2020年6月3日10:28:48作者:钟健概要:关于scrapy爬虫应对网页JavaScript动态渲染问题关键字:scrapycrapy-splash一、传统爬虫的问题scrapy爬虫与传统爬虫一样,都是通过访问服务器端的网页,获取网页内容,最终都是通过对于网页内容的分析来获取数据,这样的弊端就在于他更适用于静态网页的爬取,而面对js渲染的动态网页就有点力不从心了,因为通过js渲染出来的动态网页的内容与网页文件内容是不一样的。1.实际案例腾讯招聘:ht

    2022年7月26日
    3
  • vscode新建文件,默认为html[通俗易懂]

    vscode新建文件,默认为html[通俗易懂]虽然还没达到理想目标,不过还是有进步步骤如下图文字版打开vscode–选择文件–首选项–设置到达设置页面文件(14)–找到要复制代码–复制,在加个html效果如下图右下脚由纯文本变为html…

    2022年8月22日
    21
  • SSRF漏洞之FastCGI利用篇「建议收藏」

    SSRF漏洞之FastCGI利用篇「建议收藏」SSRF漏洞之FastCGI利用篇SSRF–(Server-sideRequestForge,服务端请求伪造)定义:由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务SSRF漏洞思维导图如下,本篇主要介绍利用SSRF漏洞攻击FastCGI0x00.PHP-FPMFastCGI未授权利用首先我们使用Vulhub漏洞靶场快速搭建漏洞环境进行复现,感受一波漏洞的危害#保证实验vps具有git、docker、pip、docker-compose、python基

    2022年7月15日
    13
  • Java 三目运算符细节详解「建议收藏」

    Java 三目运算符细节详解「建议收藏」Java三目运算符细节详解@author:Jingdai@date:2020.09.24看到标题你肯定觉得三目运算符有什么好讲的,不是很简单嘛。我之前也是这么认为的,直到今天刷LeetCode遇到了一点问题,发现还是有些细节自己不知道的,现总结一下。短路问题首先我们都知道Java中&&和||的运算是具有短路效果的,如果逻辑运算符的第一部分能确定运算的结果,就不会再去计算逻辑运算符的第二部分,比如下面的代码,输出的i仍然是1,因为后面的运算短路了,没有计算。in

    2025年6月24日
    1
  • win10系统用激活码激活,用dos命令来激活,只能激活半年时间,暂时没找到永久的。

    win10系统用激活码激活,用dos命令来激活,只能激活半年时间,暂时没找到永久的。自己之前用激活工具激活的,激活时间好像是180天,即将到期了,于是在网上百度各种永久激活方法,参照别人的方法,发现把自己的激活状态由激活即将到期变为通知模式,瞬间一脸懵逼,于是找啊找,终于找到了这种方式,亲测可行。(1)首先查看自己系统的激活状态;快捷键win+r输入命令:slmgr.vbs-xpr; 随后弹出窗口显示2018/9/8过期。 (2)然后以管理员模式打开命令提示符窗…

    2022年5月30日
    112

发表回复

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

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