从实例学SAP ABAP编程119章代码15章.docx
《从实例学SAP ABAP编程119章代码15章.docx》由会员分享,可在线阅读,更多相关《从实例学SAP ABAP编程119章代码15章.docx(21页珍藏版)》请在冰点文库上搜索。
从实例学SAPABAP编程119章代码15章
插入内表行:
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKETABLEOFman.
man-name='张参'.
man-high='1.68'.
man-weight=120.
INSERTmanINTOTABLEman1.
man-name='刘志'.
man-high='1.78'.
man-weight=160.
INSERTmanINTOTABLEman1.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
ULINE.
man-name='钱华'.
man-high='2.22'.
man-weight=220.
INSERTmanINTOman1INDEX3.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
读放文件
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKETABLEOFman.
*name='c:
\temp\testa.txt'.
*typa='dat'.
CALLFUNCTION'UPLOAD'
EXPORTING
codepage='test'
filename='c:
\temp\testa.txt'
filetype='dat'
item='读放文件'
TABLES
data_tab=man1
EXCEPTIONS
invalid_filesize=1
invalid_table_width=2
invalid_type=3
no_batch=4
unknown_error=5
gui_refuse_filetransfer=6
OTHERS=7.
IFsy-subrc<>0.
*messageidsy-msgidtypesy-msgtynumbersy-msgno
*withsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
格式化输出
DATAwaLIKEspfli.
WRITE:
/.
WRITE:
10'航班承运人',40'航班连接',60'国家代码',80'起飞城市',100'起飞机场'.
SELECT*INTOwaFROMspfli.
WRITE:
/wa-carridUNDER'航班承运人',
wa-connidUNDER'航班连接',
wa-countryfrUNDER'国家代码',
wa-cityfromUNDER'起飞城市',
wa-airpfromUNDER'起飞机场'.
ENDSELECT.
内表排序
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKEhashedTABLEOFmanwithuniquekeyname.
man-name='张参'.
man-high='1.68'.
man-weight=120.
INSERTmanINTOTABLEman1.
man-name='刘志'.
man-high='1.78'.
man-weight=160.
INSERTmanINTOTABLEman1.
man-name='钱华'.
man-high='2.22'.
man-weight=220.
INSERTmanINTOtableman1.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
ULINE.
sortman1ascendingbyweightdescending.
skip.
uline.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
内部数据存有文档
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKETABLEOFman.
DATA:
nameTYPErlgrap-filename,typaTYPErlgrap-filetype.
man-name='张参'.
man-high='1.68'.
man-weight=120.
INSERTmanINTOTABLEman1.
man-name='刘志'.
man-high='1.78'.
man-weight=160.
INSERTmanINTOTABLEman1.
man-name='钱华'.
man-high='2.22'.
man-weight=220.
INSERTmanINTOman1INDEX2.
name='c:
\temp\testa.txt'.
typa='dat'.
CALLFUNCTION'download'
EXPORTING
codepage='testa'
filename=name
filetype=typa
item='文件测试'
TABLES
data_tab=man1
EXCEPTIONS
invalid_filesize=1
invalid_table_width=2
invalid_type=3
no_batch=4
unknown_error=5
gui_refuse_filetransfer
=6
OTHERS=7.
IF
sy-subrc
<>
0.
*messageidsy-msgidtypesy-msgtynumbersy-msgno
*withsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF.
消息
REPORTyth_helloworld.
DATA:
msg1(20)TYPEcVALUE'测试'.
DATA:
msg2(20)TYPEcVALUE'ABAP'.
DATA:
msg3(20)TYPEcVALUE'消息!
'.
MESSAGEi006(ymess)WITHmsg1msg2msg3.
data:
BEGINOFman,
name(30)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
FIELD-SYMBOLSLIKEman.
DATAman1LIKEman.
man-name='雨荷'.
man-high='1.78'.
man-weight=140.
ASSIGNmanTO.
WRITE:
/-name,
man-high,
-weight.
DATA:
msg1(20)TYPEcVALUE'测试'.
DATA:
msg2(20)TYPEcVALUE'ABAP'.
DATA:
msg3(20)TYPEcVALUE'消息!
'.
MESSAGEi001(00)WITHmsg1msg2msg3.
DATA:
c1
(2)TYPEc,
c2
(2)TYPEc,
c3
(2)TYPEc,
c4
(2)TYPEc,
c5(20)TYPEcVALUE'91*12*23*344445',
c9
(2)TYPEc.
c9='*'.
WRITE:
/.
WRITEc5.
SPLITc5ATc9INTOc1c2c3c4.
WRITE:
/c1,c2,c3,c4.
DATA:
msg1(20)TYPEcVALUE'测试'.
DATA:
msg2(20)TYPEcVALUE'ABAP'.
DATA:
msg3(20)TYPEcVALUE'消息!
'.
MESSAGEi001(00)WITHmsg1msg2msg3.
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKETABLEOFmanWITHHEADERLINE,
man2LIKETABLEOFman.
man-name='张参'.
man-high='1.68'.
man-weight=120.
APPENDmanTOman1.
man-name='刘志'.
man-high='1.78'.
man-weight=160.
APPENDmanTOman1.
MOVEman1[]TOman2.
WRITE:
/man-name,man-high,man-weight.
LOOPATman1.
write:
/man1-name,man1-high,man1-weight.
ENDLOOP.
直接读取文件
DATA:
BEGINOFman,
name(20)TYPEc,
highTYPEpDECIMALS2,
weightTYPEpDECIMALS2,
ENDOFman.
DATA:
man1LIKETABLEOFman.
CALLFUNCTION'WS_UPLOAD'
EXPORTING
codepage='test'
filename='c:
\temp\testa.txt'
filetype='dat'
TABLES
data_tab=man1
EXCEPTIONS
invalid_filesize=1
invalid_table_width=2
invalid_type=3
no_batch=4
unknown_error=5
gui_refuse_filetransfer=6
OTHERS=7.
IFsy-subrc<>0.
*messageidsy-msgidtypesy-msgtynumbersy-msgno
*withsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF.
LOOPATman1INTOman.
WRITE:
/man-name,man-high,man-weight.
ENDLOOP.
字符串替换
DATA:
str1(10)TYPEcVALUE'AABBCCDDEE'.
WRITE/'接着的字符串______________将被替换.'.
WRITEAT14(10)str1.
读取数据表
*定义工作区
DATAa_spfliTYPEspfli.
*定义内表,请注意有Headerline
DATAta_spfliTYPETABLEOFspfliWITHHEADERLINE.
*分隔线
ULINE.
WRITE/'使用工作区'.
ULINE.
*将数据表逐行转移至工作区,只读前5行
SELECT*INTOCORRESPONDINGFIELDSOF
a_spfliFROMspfliUPTO5ROWS.
WRITE:
/a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,
a_spfli-cityto.
ENDSELECT.
ULINE.
WRITE/'使用内表'.
ULINE.
SELECT*INTOCORRESPONDINGFIELDSOF
TABLEta_spfliFROMspfliUPTO5ROWS.
*从数据表读数据至内表,直接从内表输出
*如果TA_SPFLI没有定义Headerline,会出错
LOOPATta_spfli.
WRITE:
/a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,
a_spfli-cityto.
ENDLOOP.
ULINE.
WRITE/'将内表数据转移至工作区'.
ULINE.
LOOPATta_spfliINTOa_spfli.
WRITE:
/a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,
a_spfli-cityto.
ENDLOOP.
内连接和外连接
*定义结构
DATA:
BEGINOFarcd,
carridTYPEspfli-carrid,
connidTYPEspfli-connid,
fldateTYPEsflight-fldate,
ENDOFarcd.
*工作区
DATAarcd1LIKEarcd.
*关联数据表,读取前10条记录,写入工作区,并输出
SELECTspfli~carridspfli~connidsflight~fldateINTOarcd1FROMspfli
INNERJOINsflightONspfli~carrid=sflight~carrid
ANDspfli~connid=sflight~connidUPTO10ROWS.
WRITE:
/arcd1-carrid,arcd1-connid,arcd1-fldate.
ENDSELECT.
使用packagesize读取数据
*定义内表,请注意有Headerline
DATAwa_spfliTYPETABLEOFspfliWITHHEADERLINE.
*分隔线
ULINE.
*以每次读取5条记录,直到读取所有数据
SELECT*INTOTABLEwa_spfliFROMspfliPACKAGESIZE5.
*输出内表记录
LOOPATwa_spfli.
WRITE:
/wa_spfli-connid,wa_spfli-carrid,wa_spfli-cityfrom,
wa_spfli-cityto.
ENDLOOP.
*输出5条记录后输出一条横线
ULINE.
ENDSELECT.
交互式列表
START-OF-SELECTION.
WRITE:
'初如列表,sy-lsind=',sy-lsind.
ATLINE-SELECTION.
IFsy-lsind=1.
WRITE:
'第二列表,sy-lsind=',sy-lsind.
ENDIF.
列表颜色
*数据库表spfli相关
TABLESspfli.
SKIP.
*输出表头,背景灰蓝
FORMATCOLORCOL_HEADING.
ULINEAT/(91).
WRITE:
/sy-vline,(15)'航线承运人',sy-vline,(15)'航班连接',sy-vline,
(15)'国家代码',sy-vline,(15)'起飞城市',sy-vline,
(15)'起飞机场',sy-vline.
ULINEAT/(91).
FORMATCOLOROFF.
*输出内容,输出关键值为‘LH’为红色
SELECT*FROMspfli.
IFspfli-carrid='LH'.
FORMATCOLORCOL_NEGATIVE.
ELSE.
FORMATCOLOROFF.
ENDIF.
WRITE:
/sy-vline,(15)spfli-carrid,sy-vline,(15)spfli-connid,sy-vline,
(15)spfli-countryto,sy-vline,(15)spfli-cityfrom,sy-vline,(15)
spfli-airpfrom,sy-vline.
ULINEAT/(91).
ENDSELECT.
输出热点
start-of-selection.
write'请按'.
formathotspotoncolor5inverseon.
write'热点'.
formathotspotoffcoloroff.
atline-selection.
write'welcome!
'.
为列表定义工具条和菜单
START-OF-SELECTION.
*设置已使用的状态条
SETPF-STATUS'STA1'.
WRITE:
'测试工具条按钮'.
ATUSER-COMMAND.
*当单击按钮时输出
CASEsy-ucomm.
WHEN'OWNSEL'.
WRITE:
'已选择!
'.
ENDCASE.
在弹出式窗口中显示列表
START-OF-SELECTION.
*设置已使用的状态条
SETPF-STATUS'STA1'.
WRITE:
'测试工具条按钮'.
ATUSER-COMMAND.
*当单击按钮时输出
CASEsy-ucomm.
WHEN'OWNSEL'.
IFsy-lsind=1.
SETPF-STATUS'STA6'.
*定义子窗口并输出
WINDOWSTARTINGAT1010ENDINGAT3020.
WRITE'在子窗口输出!
'.
WRITE:
'请注意!
'.
ENDIF.
ENDCASE.
隐藏字段技术
*数据库表spfli相关
TABLES:
spfli,sflight.
START-OF-SELECTION.
SKIP.
*输出
ULINEAT/(91).
WRITE:
/sy-vline,(15)'航线承运人',sy-vline,(15)'航班连接',sy-vline,
(15)'国家代码',sy-vline,(15)'起飞城市',sy-vline,
(15)'起飞机场',sy-vline.
ULINEAT/(91).
*输出
SELECT*FROMspfli.
WRITE:
/sy-vline,(15)spfli-carrid,sy-vline,
(15)spfli-connid,sy-vline,
(15)spfli-countryto,sy-vline,
(15)spfli-cityfrom,sy-vline,
(15)spfli-airpfrom,sy-vline.
*隐藏关键字
HIDE:
spfli-carrid,spfli-connid.
ULINEAT/(91).
ENDSELECT.
ATLINE-SELECTION.
*只输出第一页
IFsy-lsind=1.
*根据隐藏字段读取并打印从表
SELECT*FROMsflight
WHEREcarrid=spfli-carridANDconnid=spfli-connid.
WRITE:
/sflight-carrid,sy-vline,sflight-connid,
sy-vline,sflight-fldate,sy-vline,sflight-price.
ENDSELECT.
ENDIF.
使用hide技术从列表读取行
*数据库表spfli相关
TABLES:
spfli.
DATA:
sela
(1)TYPEc,
num1TYPEi.
START-OF-SELECTION.
SKIP.
*输出
ULINEAT/(95).
WRITE:
/sy-vline,'',sy-vline,(15)'航线承运人',sy-vline,(15)
'航班连接',sy-vline,(15)'国家代码',sy-vline,(15)
'起飞城市',sy-vline,(15)'起飞机场',sy-vline.
ULINEAT/(95).
*输出
SELECT*FROMspfli.
WRITE:
/sy-vline,selaASCHECKBOX,sy-vline,(15)spfli-carrid,
sy-vline,(15)spfli-connid,sy-vline,(15)spfli-countryto,
sy-vline,(15)spfli-cityfrom,sy-vline,
(15)spfli-airpfrom,sy-vline.
*隐藏关键字
HIDE:
spfli-carrid,spfli-connid,spfli-countryto,
spfli-cityfrom,spfli-airpfrom.
ULINEAT/(95).
*隐藏选择框,使表格行不会选择
HIDEsela.
ENDSELECT.
END-OF-SELECTION.
num1=sy-lsind-1.
ATLINE-SELECTION.
*只输出第一页
IFsy-lsind=1.
DOnum1TIMES.
*读取行
READLINEsy-indexFIELDVALUEsela.
*如果checked,输出隐含字段
IFsela