ABAP ALV报表开发实例

ABAP ALV报表开发实例
ABAP ALV报表开发实例

ALV Report是SAP中一种常见的报表展现形式,它可以标准化、简单化R/3系统中的表单,可以提供给用户一个统一的表单格式以及用户接口。ALV既能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST)在这里我给初学者示范一个实例,讲讲abap开发报表的简单过程。程序的正确与否我们不与讨论,我们只关心这个程序的编写过程。

首先,在任何程序的开始阶段,我们都要确定将会用到的表。我们所讲的这个程序是查询采购订单是否完成的。将会用到以下三个表:EKKO,EKPO,EKET。

程序的开头为:

REPORT TEST.

TABLES: EKKO,EKET,EKPO.

现在我们已经定义了所要用到的表,接下来的工作就是定义内表和数据。内表是

用来存储我们从上述三个表中查询到的数据。相关定义如下:

DATA: BEGIN OF ITAB OCCURS 0,

EBELN LIKE EKKO-EBELN,

MENGE LIKE EKPO-MENGE,

WEMNG LIKE EKET-WEMNG,

END OF ITAB.

现在我们已经定义完了内表ITAB。接着我们该定义数据了。数据就像C语言里的

常量。其相关定义如下:

DATA: MATNR LIKE EKPO-MATNR,

MENGE LIKE EKPO-MENGE,

WEMNG LIKE EKET-WEMNG,

EBELN LIKE EKPO-EBELN.

到这里我们已经把程序里要用到的数据和内表都定义好了。接着我们要做的工作

就是选择屏幕。所谓选择屏幕是指程序运行时,你要从屏幕上输入的内容。比如

说一个程序运行时,你输入一个物料号,就可以得到该物料的当前的库存数,那

你就要编写一个屏幕以供查询者输入查询的条件。其相关定义如下:

SELECT-OPTIONS: EBELN1 FOR EKKO-EBELN,

BEDAT FOR EKKO-BEDAT,

EKGRP FOR EKKO-EKGRP.

PARAMETERS: R1 RADIOBUTTON GROUP RADI,

R2 RADIOBUTTON GROUP RADI,

R3 RADIOBUTTON GROUP RADI.

现在我们已经完成了程序的前期准备,接着就开始真正的到表里查询我们需要的相关数据了。其代码如下:

SELECT K~EBELN

INTO CORRESPONDING FIELDS OF TABLE ITAB

FROM EKKO AS K

WHERE K~EBELN IN EBELN1

AND K~BEDAT IN BEDAT

AND K~EKGRP IN EKGRP.

LOOP AT ITAB.

SELECT SUM( MENGE ) INTO ITAB-MENGE

FROM EKPO

WHERE EBELN EQ ITAB-EBELN.

MODIFY ITAB.

ENDLOOP.

LOOP AT ITAB.

SELECT SUM( WEMNG ) INTO ITAB-WEMNG

FROM EKET

WHERE EBELN EQ ITAB-EBELN.

MODIFY ITAB.

ENDLOOP.

然后我们需要定义输出界面。把我们查询到的数据输出时要有一个输出的格式,这样大家看起来才会方便。代码如下:

TOP-OF-PAGE .

WRITE: /'采购凭证号',22 '物料号码',

47 '采购订单数量',77 '收到货物数量',

95 '完成标志'.

ULINE AT /1(130).

END-OF-PAGE .

START-OF-SELECTION.

最后就是把我们查到的数据输出了。其实我举的这个程序到这一步时穿插了

一些查询,所以比较长。代码如下:

IF R1 = 'X'.

LOOP AT ITAB.

SELECT S~MATNR S~MENGE P~WEMNG S~EBELN

INTO (MATNR, MENGE, WEMNG, EBELN)

FROM EKPO AS S INNER JOIN EKET AS P

ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN WHERE S~EBELN = ITAB-EBELN.

IF ITAB-MENGE > ITAB-WEMNG.

WRITE: /2 EBELN,23 MATNR,41 MENGE,

71 WEMNG,97 '否'.

ULINE AT /1(130).

CLEAR: EBELN,MATNR,MENGE,WEMNG.

ENDIF.

ENDSELECT.

ENDLOOP.

ELSEIF R2 = 'X'.

LOOP AT ITAB.

SELECT S~MATNR S~MENGE P~WEMNG S~EBELN

INTO (MATNR, MENGE, WEMNG, EBELN)

FROM EKPO AS S INNER JOIN EKET AS P

ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN WHERE S~EBELN = ITAB-EBELN.

IF ITAB-MENGE <= ITAB-WEMNG.

WRITE: /2 EBELN,23 MATNR,41 MENGE,

71 WEMNG,97 '是'.

ULINE AT /1(130).

CLEAR: EBELN,MATNR,MENGE,WEMNG.

ENDIF.

ENDSELECT.

ENDLOOP.

ELSE.

LOOP AT ITAB.

SELECT S~MATNR S~MENGE P~WEMNG S~EBELN

INTO (MATNR, MENGE, WEMNG, EBELN)

FROM EKPO AS S INNER JOIN EKET AS P

ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN WHERE S~EBELN = ITAB-EBELN.

IF ITAB-MENGE > ITAB-WEMNG.

WRITE: /2 EBELN, 23 MATNR,41 MENGE,

71 WEMNG,97 '否'.

ULINE AT /1(130).

CLEAR: EBELN,MATNR,MENGE,WEMNG.

ENDIF.

ENDSELECT.

ENDLOOP.

ENDIF.

LOOP AT ITAB.

IF R3 = 'X' AND ITAB-MENGE <= ITAB-WEMNG.

SELECT S~MATNR S~MENGE P~WEMNG S~EBELN

INTO (MATNR, MENGE, WEMNG, EBELN)

FROM EKPO AS S INNER JOIN EKET AS P

ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN WHERE S~EBELN = ITAB-EBELN.

WRITE: /2 EBELN,23 MATNR,41 MENGE,

71 WEMNG,97 '是'.

ULINE AT /1(130).

CLEAR: EBELN,MATNR,MENGE,WEMNG.

ENDSELECT.

ENDIF.

ENDLOOP.

这时程序就结束了。其实举这个例子是想让大家知道ABAP开发报表的一个常规流程,并不是讲什么技巧之类的,希望能对初学者有点用。抛砖引玉!

cognos报表知识整理

Cognos报表—知识整理 一、提示页自动加载 1、功能需求背景 华中电网概况报表首页需要有日期参数,但是每次进入首页时出现日期选择框影响美观,所以为其增加提示页面,但根据要求不能增加提示页面,所以设计出提示页面自动加载。通俗的讲就比如:出现提示页面,电脑自动点击确定进入主页面…… 2、功能实现方法 步骤1: 新建提示页面,新页面中内容包括:onload项目、完成按钮、日期提示框以及针对提示框的html项目。如下图1 图1 步骤2: Onload项目中函数:详见图1

二、进入页面后自动刷新一次 1、功能需求背景 电网概况报表电厂容量分析主页面中,需要自动根据日期刷新一次页面(具体原因参见三、特殊的日期过滤) 2、功能实现方法 步骤1: Onload项目加载函数,如图2 图2 步骤2: Js中函数新加一行代码,如图3 图3

3、可参考报表 电网概况报表>>1.电厂容量分析 三、特殊的日期过滤 1、功能需求背景 电网概况中发电情况包括水、火、风三种发电方式,在数据库中体现即为水(火、风)电机组管理(参数)表。根据用户要求,需要对全网水(火、风)当年新投机组容量等进行数据统计, 2、设计思想 1)将水、火、风机组管理表分别对应查询中取相同数据项,为U联做准备。 2)在三个查询中新建“投运年”数据项,取得机组投运年份。表达式:substr(【投运日期】,1,4) 3)将三个查询进行U联,给U联后的查询设置过滤条件,如图4 图4 3、出现问题分析 根据2、设计思想中进行操作,报表验证报错,不能对substr进行集操作,经查询得知,dm 数据库不支持在两层(原层和U联层)查询中同时使用substr。 4、新的解决方法 思路如下图:

Cognos制作报表--基本范例

1COGNOS的使用 1.1模型定义 1,打开Frame Manager程序,如下图: 2,新建一个项目,建完后,打开该项目,如下图:

3,在界面左边中选择“Packages”,然后单击右键新建一个包。按照提示一步步做,其中有一步是从数据库的表选所要用到的表,打勾为选用。 4,点击”Diagram”显示表,但表之间还没有建立联接关系,通过建立各表关系后如下图

5,然后将该包发布,点击右键该包选择“Publish Package”将其发布。 1.2模型的物理和逻辑定义 1,模型定义的规范:将模型分为2个部分,分别为物理层和逻辑层,物理层为从数据源引入表的物理定义和连接关系,逻辑层为业务视角下的逻辑定义。 2,物理层的建立:根据数据分析,设计模型中需创建的物理表,以便尽可能的提高查询语句的运行效率(比较理想的结构是星形结构,一个中间表和多个物理维表)。 在根名字空间(和数据源同名)下,建立一个名为物理层的目录,在物理层文件夹下执行Run Metedate Wizard将数据源中相关的物理表引入这个目录,然后将这些表建立连接关系,建议不要有Orphan表。如下图:

3,逻辑层的定义:在根名字空间下,建立一个名为逻辑层的目录,在逻辑层文件夹下生成Query Subject,Query Subject的字段都是根据业务逻辑从物理层从引入,建议字段名都为中文。逻辑层中的表为事实表和维表的结构,在事实表中包含维度的编码值和指标的值,维表中包括每个维度上编码值和其名称的对应关系。也可以根据需要建立Regular Dimension(3.4说明),在逻辑层中不要建立逻辑表之间的关系。如下图:

Cognos开发之Cube

Cognos 8开发之Cube V1.0

知识成果简要信息表

第一章 Cognos简介 1.概述 Cognos展现的报表基于统一的元数据模型。统一的元数据模型为应用提供了统一、一致的视图。用户可以在浏览器中自定义报表,格式灵活,元素丰富,而且可以通过Query Studio进行即席的开放式查询。Cognos还具有独特的穿透钻取(roll up和drill down)、切片(slice)和切块(dice)、以及旋转(pivot)等功能,使分析人员、管理人员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解,有效地将各种相关的信息关联起来,使用户在分析汇总数据的同时能够深入到自己感兴趣的细节数据中,以便更全面地了解情况,做出正确决策。 Cognos强大的报表制作和展示功能能够制作/展示任何形式的报表,其纯粹的Web界面使用方式又使得部署成本和管理成本降到最低。同时Cognos还可以同数据挖掘工具、统计分析工具配合使用,增强决策分析功能。进行合作,推动以AIX 技术为中心的创新,同时开发、测试和使用各种用于支持AIX 操作系统的新应用和中间件。 2 . Cognos 8 的功能组件介绍: Cognos 8 的功能组件分为服务器端和客户端两部分,服务器端是基于SOA构架的Cognos 8服务,以Web Service的方式接受和处理用户请求;客户端程序是开发人员使用,用于构建CUBE 和Cognos 8元数据的工具,它们分别是:TransFormer 和FrameWork。用户制作、浏览报表和业务分析都是基于浏览器的,不需要安装插件或客户端,在浏览器端,用户可以访问以下组件:Report Studio 、Query Studio 、Analysis Studio。同时用户也可以基于Cognos提供的SDK开发应用直接访问Cognos 8 服务。 Cognos 8产品结构图:

Cognos报表开发技巧整理

1实现行属性的目录树展开功能。 1.1在LIST报表中的现实 1.拖入6个字段,并且对产品系列、产品类型分组,如下图: 2.添加产品系列、产品类型的页眉

3.拆分产品系列、产品类型的单元格 4.将产品系列、和产品类型的汇总拖到产品名称处

5.删除产品系列,产品类型 6.打开列表的锁

7.按住CTRL,拖动数量、单位成本、单价到产品类型,产品系列的页眉处 8.在report page中插入HTML控件,然后拷贝如下代码进去,下面代码主要是定义了两个函数,一个用于目录树的展开与缩进,另一个用于页面初始化时隐藏一些数据,下面代码只支持到2层目录,更详细的含义可参考的在交叉表中实现目录树功能的注释。 代码如下: 8.拖入一个HTML项目插入到运营商单元格前面,修改成数据项,并修改表达式 运营商中HTML控件代码如下: ''+ [orc82].[D_OPERATIONROLES].[运营商所在地] + '' 9.删除掉运营商所在地 10.设置运营商的填充为左侧20 11.增加图片 增加树形的图片,空白图片到cognos相应的图片目录 12. 增加列表页脚 (注意,这里的HTML控件一定要放入表页脚里面,否则不能实现隐藏数据的功能),并拷贝HTML代码,删除掉列表页脚几个字 代码如下:

Cognos.Tableau.Smartbi开发报表简单对比

Cgonos/Tabeau/SmartBI报表开发对比 1Cognos版 1.1页面最终效果 1.2报表服务 1.2.1开发流程 1.创建数据模型FM 通过Framework Manager创建数据模型,生成数据包后发布到服务器,数据源需要通过cognos管理门户事先创建。 2.选择相应的报表数据包,开发报表

3.预览页面效果 需要运行才能查看报表效果,对于报表运行结果,暂不支持任何操作,对于点击表头排序、固定列标题等功能,需要通过第三方开发进行整合,比如javascript语言或者通过cognos SDK进行二次开发实现。 4. 开发完成后保存即可发布到服务器。 只能通过URL访问,暂无其他方式。 1.2.2工具对比 1.工具相对专业化,包括过滤、排序等简单操作,一般业务人员无法快速操作,且cognos不支持在生成的页面进行个性化操作,只能通过编辑页面进行修改。 2.满足复杂数据的处理,同时支持调用存储过程等。 3.支持复杂报表的开发。 2Tableau版 2.1页面最终效果

2.2报表服务 2.2.1开发流程 1.新建Oracle数据源,配置服务器和服务(支持的数据源服务器类型最多)。 2.选择相应的数据表或视图,建立连接关系 3.创建工作表,设置筛选器,样式,层级结构等等

4.预览页面效果 结果页面可进行如下操作:点击表头排序、编辑列名、隐藏列、逐层钻取。 5.发布服务器,通过URL跟其他应用集成,也可用Tableau Reader进行阅读。 2.2.2工具对比 1.所见即所得,报表开发简洁,从创建数据源到表关系创建到最后的报表开发完成,发布到服务器,整个流程统一通过Tableau桌面端完成。 2.更灵活的展现效果,用户可在浏览过程中根据自己喜好进行效果编辑。3.数据处理功能相对薄弱,但支持数据提取。 4.对于复杂的报表,需要创建大量的工作表和数据源(一个工作表只能有一个图元),而对于cognos却能够在一个报表页面,通过一个数据源实现。

最新Cognos8开发示例

Cognos8开发示例 1 2 报表开发示例 3 数据准备: 4 准备业务元数据->分主题建目录->建立表连接->数据处理->发布数据5 包 6 一使用FM组织数据 导入业务元数据,同《cognos使用指南_多维分析.DOC》之使用FM制作IQD 7 8 文件的1-6步; 9 1、可以新建一文件夹,专门存放某一报表所需的query subject; 10 11 2、在此文件夹下创建query;

12 13 方法一:在现有模型下直接拖拽字段; 14 15 从不同的表里拖入想要的字段;

16 17 进入“Test-》Test sample”可以测试数据是否准确; 18 19 注意:如果用到的表之间没关联,则会出现如下错误; 20 21 解决办法:两两表间分别建立连接; 22 比如:dimclass与dimrisk是一对多的关系:

23 24 而dimrisk与dimkind也是一对多的关系: 25 再test,OK。 26 27

28 方法二:手工写SQL; 29 2、选data source项; 30 31 选择已经建好的data source,可以随意添加几个字段,可以不加过滤及表间32 连接条件,直接完成,点开新建的query,修改sql语句; 33 34 35 3、建一主表,方法同上。打包发布即可。 36 37

二把cube作为数据源生成报表 38 39 打开analysis studio,选择一个cube数据包,拖拽出想要的数据,选择“文40 件-》在report studio中打开”,进而调整整体图表布局; 41 42 打开后,如下图所示;

相关文档
最新文档