SAP 创建动态内表

58 篇文章 3 订阅
创建动态内表
一、根据表名创建内表
  1. 程序代码:

    "复杂方式
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
    PARAMETERS:p_tab TYPE string.
    SELECTION-SCREEN END OF BLOCK b1.
    
    DATA:lr_struct TYPE REF TO data,
         lr_table  TYPE REF TO data.
    FIELD-SYMBOLS:<fs_table>  TYPE ANY TABLE,
                  <fs_struct> TYPE any.
    "RTTS
    DATA(lo_struct) = CAST  cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( p_tab ) ).
    DATA(lo_table) = cl_abap_tabledescr=>create( lo_struct ).
    "反射机制
    CREATE DATA lr_struct TYPE HANDLE lo_struct.
    CREATE DATA lr_table  TYPE HANDLE lo_table.
    "引用访问
    ASSIGN lr_struct->* TO <fs_struct>.
    ASSIGN lr_table->*  TO <fs_table>.
    
    "DATA(lv_where) =  'SPRAS EQ 1'.
    SELECT *
     FROM (p_tab)
     INTO TABLE @<fs_table>
       UP TO 10 ROWS.
    "WHERE (lv_where) .
    
    cl_demo_output=>display_data( <fs_table> ).
    
    “简单方式
    DATA:ref_table TYPE REF TO data.
    DATA:lv_where TYPE string.
    FIELD-SYMBOLS:<fs_table> TYPE ANY TABLE.
    
    PARAMETERS:p_tab TYPE dd02l-tabname OBLIGATORY DEFAULT 'TJ02T'.
    
    "创建表
    CREATE DATA ref_table TYPE TABLE OF (p_tab).
    ASSIGN ref_table->* TO <fs_table>.
    
    lv_where =  'SPRAS EQ 1'.
    SELECT *
     FROM (p_tab)
     INTO TABLE @<fs_table>
       UP TO 10 ROWS
    WHERE (lv_where) .
    
    cl_demo_output=>display_data( <fs_table> ).
    
  2. 展示结果:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    在这里插入图片描述

二、根据Fieldcat创建内表
  1. 程序代码:

    *&---------------------------------------------------------------------*
    *& Report ZDMEO_001
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT zdmeo_001.
    
    *&------------------------------------------------*
    *                alv陪ボ
    *&------------------------------------------------*
    DATA: gt_fcat TYPE lvc_t_fcat,
          gs_fcat TYPE lvc_s_fcat.
    DATA: gt_layo TYPE lvc_s_layo.
    DATA: gt_table TYPE REF TO data.
    
    FIELD-SYMBOLS:<fs_tab> TYPE ANY TABLE.
    FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
                   <fs_wa>    TYPE any,
                   <fs_field> TYPE any.
    
    PERFORM frm_set_fcat."设置Fieldcat
    PERFORM frm_create_dynamic_tab."创建动态内表
    PERFORM frm_set_data."设置值
    PERFORM frm_insert_fcat."插入Fieldcat
    ASSIGN <fs_table> TO <fs_tab>."将动态内表1的数据复制到内表2
    PERFORM frm_create_dynamic_tab."创建动态内表
    MOVE-CORRESPONDING <fs_tab> TO <fs_table>."将值赋值回来
    PERFORM frm_set_data.
    BREAK-POINT.
    "设置Fieldcat
    FORM frm_create_row USING pv_name TYPE c
                                 pv_row  TYPE i
                                 pv_txt  TYPE c
                                 pv_out  TYPE i
                                 pv_edit TYPE c
                                 pv_no_zero TYPE c
                                 pv_tabname TYPE c.
      gs_fcat-fieldname = pv_name.
      gs_fcat-col_pos   = pv_row.
      gs_fcat-coltext   = pv_txt.
      gs_fcat-outputlen = pv_out.
      gs_fcat-edit      = pv_edit.
      gs_fcat-no_zero = pv_no_zero.
      gs_fcat-tabname = pv_tabname.
      APPEND gs_fcat TO gt_fcat.
      CLEAR: gs_fcat.
    ENDFORM. " FRM_CREATE_ROW
    
    FORM frm_create_dynamic_tab .
    *&------承笆篈ず---------
      CALL METHOD cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog           = gt_fcat
        IMPORTING
          ep_table                  = gt_table
        EXCEPTIONS
          generate_subpool_dir_full = 1
          OTHERS                    = 2.
      IF sy-subrc = 0.
        CASE sy-subrc.
          WHEN 1.
          WHEN 2.
          WHEN OTHERS.
        ENDCASE.
      ENDIF.
      ASSIGN gt_table->* TO <fs_table>.
    ENDFORM.
    
    FORM frm_set_fcat .
      PERFORM frm_create_row USING  'ZBOX' 1 '' '' '' '' ''.
      PERFORM frm_create_row USING  'PBDNR' 2 TEXT-006  '10' '' 'X' 'PBIM'."
      PERFORM frm_create_row USING  'BERID' 3 TEXT-005  '10' '' 'X' ''."
      PERFORM frm_create_row USING  'Z_CUSNO' 4 TEXT-039  '10' '' 'X' ''."
      PERFORM frm_create_row USING  'KDMAT' 5 TEXT-013  '35' '' 'X' 'KNMT'."
      PERFORM frm_create_row USING  'MATNR' 6 TEXT-014  '18' '' 'X' 'MAKT'."
      PERFORM frm_create_row USING  'MAKTX' 7 TEXT-032  '40' '' 'X' 'MAKT'."
      PERFORM frm_create_row USING  'PLNMG' 8 TEXT-030  '15' '' 'X' ''."
      PERFORM frm_create_row USING  'PDATU' 9 TEXT-031  '6' '' 'X' ''."
    ENDFORM.
    
    FORM frm_insert_fcat .
      PERFORM frm_create_row USING  'C_RESULT' 2 TEXT-008 '1' '' '' ''."
      PERFORM frm_create_row USING  'Z_SIGN' 3 TEXT-036 '20' '' '' ''."
      PERFORM frm_create_row USING  'C_MESSAGE' 4 TEXT-009 '40' '' '' ''."
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form frm_set_data
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_set_data .
      DATA: lv_line TYPE REF TO data.
      CREATE DATA lv_line LIKE LINE OF <fs_table>.
      ASSIGN lv_line->* TO <fs_wa>.
    
      "给字段赋值.
      ASSIGN COMPONENT 'PBDNR' OF STRUCTURE <fs_wa> TO <fs_field>.
      CLEAR <fs_field>.
      <fs_field> = '12394'.
    
      APPEND <fs_wa> TO <fs_table>.
      CLEAR <fs_wa>.
    ENDFORM.
    
  2. 执行结果:

    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP SE11是SAP系统中用于管理表的数据字典工具。它提供了创建、修改和查看表的功能。 首先,我们需要打开SAP SE11工具。在SAP Easy Access菜单中,选择工具 -> ABAP工具 -> 数据字典 (SE11)。或者在SAP Easy Access菜单中直接输入SE11并按回车键。 在打开的SE11界面中,我们可以看到左侧的导航栏,其中包含了数据字典的各种选项。我们点击"表"选项。 接下来,我们可以点击工具栏上的"创建"按钮,开始创建表。在创建表的过程中,我们需要填写一些表的基本信息,如表名、描述等。这些信息可以帮助我们更好地理解和使用表。 在填写完表的基本信息后,我们需要定义表的字段。对于每个字段,我们需要指定字段名、数据类型、长度等属性。在这一步中,我们可以根据具体的需求来定义表的字段。 在定义完表的字段后,我们可以通过点击工具栏上的"保存"按钮,保存表的设计。这样,表就会被创建并保存在数据字典中。 创建表后,我们可以通过SE11工具来查看和修改表的定义。我们可以在导航栏中选择表,然后输入表名,点击"显示"按钮,即可查看表的详细信息。 总结起来,使用SAP SE11创建表可以通过打开SE11工具,选择"表"选项,点击工具栏上的"创建"按钮,填写表的基本信息并定义表的字段,最后保存表的设计。创建好的表可以随时通过SE11工具进行查看和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值