ABAP动态内表运用

     REPORT  ztest.  

    DATA: BEGIN OF wa_ets,
          vbeln     LIKE lips-vbeln,
          posnr     LIKE lips-posnr,
    END OF wa_ets.  

    DATA:
         l_fname    LIKE dd03l-fieldname,
         typedesr   TYPE REF TO cl_abap_typedescr,
         gt_comp    TYPE cl_abap_structdescr=>component_table,
         gs_comp    LIKE LINE OF gt_comp,
         is_comp    TYPE abap_componentdescr,
         it_comp    TYPE abap_component_tab,
         cl_stru    TYPE REF TO cl_abap_structdescr,
         c2_stru    TYPE REF TO cl_abap_structdescr,
         cl_tabl    TYPE REF TO cl_abap_tabledescr,
         c2_tabl    TYPE REF TO cl_abap_tabledescr,
         cl_handle  TYPE REF TO data,
         c2_handle  TYPE REF TO data,
         cl_st      TYPE REF TO data,
         c2_st      TYPE REF TO data,
         c3_st      TYPE REF TO data,
         key        TYPE abap_keydescr_tab.  

    FIELD-SYMBOLS: <gt_itab>    TYPE ANY TABLE ,
                   <it_itab>    TYPE ANY TABLE ,
                   <fs1>        TYPE ANY,
                   <fs2>,
                   <fs3>,
                   <fs4>,
                   <fs5>,
                   <gs_struc>   TYPE ANY.  

      DATA: BEGIN OF gt_field OCCURS 0,
         kopos(2)    TYPE n,
         fieldname   LIKE dd03l-fieldname,
         rollname    LIKE dd03l-rollname,
         ref_table   LIKE dd03l-tabname,
         ref_field   LIKE dd03l-fieldname,
         key         TYPE c,
      END OF gt_field.
    **
      DATA: it_field LIKE STANDARD TABLE OF gt_field WITH HEADER LINE.  

      gt_field-fieldname  = ‘VBELN‘.
      gt_field-rollname   = ‘VBELN_VL‘.
      gt_field-ref_table  = ‘LIPS‘.
      gt_field-ref_field  = ‘VBELN‘.
      APPEND gt_field.
      MOVE gt_field   TO it_field.
      APPEND it_field.  

      gt_field-fieldname  = ‘POSNR‘.
      gt_field-rollname   = ‘POSNR_VL‘.
      gt_field-ref_table  = ‘LIPS‘.
      gt_field-ref_field  = ‘POSNR‘.
      APPEND gt_field.
      CLEAR gt_field.
      gt_field-fieldname  = ‘BRGEW‘.
      gt_field-rollname   = ‘GSGEW‘.
      gt_field-ref_table  = ‘LIPS‘.
      gt_field-ref_field  = ‘BRGEW‘.
      APPEND gt_field.
      MOVE gt_field   TO it_field.
      APPEND it_field.
      gt_field-fieldname  = ‘VOLUM‘.
      gt_field-rollname   = ‘VOLUM‘.
      gt_field-ref_table  = ‘LIPS‘.
      gt_field-ref_field  = ‘VOLUM‘.
      APPEND gt_field.
      MOVE gt_field   TO it_field.
      APPEND it_field.
      .
      LOOP AT gt_field.
        CLEAR: gs_comp, l_fname.
        CLEAR l_fname.
        CONCATENATE gt_field-ref_table ‘-‘ gt_field-ref_field INTO l_fname.
        is_comp-name   = gt_field-fieldname.
        "is_comp-type  ?= cl_abap_elemdescr=>describe_by_name( gt_field-rollname ).
        is_comp-type  ?= cl_abap_datadescr=>describe_by_name( l_fname ).
        APPEND is_comp  TO it_comp.
      ENDLOOP.
      cl_stru = cl_abap_structdescr=>create( it_comp ).
    **
      APPEND ‘VBELN‘ TO key.
      cl_tabl = cl_abap_tabledescr=>create( p_line_type  = cl_stru
                                            p_table_kind = cl_abap_tabledescr=>tablekind_sorted
                                           " p_unique     = abap_true
                                            p_key        = key ).
      APPEND ‘POSNR‘ TO key.
      c2_tabl = cl_abap_tabledescr=>create( p_line_type  = cl_stru
                                            p_table_kind = cl_abap_tabledescr=>tablekind_hashed
                                            p_unique     = abap_true
                                            p_key        = key ).
      CREATE DATA cl_handle TYPE HANDLE cl_tabl.
      CREATE DATA c2_handle TYPE HANDLE c2_tabl.
      CREATE DATA cl_st     TYPE HANDLE cl_stru.
      CREATE DATA c2_st     TYPE HANDLE cl_stru.
      CREATE DATA c3_st     TYPE HANDLE cl_stru.
      ASSIGN cl_handle->*   TO <gt_itab>.
      ASSIGN c2_handle->*   TO <it_itab>.
      ASSIGN cl_st->*       TO <fs1>.
      ASSIGN c2_st->*       TO <fs3>.
      ASSIGN c3_st->*       TO <fs5>.  

      ASSIGN COMPONENT ‘VBELN‘ OF STRUCTURE <fs1> TO <fs2>.
      <fs2> = ‘0080021838‘.
      ASSIGN COMPONENT ‘POSNR‘ OF STRUCTURE <fs1> TO <fs2>.
      <fs2> = ‘000030‘.
    **
      SELECT * FROM lips
               INTO CORRESPONDING FIELDS OF TABLE <gt_itab> UP TO 10 ROWS
               ORDER BY vbeln posnr.
      LOOP AT <gt_itab> INTO <fs3>.
        ASSIGN COMPONENT ‘POSNR‘ OF STRUCTURE <fs3> TO <fs4>.
        CLEAR <fs4>.
        COLLECT <fs3> INTO <it_itab>.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM <gt_itab>.
      READ TABLE <gt_itab> FROM <fs1> TRANSPORTING NO FIELDS.
      IF sy-subrc = 0.
        WRITE:/ ‘SSSS‘.
      ENDIF.
      c2_stru ?= cl_abap_structdescr=>describe_by_data( wa_ets ).
      gt_comp = c2_stru->get_components( ).  

原文地址:https://www.cnblogs.com/carol1916/p/9136561.html

时间: 2024-08-05 09:09:02

ABAP动态内表运用的相关文章

BAP中创建动态内表的三种方法(转载)

BAP中创建动态内表的三种方法 第一种: 如果我们需要的动态内表字段或者动态工作区和数据字典中的类型一致,可以直接使用CREATE DATA生成,当然也可以是自定义类型. 比如要产生和数据表MARA结构一致的动态内表: DATA : DY_TABLE TYPE REF TO DATA, WA_LINE TYPE REF TO DATA. FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE . CREATE DATA DY_TABLE TYPE TABL

动态内表实例

REPORT ZTEST. FIELD-SYMBOLS:<DYN_TABLE> TYPE STANDARD TABLE, <DYN_WA>, <DYN_FIELD>. DATA: DY_TABLE TYPE REF TO DATA, DY_LINE  TYPE REF TO DATA, IT_STRUCTURE TYPE LVC_T_FCAT, WA_STRUCTURE TYPE LVC_S_FCAT. START-OF-SELECTION. PERFORM CREAT

2016.4.26_动态内表【ABAP】

在最后一行加个断点,执行看<FS_DTAB>的值.在选择屏幕输多少,内表生成多少列. DATA: DY_TABLE TYPE REF TO DATA, DY_WA TYPE REF TO DATA, IT_STR TYPE LVC_T_FCAT, WA_STR TYPE LVC_S_FCAT. FIELD-SYMBOLS: <FS_DTAB> TYPE STANDARD TABLE, <FS_DWA> TYPE ANY, <FS_VALUE> TYPE AN

ABAP 动态生成内表的几种方法

最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述的创建动态内表的方法大致有两种.我做了一下测试,源代码附后.在这里提醒大家一点,在做动态更新程序的时候,要注意两点:      1.使用modify (p_tabname) from <dyn_wa>. 的时候,一定要确定要更新的字段是不是系统表的关键字段,如果是关键字段的话,需要先删除这条记录,

ABAP 内表 详解

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4293475.html 老式的内表类型定义... 214 基于基本类型内表类型... 214 基于结构体类型内表类型... 215 老式的内表对象创建... 215 参照现有内表类型或内表对象来创建... 215 参照现有结构类型或结构对象来

[ABAP技术总结]内表

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 3.      内表... 33 3.1.           LOOP AT循环内表... 33 3.1.1.        SUM.. 34 3.1.2.        AT... ENDAT. 34 3.1.3.        自已实现AT... ENDAT. 37 3.2.           在LOOP AT中修改当前内表行... 39 3.2.1.      

ABAP内表数据做层次XML输出

*&---------------------------------------------------------------------**& Report  Z_BARRY_TEST_XML*&---------------------------------------------------------------------**& 46C - ECC6 通用*&----------------------------------------------

ABAP 内表访问表达式的性能

内表访问表达式是ABAP 7.4中引入的重要特性,可以使语句变得更加简洁.美观.那么它的读写性能怎么样呢?我进行了一点点测试. 读取 测试代码,使用三种方式读取同一内表,分别是read table关键字.表达式和read table...binary search: REPORT ztest_read. DATA: BEGIN OF gs_test, index TYPE i, des TYPE string, END OF gs_test. DATA: gt_test LIKE STANDAR

SAP ABAP编程 FOR ALL ENTRIES IN使用指南 将表与内表串联

在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT 的内表,我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,例如 TYPES: BEGIN OF t_asnum, asnum LIKE asmd-asnum, END OF t_asnum. DATA:gt_asnum TYPE TABLE OF t_asnum. CLEAR: g_matkl,gt_asnum. SELECT SINGLE matkl FROM zmm_ys_jsdl