程序没有什么实用性,就是把一个表的内容全部显示出来了,仅用于看看数据都是什么样子的,但是其中的动态的方法还是值得研究学习的。这些方法是从我的前辈身上学到的,我小小的实践了一下,本来认为在编写程序的可以尽可能的实现程序的可配置型,然后这种想法是虽然好,不过自己没有办法实现。例如
我想 DATA 内表 TYPE TABLE OF 任意表的名称。
开始 简单的认为 DATA GR_TABNAME TYPE TABNAME.
DATA  内表 TYPE TABLE OF (GR_TABNAME).
然而这是行不通的。于是采用了动态的方式实现了类似的思想。
第一部分:程序框架
REPORT  ZALV_20090304_EVENT.
INCLUDE ZALV_DATA_INTI.
INCLUDE ZALV_EVENT_F01.
START-OF-SELECTION.
PERFORM SUB_ALV_DATA_GET.
第二部分:INCLUDE ZALV_DATA_INTI.
 TYPE-POOLS:ABAP.
PARAMETERS P_NAME TYPE OBJNAME.
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.
CALL FUNCTION 'DDIF_NAMETAB_GET'
 EXPORTING
   TABNAME          = P_NAME
TABLES
*   X031L_TAB         =
  DFIES_TAB         =LT_TABLE
EXCEPTIONS
  NOT_FOUND         = 1
  OTHERS            =2
         .
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBERSY-MSGNO
         WITH SY-MSGV1 SY-MSGV2SY-MSGV3 SY-MSGV4.
ENDIF.
DATA LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA  TYPE REF TO CL_ABAP_DATADESCR.
DATA L_STRING TYPE STRING.
DATA LT_COMP TYPE  ABAP_COMPONENT_TAB.
DATA LS_COMP LIKE LINE OF  LT_COMP.
DATA E_WA TYPE REF TO DATA.
DATA E_TABLE TYPE REF TO DATA.
FIELD-SYMBOLS <FS_TABLE> TYPE STANDARDTABLE.
FIELD-SYMBOLS <FS_STRUC> TYPE ANY.
LOOP AT LT_TABLE INTO LS_TABLE.
 CONCATENATE LS_TABLE-TABNAME '-'LS_TABLE-FIELDNAME INTO L_STRING.
*  L_STRING = LS_COMP-NAME.
 LS_COMP-NAME = LS_TABLE-FIELDNAME.
 CALL METHODCL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
   EXPORTING
     P_NAME         =L_STRING
   RECEIVING
     P_DESCR_REF    =LR_TYPE
   EXCEPTIONS
     TYPE_NOT_FOUND = 1
     OTHERS         =2.
 IF SY-SUBRC <> 0.
   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBERSY-MSGNO
              WITHSY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 ENDIF.
 LS_COMP-TYPE ?= LR_TYPE.
 APPEND LS_COMP TO LT_COMP.
 CLEAR LS_COMP.
ENDLOOP.
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
 EXPORTING
   P_COMPONENTS = LT_COMP
 RECEIVING
   P_RESULT     = LR_STRUC
   .
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
 EXPORTING
   P_LINE_TYPE  = LR_STRUC
 RECEIVING
   P_RESULT     = LR_TABLE
   .
CREATE DATA E_WA    TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.
ASSIGN E_WA->* TO <FS_STRUC>.
ASSIGN E_TABLE->* TO <FS_TABLE>.
第三部分:INCLUDE ZALV_EVENT_F01.
 FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE<FS_TABLE> FROM (P_NAME).
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       I_STRUCTURE_NAME                 =P_NAME
      TABLES
        T_OUTTAB                        = <FS_TABLE>
     EXCEPTIONS
       PROGRAM_ERROR                    = 1
       OTHERS                          = 2
              .
    IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2SY-MSGV3 SY-MSGV4.
    ENDIF.
ENDFORM.                   " SUB_ALV_DATA_GET
已投稿到: 排行榜 圈子 阅读(83)|评论(7)|收藏(0)|打印|举报
前一篇:ABAP 的 一些小技巧总结
后一篇:ABAP中ALV函数积累的实战技巧与原理
评论    重要提示:警惕虚假中奖信息,点击查看详情[发评论]
新浪网友:2009-03-14 11:00:59 Hi 关于动态的实现任意表的ALV显示的文章。
我测试了下,输入一个table是可以的,但是输入一个试图就出错了,怎么改进呢
博主回复:2009-03-16 09:33:19HI,我查了一些资料,做了一些试验,有一些东西先来共同的探讨一下:
sap的视图的类型有五种
Database views :和数据库的视图形同,连接条件是必须自定义. 
Projection views: 用于屏蔽一些字段(一般用于保护数据时使用). 
Help views: 该类视图可以用搜索帮助的"selectionmethod"中使用,参与连接表必须存在外键. 
Maintenance views:允许你进行对几个表的数据进行修改,参与连接表必须存在外键,他们的连接条件是不能自定义的.  
Append Views:这种视图主要用于增强;.  
如果database视图和Protection视图能进行select操作,其他视图不能进行查询;
对于多表连接的database视图,只能进行读操作;
如果database视图是单个表,则可以插入纪录;
如果database视图含有表的所有关键字,则可以修改;
对其他三种视图都可以进行插入和修改操作,具体参见maintance status的设置.
基于以上的分类,只有两种视图是可以支持SELECT语句的,所有只有前两种视图是可以显示的,我做了一个简单的例子,发现可以显示。
新浪网友:2009-03-14 11:20:27 另外我想把每个字段的字段名称作为ALV显示的第一行,字段名称的描述作为ALV显示的第二行,怎么做呢,从表里边的值从第三行开始
李:2009-03-16 10:24:21 朋友,
我在输入视图V_T683S的时候会有一个dump,你看看有无,怎么改进呢。
Maint. view        V_T683S
Short Description  Schema (&1&2)
谢谢了。
菩提大仙:2009-03-16 23:37:49 通过对V_T683S的属性进行研究,发现在MAINTANENCESTATUS中 的一个属性使用的是 DISPLAY/MAINTANENCE ALLOWED WITH DESTRICTIONS.其中的DESTRICTIONS是限制的意思,这个限制指的是权限限制,当我们生成一张视图 并且可以进行维护的时候,即GOTO->生成维护视图,需要设置一个权限组,我猜测:不是所有的用户都可以维护这个视图,需要指定的限制权限组才可以。 关于第三行显示ALV的我认为可行,正在调试代码 
菩提大仙:2009-03-17 22:07:07 个人分析: 从字面的意思上就可以看出Maintenance views是一个维护视图,用来维护数据的。而视图中可以用来查询数据的只有在SE11中创建视图类型---- Database views (数据库视图类型)和Projection views(投影视图)也只有这两个视图可以使用SELECT语句进行查询。因此才可以用ALV进行显示。其他的三种视图都是维护数据的方式。 
新浪网友:2009-03-18 10:16:59 版主,你的分析是对的,我测试了下select是不支持Maintenance views的。
REPORT  Z0001.
TABLES V_T683S.
SELECT * FROM V_T683S .
 WRITE: / V_T683S-KVEWE, V_T683S-KAPPL,
          V_T683S-KALSM,V_T683S-STUNR.
ENDSELECT.
同样的错误提示‘"V_T683S" is not defined in the ABAP Dictionary as atable, projection view, or database view"。
新浪网友:2009-03-18 10:29:49其实我初始的用意是想从视图中读取我需要的数据,拿视图V_T683S来说,他比表T683S多一个字段VTEXT(Description),如果仅仅读取表T683S的话,会缺这一列数据。

ABAP 动态的实现任意表的ALV显示相关推荐

  1. ABAP开发如何动态的实现任意表的ALV显示

    在ABAP开发中如何动态的实现任意表的ALV的显示,以下是具体操作步骤: 第一部分:程序框架 REPORT  ZALV_20090304_EVENT. INCLUDE ZALV_DATA_INTI. ...

  2. 动态内表 动态ALV显示

    动态内表及动态ALV显示 最近写了一个forecast,要求按用户输入的日期分周或月显示,我把它贴出来,给有需要的人参考一下 *&------------------------------- ...

  3. ABAP动态生成内表的三种方法

    动态内表的创建和使用主要有以下几点: 动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:"cl_ALV_table_create=>creat ...

  4. SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP)

    SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP) 简介: 动态内表是动态报表的核心,动态内表的条件操作能有效解决性能问题.这篇文章用于普及动态内表在 SORT ...

  5. ABAP动态取得数据的方法

    ABAP动态查询的实现:可以完全实现动态查询,每个字段都可以动态. (1)        利用宏 (2)        利用abap指针 (3)        利用FIELD-SYMBOL 具体实现: ...

  6. ABAP 动态 SQL

    ABAP的sql语句是可以动态生成的,这个特性可以带给我们很多的便利. 比如SAP对费用的存储结构可能会采用 将会计月作为栏位的情况,及 period001,period002...等这样方式来存储值 ...

  7. 动态新增表字段_制作动态的数据透视表(一):定义名称法创建数据透视表

    --施瓦辛格:没有跌倒过的人不会成功. 我们的日常工作中,会经常遇到一种情况:创建好数据透视表后,有其他被遗漏的数据内容需要重新插入到数据源后,有其他被遗漏的数据内容需要重新插入到数据源中:或者是需要 ...

  8. [转]ABAP动态取得数据

    动态取得数据的方法 ABAP动态查询的实现:可以完全实现动态查询,每个字段都可以动态. (1)         利用宏 (2)         利用abap指针 (3)         利用FIELD ...

  9. ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL

    目录 前言 1. 动态生成子例程并调用 2. 动态生成本地类并调用 前言 本文为ABAP编程中动态生成子例程/本地类的简单示例,依托语句GENERATE SUBROUTINE POOL实现. 1. 动 ...

最新文章

  1. 移动端自动播放音视频实现代码
  2. java 无限级_JAVA+Hibernate 无限级分类
  3. Weblogic 启动慢解决方法
  4. module 'thread' has no attribute
  5. linux oracle新建监听,linux 下 oracle图形界面(需配置监听,创建实例)
  6. word里双横线怎么打_美人计 | 精致打工人秀智,教你内双怎么化
  7. LCS-最大公共子序列(DP问题)
  8. Linux: chm转HTML How to Convert chm files to HTML or PDF files
  9. ubantu中rpm转换成deb(软件包格式)
  10. Visual Studio 2013 突然不高亮,编译报错
  11. java 华氏度_在Java中将华氏度转换为摄氏温度[重复] - java
  12. 各j2ee web层框架比较(转)
  13. 185. 部门工资前三高的所有员工(重要)
  14. pages.json tabBar[‘list‘][2][‘pagePath‘] “pages/contact/contect“ 需在 pages 数组中
  15. 详解myeclipse和maven的clean和build
  16. SQL server 升序与降序
  17. 基于android的手机掌上购物
  18. 微信小程序踩坑(2):开发工具更新后报“VM110:5 appJSON[tabBar][borderStyle] 字段需为 black 或 white”错误
  19. 第十七届全国大学生智能车竞赛山东赛区比赛成绩
  20. 关于WEB端实现电子海图研究二GeoServer

热门文章

  1. 大数据-09-Intellij idea 开发java程序操作HDFS
  2. 【Android】可以下拉刷新的webview,使你的webview效果更加好看,封装自己的WebView...
  3. Java编程的逻辑 (36) - 泛型 (中) - 解析通配符
  4. Python回顾与整理1:Python基础
  5. 三个打印函数printf()/sprintf()/snprintf()区别
  6. Oracle init.ora常用配置详解
  7. 内功重修之数据结构----数组
  8. hostswap dcevm
  9. mysql常见报错解决办法
  10. @interface CTDataFactoryViewController : CTMessageViewController