ABAP基础一:ALV样例
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样例的更多相关文章
- Swift语言 简明基础 代码演示样例
		
开发环境: Mac.Xcode6.0 下面内容均可创建ios common line项目来測试 1.Hello World演示样例 使用xcode创建新的common line项目,查看主文件main ...
 - C#基础概念 代码样例
		
C# int与string一起操作时注意 1 int a1= 1; 2 string a2= "2"; 3 Console.WriteLine(a1+a2); 4 Console. ...
 - Scala基础:模式匹配和样例类
		
模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...
 - JDBC连接MySQL数据库及演示样例
		
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
 - java多线程样例
		
这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别: package debug; import java.io.*;import java.lang.Thread; class My ...
 - 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)
		
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...
 - JavaFX 简单3D演示样例
		
从Java8開始,在JavaFX中便添加了3D部分的内容,包含Camera,Material,Light,Shape3D等基础内容. 当然,JavaFX 3D应该是OpenJFX里眼下正在补充和完好的 ...
 - 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV
		
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...
 - 第一个Angular2的样例
		
欢迎跟我一起学习Angular2 本文根据angular2官网手动敲码得来: 本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 - 开发环境搭建 - 配 ...
 - Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
		
转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...
 
随机推荐
- 包装类--java进阶day05
			
1.包装类 比如要让s+100,输出223.如果直接相加,结果是123100,这时就可以将s转换为包装类,然后再用包装类进行相加 2.包装类类型 3.手动拆/装箱 我们这里只介绍Integer,其他包 ...
 - 话说Hangfire
			
参考文档 www.hangfire.io github.com/HangfireIO/Hangfire .NET Core开源组件:后台任务利器之Hangfire
 - OpenEuler RISC-V 上跑bitcoin(实战版)
			
不久前刚在OpenEuler 24.09 RISC-V上部署了 bitcoin,不过还没跑起来,这次我打算在这个环境下面运行一些应用服务,体验一下 OERV 的开发感觉. 编译出来的 bitc ...
 - 一次windows下使用cmake遇到的问题
			
背景 在windows下的cmake和mingw提供的make,在windows环境下进行了简单尝试,结果发现make的时候失败: #include <iostream> int main ...
 - WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?
			
什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据.WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是objec ...
 - eolinker校验规则之 Json Path定位:返回值内有多项同类参数,检验其中一个参数值
			
比如创建商品后,查询商品是否生成,执行完创建商品接口后就需要再执行查询商品接口. 查询接口查询出来的数据可能包括所有商品数据或者有同名商品数据,所有整个返回结果内可能包含多个同名不同商品id的数据 往 ...
 - 在Avalonia/C#中使用依赖注入过程记录
			
前言 使用依赖注入可以让我们的程序变得更加好维护与测试. 今天分享的是在Avalonia/C#中使用依赖注入. 我准备了一个简单的不使用依赖注入与使用依赖注入的demo. 该demo已上传至GitHu ...
 - React项目报错:Element type is invalid: expected a string可能的原因
			
React项目报错:Element type is invalid: expected a string 起因:React使用Antd组件库,因为某些原因实在用不下去了,代码不变直接改成Tdesig ...
 - 从零开始:基于CUDA 12.6的YOLOv5模型训练实战(RTX 2050显卡全流程)
			
基于cuda12.6训练yolov5模型 前面完成了使用CPU调用yolov5s模型进行识别车辆,现在想训练自己的模型进行目标识别,使用CPU效率太低,尝试使用GPU加速的Pytorch,再重新整理了 ...
 - 最小生成树 & 严格次小生成树
			
最小生成树 何为最小生成树? 有一类问题:给定一张图,可以删除若干条边,在不改变连通性(一般是全联通)的情况下,权值和最小的方案是什么?没错,这就是最小生成树问题(MST问题).那么基本性质其实连聪明 ...