ABAP程序开发,经常会遇到报表开发需求。使用ABAP的Report类型程序开发报表十分便利,用很少的代码就可以快速开发出一个报表。这种报表需求,抛开各种细枝末节,都可以归结为“三步走”:1、选择屏幕;2、OPEN SQL;3、结果呈现。一般情况下,在编写报表之前,都是知道取数的表是哪个表的,但是,如果想要让用户输入取数的表,然后再从这个表里把所有数据都取出来,呈现在屏幕上,这样的需求,涉及到动态编程。因为报表运行前,并不知道会从哪个数据表里取数据,也就无法参照声明出用来存放数据的结构和内表,只有用户输入表名,点击报表运行以后,才会知道所需要的内表的结构信息,这些信息,需要动态的获取,并动态的声明出所需的内表,然后动态的取出数据存放在这个内表中,最后呈现在屏幕上。

 REPORT zm_test01.
 "选择屏幕提取一个用户输入的字符串
  DEFAULT 'sflight'.
 "r_dataob是一个数据引用,data类型。
 "<f_tb>为字段符号。可以指向任何内表。
 DATA r_dataob TYPE REF TO data.
 FIELD-SYMBOLS <f_tb> TYPE ANY TABLE.
 "错误处理用来处理用户输入的字符串不是数据字典里的内表的情况
 TRY .
     "定义错误类型
     DATA r_err TYPE REF TO cx_sy_create_data_error.
     "这里是关键,指向名称为用户输入的p_name的内表指针
     CREATE DATA r_dataob TYPE TABLE OF (p_name).
   CATCH cx_sy_create_data_error INTO r_err. "捕捉定义的错误类型
     DATA err_txt TYPE string.
     err_txt = r_err->get_text( ).
     WRITE: '不存在的表', err_txt.
     "使用EXIT关键字结束程序,从而下面的代码就不会继续执行了,
     "否则虽然捕捉到了错误,但是程序还会继续向下运行
     EXIT.
 ENDTRY.
 "将指针解引用,解引用后为其指向的内表,然后将字段符号<f_tb>指向这个内表
 "此时字段符号才会有值
 "之后需要用这个内表,只需要使用字段符号即可
 ASSIGN r_dataob->* TO <f_tb>.
 "在这个select语句中,p_name为用户输入的取数据的表,而<f_tb>字段符号为根据用户输入的字符串动态生成的内表。
 "注意在select语句中可以使用字段符号,但是不能直接把解引用放进来。也就是说,字段符号是很有必要的。
 SELECT * FROM (p_name) INTO TABLE <f_tb>.
 "使用savl快速构建报表简单呈现
 DATA r_alv_tb TYPE REF TO cl_salv_table.
 DATA r_alv_funclist TYPE REF TO cl_salv_functions_list.
 TRY.
     CALL METHOD cl_salv_table=>factory
       IMPORTING
         r_salv_table = r_alv_tb
       CHANGING
         t_table      = <f_tb>.
   CATCH cx_salv_msg .
 ENDTRY.
 r_alv_funclist = r_alv_tb->get_functions( ).
 r_alv_funclist->set_all( ).
 r_alv_tb->display( ).

ABAP笔记的更多相关文章

  1. ABAP(笔记)

    1.excel表格上传 *&---------------------------------------------------------------------* ** 程序名称:ZSD ...

  2. ABAP知识点笔记

    1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...

  3. SAP CRM 项目笔记(一) SOW(工作说明书)讨论

    前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...

  4. Jerry的ABAP原创技术文章合集

    我之前发过三篇和ABAP相关的文章: 1. Jerry的ABAP, Java和JavaScript乱炖 这篇文章包含我多年来在SAP成都研究院使用ABAP, Java和JavaScript工作过程中的 ...

  5. 使用ABAP批量下载有道云笔记中的图片

    Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建. 当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地.作为程序猿,我们不会去手动一张张下载.写个程序帮我们自动下载吧 ...

  6. N个小时学SAP ABAP

    接触SAP已将近3年了,期间ABAP资料也看了不少,都是东看一点.西看一点的,也没做个笔记之类的,很明显效果不是很好.今天突然间领悟到了一点:不能再这样漫无目的的学习了,应该一本书一本书的看,否则就太 ...

  7. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. Zedboard搭建Linux嵌入式环境

    ZYNQ是ARM硬核和PL软核的结合体,Xillybus官方为他开发了驱动套件Xillinux,赶快将开发板投入使用吧! 本随笔参考了众多博主和官方教程:(基本上就是把官方教程翻译了一遍,呵呵:)) ...

  2. Debian系统 + XFCE桌面初识,基础环境搭建

    有幸分享个人的Linux下的习惯配置,具体操作可能阐述得比较粗糙. 在图形化界面进行配置操作,十分简便舒心. Linux发行版:Debian9.5(Stretch) 桌面Sesion:XFCE4 一. ...

  3. linux 常用命令积累

    工作中常用的linux记录一下,方便查询使用 1.ln 创建连接 ,就是window上的快捷方式 创建软连接  ln -s 源文件 目标文件名   经常访问的文件夹(项目文件夹),在~创建一个软连很方 ...

  4. Ubuntu下部分Java软件字体渲染问题解决方法

    On ubuntu or in general Linux OS, fonts in some Java software(like Geogebra, Arduino) looks terriabl ...

  5. 同时兼容ie8 与ie11

    最近公司发文规定说程序要必须同时兼容ie8与ie11 下面是在修改程序时遇到的一些问题. 1:new Date 获取年的问题,在ie8及以下ie以下版本是可以用getYear()方法来获取年得到的数值 ...

  6. MVC中调用模态框之后导致JS失效

    今天在工作中碰到一个页面调用模态框之后,页面原来的JS失效的问题,由于前台经验较少,折腾了一天... 问题描述是这样,在页面,有两个下拉列表框A和B,做了下拉列表框联动,有一个button按钮会调用模 ...

  7. vb.net

    vb.net 教程: https://www.yiibai.com/vb.net/vb.net_overview.html vb.net 教程 https://www.w3cschool.cn/vb_ ...

  8. Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...

  9. 超详细SQLMap使用攻略及技巧分享

    sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限.它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数 ...

  10. Mysql ssl 连接

    在Azure创建了一个Mysql5.7服务,因为默认使用ssl连接,需要下载Azure的证书,并使用openssl生成客户端的证书.具体流程参考官方文档 大致步骤: 下载根证书, 安装openssl, ...