动态内表的建立与应用Word文件下载.docx

上传人:b****4 文档编号:16729839 上传时间:2022-11-25 格式:DOCX 页数:14 大小:21.03KB
下载 相关 举报
动态内表的建立与应用Word文件下载.docx_第1页
第1页 / 共14页
动态内表的建立与应用Word文件下载.docx_第2页
第2页 / 共14页
动态内表的建立与应用Word文件下载.docx_第3页
第3页 / 共14页
动态内表的建立与应用Word文件下载.docx_第4页
第4页 / 共14页
动态内表的建立与应用Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

动态内表的建立与应用Word文件下载.docx

《动态内表的建立与应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《动态内表的建立与应用Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

动态内表的建立与应用Word文件下载.docx

<

=boms-idnrk.

*---------------------------------------------------------------------*

*FORMget_data*

FORMget_data.

*SelectDatafromtable.

SELECT*INTOTABLE<

FROM(p_table).

ENDFORM.

*FORMwrite_out*

FORMwrite_out.

*Writeoutdatafromtable.

LOOPAT<

INTO<

DO.

ASSIGNCOMPONENTsy-index

OFSTRUCTURE<

TO<

IFsy-subrc<

>

0.

EXIT.

ENDIF.

IFsy-index=1.

WRITE:

ELSE.

ENDDO.

ENDLOOP.

这两天做了一个这样的需求,其中要求根据用户输入的工资项(T512W-LGART)查找数据,并输出到ALV,要求是输出跟着输入变。

由于工资项的配置信息可能会变,因此用于存储要显示的数据的内表就不能预先知道,因此不得不寻求动态内表的构建方法。

 

 

其实网上的例子也有不少,但是都缺少说明,折腾了一上午才弄明白一些,写出来与大家分享。

REPORT 

Z_DT2.

type-pools:

abap. 

*以t512w为例,构建一个动态内表

tables:

t512w.

*field-symbols是一个标志,你可以理解为一个指针,将来创建的内表就要通过它们来访问

[小于号]dyn_table>

typestandardtable,

[小于号]dyn_wa>

[小于号]dyn_field>

*这里定义了一个dy_table和一个dy_line类型是引用,但todata未能理解是什么意思,我觉得应该是说指向为空的意思

dy_line 

typereftodata,

*用于存储即将构建的动态内表结构

ifctypelvc_t_fcat,

xfctypelvc_s_fcat.

beginoft_lgartoccurs0,

LGARTliket512w-lgart,

endoft_lgart.

select-options:

S_LGARTFORt512w-lgart.

start-of-selection.

*首先从数据库中把符合用户输入的LGART填入内表,将来构建的动态内表每一列就是LGART中的每一行。

selectlgartintot_lgart-lgartfromt512wwherelgartins_lgartandMOLGA='

28'

appendt_lgart.

endselect.

*循环读取内表t_lgart,对于每行构建内表

loopatt_lgart.

*这里偷了个懒,因为工资项中会有/103这样的数据,而/是不能用左列明的,大家可以自己写一个替换逻辑,把/替换成_之类的字符。

checkt_lgart-lgart+0

(1)ne'

/'

*列名就用lgart值

xfc-fieldname=t_lgart-lgart.

xfc-datatype='

C'

xfc-inttype='

xfc-intlen=6.

xfc-decimals=0.

endloop.

*此处调用一个方法,这个方法用于构建动态内表,输入的就是要构建的结构,输出的就是一个dy_table,之前定义过,但是并不能直接访问。

callmethodcl_alv_table_create=>

EXPORTING

it_fieldcatalog=ifc

IMPORTING

ep_table 

=dy_table.

*设定<

指向dy_table

assigndy_table->

*下面这句建立了一个<

类型的工作区Workarea

createdatady_linelikelineof<

*同理设定指针

assigndy_line->

于是便动态的建立了一个内表和一个工作区,由于此方法建立的内表没有headerline,所以需要一个工作区。

下面是取数或者赋值的方法:

*此行中的xxxx1就是列名

ASSIGNCOMPONENTxxxx1OFSTRUCTURE<

*此行的作用就是给<

中的该列一个值

=xxxx2.

*用Append就可以把该行添加到表中了

APPEND<

如上所述,即可以动态构建内表,这种方法主要用于表结构无法确定有几列,几有哪些列,尤其与信息配置有关的时候,就只能用这种方法,否则配置一变,程序就不能用了。

才疏学浅,学习体会总结出来希望能对大家有所帮助,有不对的地方希望大家指正,向大家学习!

例子:

ZPSR026 

MESSAGE-ID 

zmps.

TYPE-POOLS:

slis.

*-- 

TABLSE

TABLES:

ZPST001, 

ZPST017 

 

BKPF.

DATA:

gt_fieldcat 

TYPE 

slis_t_fieldcat_alv,

gt_layout 

slis_layout_alv,

gt_sort 

slis_t_sortinfo_alv,

gt_events 

slis_t_event,

gt_list_top_of_page 

slis_t_listheader.

BEGIN 

OF 

Btab 

OCCURS 

0,

KOSTL 

ZPST001-KOSTL, 

"

연구소코드

GJAHR 

BKPF-GJAHR, 

회계연도

LTEXT 

CSKT-KTEXT, 

연구소이름

RVAMT 

ZPST017-RVAMT, 

입금액

COM 

I, 

제수량

PSPNR 

ZPST017-PSPNR,

END 

Btab.

DATA 

JTAB 

LIKE 

WITH 

HEADER 

LINE. 

BTAB에 

데타를 

최종가공

IT_ZPST001 

ZPST001 

LINE.

필드이름 

만들기위한 

변수들.

W_RVAMT 

STRING.

W_COM 

ALV 

헤더이름

C_RVAMT 

C_COM 

Z_KOSTL 

W_Amount 

C_ZYEAR 

Amount 

I. 

년도개수

date 

type 

string.

C_date 

=============동태적인 

itab선언=========

*type-pools:

standard 

table, 

itab구조

itab 

헤더

필드

dy_table 

ref 

to 

data,

data, 

xfc 

lvc_s_fcat, 

ifc 

lvc_t_fcat. 

列itab

====================================

SELECTION-SCREEN 

BLOCK 

b1 

FRAME 

TITLE 

text-001.

SKIP 

1.

SELECT-OPTIONS:

S_GJAHR 

FOR 

BKPF-GJAHR 

NO-EXTENSION.

b1.

AT 

SELECTION-SCREEN.

IF 

S_GJAHR-LOW 

'

0000'

AND 

S_GJAHR-HIGH 

message 

e143(zmps).

ELSEIF 

S_GJAHR-LOW.

CONCATENATE 

년'

INTO 

C_ZYEAR.

S_GJAHR-HIGH.

C_ZYEAR

SEPARATED 

BY 

~'

ENDIF.

========동태적인 

필드추가==================

출력시 

연구소명 

년도 

입금. 

입금....... 

입금

============================================

clear 

xfc.

xfc-fieldname 

KOSTL'

xfc-datatype 

='

CHAR'

xfc-intlen 

10.

append 

ifc.

LTEXT'

20.

DO 

TIMES. 

조회조건에 

따라 

입금과 

수량 

개수가 

변함

CLEAR 

W_COM.

W_RVAMT.

COM'

W_COM. 

수량

12.

RVAMT'

W_RVAMT. 

CURR'

ENDDO.

call 

method 

cl_alv_table_create=>

exporting

it_fieldcatalog 

ifc

importing

dy_table.

assign 

dy_table->

create 

data 

like 

line 

of 

dy_line->

START-OF-SELECTION.

PERFORM 

get_data.

SET_data. 

ALV에 

데타 

넣기

gt_layout.

gt_fieldcat.

comment_build 

USING 

gt_list_top_of_page.

eventtab_build 

gt_events.

GRID_list.

END-OF-SELECTION.

*&

---------------------------------------------------------------------*

Form 

GET_DATA

text

*----------------------------------------------------------------------*

-->

p1 

-- 

p2 

form 

GET_DATA 

SELECT 

FROM 

CORRESPONDING 

FIELDS 

TABLE 

BTAB

WHERE 

IN 

S_GJAHR.

SORT 

BTAB 

DESCENDING 

ASCENDING.

IT_ZPST001.

LOOP 

BTAB.

READ 

KEY 

BTAB-PSPNR.

sy-subrc 

0.

BTAB-KOSTL 

IT_ZPST001-KOSTL.

IT_ZPST001-KOSTL 

%'

Z_KOSTL.

SINGLE 

ltext 

cskt 

BTAB-LTEXT

kostl 

datbi 

EQ 

99991231'

BTAB-COM 

MODIFY 

ENDLOOP.

녕구소별 

과제 

건수와 

입금총합구하기.

JTAB-KOSTL 

BTAB-KOSTL.

JTAB-LTEXT 

BTAB-LTEXT.

JTAB-GJAHR 

BTAB-GJAHR.

NEW 

GJAHR.

SUM.

JTAB-RVAMT 

BTAB-RVAMT.

JTAB-COM 

BTAB-COM.

APPEND 

JTAB.

ENDAT.

endform. 

SET_DATA

SET_DATA 

DESCENDING.

^$*)*)@&

r*q%@*)&

@*(@&

$()q'

DATE 

IS 

NOT 

INITIAL.

TO 

JTAB-KOSTL.

C_date.

TIMES.

EXIT.

else.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1