ABAP动态内表实战

1、取数表

image.png

数据如下:
image.png

2、上代码

*&---------------------------------------------------------------------*
*& Report  ZGML_FS_DT
*&
*&---------------------------------------------------------------------*
*&动态内表
*&create time:2018.02.02
*&---------------------------------------------------------------------*

REPORT  ZGML_FS_DT.

DATA: gt_dt01 TYPE TABLE OF ZDT01,
      gw_dt01 TYPE ZDT01.
*定义ALV相关变量
DATA :gt_fieldcat TYPE lvc_t_fcat,
      gw_fieldcat TYPE lvc_s_fcat.
RANGES r_month FOR gw_dt01-ZMONTH.
DATA gv_num TYPE i.
*定义动态内表相关变量
FIELD-SYMBOLS: <FT_VB> TYPE STANDARD TABLE,
               <FS_VB> TYPE ANY,
               <dyn_field> TYPE ANY.

DATA gv_pos TYPE I.
DATA GV_FIELDCAT TYPE C LENGTH 20.
DATA GV_MONTH TYPE C LENGTH 10.
DATA gv_index TYPE N LENGTH 2.

DATA gt_table TYPE REF TO data.

*定义宏:添加字段
DEFINE %%add_fieldcat.
  CLEAR gw_fieldcat.
  gv_pos = gv_pos + 1.
  gw_fieldcat-COL_POS = GV_POS.
  gw_fieldcat-FIELDNAME = &1.
  gw_fieldcat-SCRTEXT_M = &2.
  gw_fieldcat-CFIELDNAME = &3.
  gw_fieldcat-OUTPUTLEN = 15.
  APPEND gw_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.

PARAMETERS p_year TYPE ZDT01-ZYEAR  DEFAULT '2017'.
SELECT-OPTIONS s_comp FOR gw_dt01-ZCOMPANY.
SELECT-OPTIONS s_month FOR gw_dt01-ZMONTH.

START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_set_fieldcat.
  PERFORM frm_set_dynamic_table."创建动态内表
  PERFORM frm_add_data.         "向动态内表增加数据

END-OF-SELECTION.
  IF gt_dt01 IS NOT INITIAL.
    PERFORM frm_display_data.
  ELSE.
    MESSAGE '没有数据' TYPE 'E'.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
  SELECT * FROM ZDT01
    INTO TABLE gt_dt01
    WHERE ZYEAR = p_year
    AND ZCOMPANY IN s_comp
    AND ZMONTH IN s_month.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
  IF gt_dt01 IS NOT INITIAL AND <FT_VB>  IS ASSIGNED.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       IT_FIELDCAT_LVC                   = gt_fieldcat
      TABLES
        T_OUTTAB                          = <FT_VB>
     EXCEPTIONS
       PROGRAM_ERROR                     = 1
       OTHERS                            = 2
              .
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDIF.
ENDFORM.                    " FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*

FORM FRM_SET_FIELDCAT .

  %%add_fieldcat 'ZCOMPANY' '公司' ''.
  %%add_fieldcat 'ZYEAR' '年份' ''.
  r_month[] = s_month[].
  READ TABLE r_month INDEX 1.
  gv_num = r_month-high - r_month-low + 1.
  gv_index = r_month-low.
  DO gv_num TIMES.
    CONCATENATE 'MONTH_' gv_index INTO GV_FIELDCAT.
    CONCATENATE gv_index '月' INTO GV_MONTH.
    %%add_fieldcat GV_FIELDCAT GV_MONTH 'ZBZ'.
    gv_index = gv_index + 1.
  ENDDO.
  %%add_fieldcat 'ZBZ' '货币单位' ''.
ENDFORM.                    " FRM_SET_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
FORM FRM_SET_DYNAMIC_TABLE .
  DATA gt_table TYPE REF TO data.
  DATA gw_line TYPE REF TO data.
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = gt_fieldcat
    IMPORTING
      EP_TABLE                  = gt_table
*     E_STYLE_FNAME             =
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      others                    = 2.
  IF SY-SUBRC <> 0.
    EXIT.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  ASSIGN gt_table->* TO <FT_VB>."动态内表
  CREATE DATA gw_line LIKE LINE OF <FT_VB>.
  ASSIGN gw_line->* TO <FS_VB>."动态工作区
ENDFORM.                    " FRM_SET_DYNAMIC_TABLE

*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_DATA
*&---------------------------------------------------------------------*
FORM FRM_ADD_DATA .
  DATA lw_dt01 TYPE ZDT01.
  DATA lv_fieldname TYPE C LENGTH 10.
  SORT gt_dt01 BY ZCOMPANY.
  LOOP AT gt_dt01 INTO lw_dt01.
    MOVE-CORRESPONDING lw_dt01 TO gw_dt01.

    AT NEW ZCOMPANY.
      CLEAR <FS_VB>.
      ASSIGN COMPONENT 'ZCOMPANY' OF STRUCTURE <FS_VB> TO <dyn_field>.
      <dyn_field> = gw_dt01-zcompany.
      ASSIGN COMPONENT 'ZYEAR' OF STRUCTURE <FS_VB> TO <dyn_field>.
      <dyn_field> = gw_dt01-zyear.
      ASSIGN COMPONENT 'ZBZ' OF STRUCTURE <FS_VB> TO <dyn_field>.
      <dyn_field> = gw_dt01-zbz.
    ENDAT.
    CONCATENATE 'MONTH_' gw_dt01-ZMONTH INTO lv_fieldname.
    ASSIGN COMPONENT lv_fieldname OF STRUCTURE  <FS_VB> TO <dyn_field>.
    <dyn_field> = gw_dt01-INCOME.
    AT END OF ZCOMPANY.
      APPEND <FS_VB> TO <FT_VB>.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " FRM_ADD_DATA

3、运行结果

1.png
2.png
3.png
4.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,004评论 6 13
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,699评论 18 139
  • 我会变瘦吗 我不会再长高了吧 我会找到自由吗 我会改掉坏习惯吗 我会变有钱吗 我会永远让家人骄傲吗 我会比父辈更幸...
    漾子_V阅读 208评论 0 2
  • 01 一个年龄小但看起来像大妈的女生,一个年龄大但看起来像少女的女人,给你选择的话,你会和谁谈恋爱? 我曾这样问过...
    厘月阅读 420评论 1 6