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短语以及 ...
随机推荐
- Dockerfile 语法与常用命令
转发请注明出处: 一.Dockerfile 核心语法规则 指令大写:所有指令必须大写(如 FROM, RUN) 顺序执行:指令按顺序从上到下执行 分层构建:每条指令生成一个镜像层,修改上层不会影响下层 ...
- Tauri跨端笔记实战(1) - 从零打造一款跨端的 AI 笔记
前言 Tauri 跨端笔记实战项目是基于 Notegen 开源项目,本系列深度解析如何运用Tauri框架开发跨平台AI笔记应用.涵盖核心技术选型.架构设计.典型场景开发及常见问题解决方案,通过代码级演 ...
- C# 中比较实用的关键字,基础高频面试题!
前言 在C#编程中关键字是构建逻辑和实现功能的基石,它承载着编程语言的语法规则和编程智慧.熟练掌握这些基础高频关键字对提升编程能力和面试表现至关重要,它们是日常开发和解决复杂问题的关键. DotNet ...
- WinDebug查看C#程序运行内存中的数据库连接字符串
真巧,昨天刷到了大佬"一线码农"的视频,大概就是讲的有人找他破解一个混淆加密的数据库连接字符串,然后大佬也提供了方案就是用WinDebug查看内存中的数据.这其实本质上就是一个用W ...
- sonarqube+gitlab+jenkins+maven集成搭建(一)
一SonarQube介绍SonarQube 是一个开源的代码分析平台,用来持续分析和评测代码的质量,支持检测 Java . JavaScript .C#.C.C++ 等二十几种编程语言.通过 Sona ...
- OpenStack 全套搭建部署指南(基于 Kolla-Ansible)
一.环境准备 1. 硬件要求 控制节点:至少 4 核 CPU,8GB 内存,100GB 磁盘(推荐 SSD). 计算节点:根据虚拟机需求调整,建议 8 核 CPU,16GB 内存,200GB+ 磁盘. ...
- Spring基于注解的事务管理
Spring基于注解的事务管理 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- Tableau 我常用函数整理
日期函数 dateadd datedadd (date_part, interval, date) 表示在日期 date 的基础上, 以date_part 为单位, 与之间隔 interval的日期 ...
- JAVA 24 环境安装与配置
JAVA 24 环境安装与配置 一.Java Downloads Java 下载(Windows x64) https://www.oracle.com/java/technologies/downl ...
- Go语言自定义类型
Go语言与C/C++类似,C++可通过typedef关键字自定义数据类型(别名.定义结构体等),Go语言则通过type关键字可实现自定义类型的实现 1.自定义类型格式 用户自定义类型使用type,其语 ...