REPORT zly_report.

*********Report Demo****************************************
*本程序主要将普通的ALV报表做拆分讲解
*一个简单的ALV包括以下一个部分
*1.数据定义部分:这部分用来定义全局变量,包括表,结构,工作区,宏,变量等
*2.选择屏幕定义部分:这部分是用来定义选择屏幕,包括屏幕的布局等
*3.数据处理部分:这部分包括数据查询和数据处理两块,根据不同的需求和查询条件将查询结果处理,最红汇总到需要展示的内表种
*4.字段目录设置:这部分是设置ALV需要展示的字段,字段描述以及alv的属性等
*5.数据展示:调用alv函数,展示内表数据
*6.功能处理:对ALV特定功能处理 *********数据定义部分*************************************** TABLES:zhsb_order_index."用tables关键字定义一个全局的工作区/结构
TYPES:BEGIN OF ty_show,
guid TYPE crmt_object_guid,
object_id TYPE crmt_object_id_db,
process_type TYPE crmt_process_type,
description TYPE crmt_process_description,
posting_date TYPE crmt_posting_date,
sales_org TYPE crmt_sales_org,
created_by TYPE crmt_created_by,
provider TYPE bu_partner,
stat_user TYPE crm_j_status,
zzzserialno TYPE zserialno,
zzzmodeno TYPE zmodeno,
zzfld00000n TYPE zdtel00003y,
name_org1 TYPE bu_nameor1,
name_org2 TYPE bu_nameor2,
country TYPE land1,
region TYPE regio,
city1 TYPE ad_city1,
street TYPE ad_street,
END OF ty_show,
BEGIN OF ty_but000,
partner TYPE bu_partner,
name_org1 TYPE bu_nameor1,
name_org2 TYPE bu_nameor2,
addrnumber TYPE ad_addrnum,
END OF ty_but000,
BEGIN OF ty_adrc,
addrnumber TYPE ad_addrnum,
country TYPE land1,
region TYPE regio,
city1 TYPE ad_city1,
street TYPE ad_street,
END OF ty_adrc. DATA:gt_show TYPE TABLE OF ty_show, "展示的内表
gw_show LIKE LINE OF gt_show, "数据处理对应的工作区
vt_show TYPE TABLE OF ty_show, "临时表
gt_but000 TYPE TABLE OF ty_but000, "相关表
gw_but000 LIKE LINE OF gt_but000, "相关表的工作区
gt_adrc TYPE TABLE OF ty_adrc, "相关表
gw_adrc LIKE LINE OF gt_adrc. "相关表的工作区 DATA:gt_fieldcat TYPE lvc_t_fcat, "字段目录内表
gs_fieldcat LIKE LINE OF gt_fieldcat, "字段目录工作区
ls_layout TYPE lvc_s_layo. "布局 DATA:lr_grid TYPE REF TO cl_gui_alv_grid. DATA:gt_event TYPE slis_t_event,
gw_event LIKE LINE OF gt_event. DATA:gw_grid_setting TYPE lvc_s_glay. DEFINE append_fieldcat .
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1."字段
gs_fieldcat-scrtext_l = &2."显示的描述
gs_fieldcat-outputlen = &3."输出长度
gs_fieldcat-no_zero = &4."不显示前导0
* gs_fieldcat-just = 'C'."居中对齐,R,L
IF &1 = 'ZZZSERIALNO'.
gs_fieldcat-edit = 'X'.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION. *********选择屏幕************************************************ SELECTION-SCREEN:BEGIN OF BLOCK blk01 WITH FRAME TITLE text-001.
SELECT-OPTIONS:s_id FOR zhsb_order_index-object_id,
s_type FOR zhsb_order_index-process_type,
s_date FOR zhsb_order_index-posting_date,
s_sale FOR zhsb_order_index-sales_org.
SELECTION-SCREEN END OF BLOCK blk01.
SELECTION-SCREEN:BEGIN OF BLOCK blk02 WITH FRAME TITLE text-002.
SELECT-OPTIONS:s_prv FOR zhsb_order_index-provider.
SELECTION-SCREEN END OF BLOCK blk02. START-OF-SELECTION.
**********数据处理*************************************************
PERFORM frm_get_data."数据查询
PERFORM frm_pro_data."数据处理 PERFORM frm_set_field."设置字段目录,布局 PERFORM frm_show. *END-OF-SELECTION."非逻辑数据库不需要 *&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
"取主表数据
SELECT guid
object_id
process_type
description
posting_date
sales_org
created_by
provider
stat_user
zzzserialno
zzzmodeno
zzfld00000n
INTO CORRESPONDING FIELDS OF TABLE gt_show
FROM zhsb_order_index
WHERE object_id IN s_id
AND process_type IN s_type
AND posting_date IN s_date
AND sales_org IN s_sale
AND provider IN s_prv. "临时表数据准备
vt_show[] = gt_show[].
SORT vt_show BY provider.
DELETE ADJACENT DUPLICATES FROM vt_show COMPARING provider.
DELETE vt_show WHERE provider = ''. IF vt_show[] IS NOT INITIAL.
"取副表数据
SELECT but000~partner
but000~name_org1
but000~name_org2
but020~addrnumber
INTO TABLE gt_but000
FROM but000
INNER JOIN but020
ON but000~partner = but020~partner
FOR ALL ENTRIES IN vt_show
WHERE but000~partner = vt_show-provider. IF gt_but000[] IS NOT INITIAL.
"取副表数据
SELECT addrnumber
country
region
city1
street
INTO TABLE gt_adrc
FROM adrc
FOR ALL ENTRIES IN gt_but000
WHERE addrnumber = gt_but000-addrnumber.
ENDIF. REFRESH:vt_show[].
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_pro_data . LOOP AT gt_show INTO gw_show.
READ TABLE gt_but000 INTO gw_but000 WITH KEY partner = gw_show-provider.
IF sy-subrc = 0.
gw_show-name_org1 = gw_but000-name_org1.
gw_show-name_org2 = gw_but000-name_org2.
READ TABLE gt_adrc INTO gw_adrc WITH KEY addrnumber = gw_but000-addrnumber.
IF sy-subrc = 0.
gw_show-country = gw_adrc-country.
gw_show-region = gw_adrc-region.
gw_show-city1 = gw_adrc-city1.
gw_show-street = gw_adrc-street.
ENDIF.
ENDIF.
MODIFY gt_show FROM gw_show.
ENDLOOP. ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_field .
append_fieldcat:'OBJECT_ID' '服务单号' 10 'X',
'PROCESS_TYPE' '单据类型' 4 '',
'DESCRIPTION' '单据描述' 40 '',
'POSTING_DATE' '创建日期' 10 '',
'SALES_ORG' '销售组织' 14 '',
'CREATED_BY' '创建用户' 12 '',
'PROVIDER' '服务商' 10 'X',
'STAT_USER' '单据状态' 5 '',
'ZZZSERIALNO' '序列号' 30 '',
'ZZZMODENO' '型号' 40 '',
'ZZFLD00000N' '服务类型' 2 '',
'NAME_ORG1' '服务商名称1' 40 '',
* 'NAME_ORG2' '服务商名称2' 40 '',
'COUNTRY' '国家' 3 '',
'REGION' '省份' 3 '',
'CITY1' '城市' 40 '',
'STREET' '街道' 60 ''. ls_layout-cwidth_opt = 'X'. "优化列宽选项是否设置
ls_layout-zebra = 'X'. gw_event-form = 'DATA_CHANGED_METHOD'.
gw_event-name = 'DATA_CHANGED'.
APPEND gw_event TO gt_event. gw_grid_setting-edt_cll_cb = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_show .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PRM_SET_STATUS'
i_callback_user_command = 'PRM_USER_COMMAND'
is_layout_lvc = ls_layout
it_fieldcat_lvc = gt_fieldcat[]
i_grid_settings = gw_grid_setting
* I_GRID_TITLE = LV_TITLE
i_default = 'X'
i_save = 'A'
it_events = gt_event[]
TABLES
t_outtab = gt_show
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM prm_set_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'ZSTAT'. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid. ENDFORM.
FORM prm_user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield. CHECK p_ucomm = '&IC1'. READ TABLE gt_show INTO gw_show INDEX p_selfield-tabindex.
IF sy-subrc = 0.
ENDIF.
ENDFORM.
FORM data_changed_method
USING pa_data_changed TYPE REF TO cl_alv_changed_data_protocol .
DATA:
l_it_data TYPE lvc_t_modi,
l_wa_data LIKE LINE OF l_it_data.
FIELD-SYMBOLS:<lv_field> TYPE any. l_it_data = pa_data_changed->mt_mod_cells. CHECK l_it_data IS NOT INITIAL. LOOP AT pa_data_changed->mt_mod_cells INTO l_wa_data.
READ TABLE gt_show INTO gw_show INDEX l_wa_data-row_id.
IF sy-subrc = 0.
ASSIGN COMPONENT l_wa_data-fieldname OF STRUCTURE gw_show TO <lv_field>.
IF sy-subrc = 0.
<lv_field> = l_wa_data-value.
MODIFY gt_show FROM gw_show INDEX l_wa_data-row_id.
ENDIF.
ENDIF.
ENDLOOP. CALL METHOD lr_grid->refresh_table_display.
ENDFORM. " DATA_CHANGED_METHOD

ABAP基础一:ALV样例的更多相关文章

  1. Swift语言 简明基础 代码演示样例

    开发环境: Mac.Xcode6.0 下面内容均可创建ios common line项目来測试 1.Hello World演示样例 使用xcode创建新的common line项目,查看主文件main ...

  2. C#基础概念 代码样例

    C# int与string一起操作时注意 1 int a1= 1; 2 string a2= "2"; 3 Console.WriteLine(a1+a2); 4 Console. ...

  3. Scala基础:模式匹配和样例类

    模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...

  4. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  5. java多线程样例

    这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别: package debug; import java.io.*;import java.lang.Thread; class My ...

  6. 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  7. JavaFX 简单3D演示样例

    从Java8開始,在JavaFX中便添加了3D部分的内容,包含Camera,Material,Light,Shape3D等基础内容. 当然,JavaFX 3D应该是OpenJFX里眼下正在补充和完好的 ...

  8. 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  9. 第一个Angular2的样例

    欢迎跟我一起学习Angular2 本文根据angular2官网手动敲码得来: 本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 - 开发环境搭建 - 配 ...

  10. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...

随机推荐

  1. DeepSeek 3FS 与 JuiceFS:架构与特性比较

    近期,DeepSeek 开源了其文件系统 Fire-Flyer File System (3FS),使得文件系统这一有着 70 多年历时的"古老"的技术,又获得了各方的关注.在 A ...

  2. 使用`forEach`方法前后的代码逐步简化过程

    简化前的完整循环代码 首先,我们使用传统的for-each循环遍历HashMap: import java.util.HashMap; import java.util.Map; public cla ...

  3. 《机器人SLAM导航核心技术与实战》第1季:第0章_SLAM发展综述

    <机器人SLAM导航核心技术与实战>第1季:第0章_SLAM发展综述 视频讲解 [第1季]0.第0章_SLAM发展综述-视频讲解 [第1季]0.1.第0章_SLAM发展综述-梳理定位导航技 ...

  4. AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新)

    AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新) 导言 本文作为AI可解释性系列的第二部分,旨在以汉语整理并阅读归因方法(Attr ...

  5. bash极简教程

    今天看到消息,来自大神阮一峰的<bash脚本教程>开源发布了, 我也借此机会来总结个bash极简教程. 本文是一个更加简化的<bash极简教程>,告诉你什么时候需要使用bash ...

  6. restTemplate 使用问题小记

    使用restTemplate在后端进行接口转发, 期间包括文件上传, 预览和下载. 还有一些字符串或css/js文件的读取. 1. 文件上传 参考: RestTemplate转发MultipartFi ...

  7. NGUI和UGUI的区别

    1.NGUI的渲染前后顺序是通过Widget的Depth,而UGUI渲染顺序根据Hierarchy的顺序,越下面渲染在顶层 2. NGUI支持图文混排,UGUI暂未发现支持此功能. 3.UGUI没有 ...

  8. Ruby+Selenium+testunit web自动化demo

    1.安装对应库 使用RubyMine新建项目打开终端安装对应库 gem install selenium-webdriver gem install test-unit 如果安装不成功,请切换到国内源 ...

  9. DIY记录之 USBasp

    序 笔者在上网浏览时发现了这个项目[0].刚好另一个DIY会需要对Attiny85进行烧写,并且感觉自己做一个USBasp来干这个事比较有趣,于是就买材料打板子准备DIY一个USBasp.这篇随笔是用 ...

  10. Cobalt Strike基础

    Cobalt Strike基础 Staged(有阶段) 在有阶段的执行方式中,分为Stager和Stage两个阶段 Stager(初始执行载荷): ​ 定义:Stager是Stage 1,是一个较小的 ...