ABAP Write 宝典
???將數據寫入列表的基本ABAP/4語句是WRITE、SKIP和ULINE輸出語句。
一、標準列表結構
(1)標準頁眉:標準頁眉至少包括兩行標準標題。標準標題的首行包含列表表頭和頁號。第二行由水平線組成。執行程序時,列表表頭存儲在系統字段SY-TITLE中。如果需要,可以在標準標題中包括最多四行列頭和另一條水平線。
(2)標準頁
???輸出數據顯示在頁眉之下。標準列表包含一個動態長度的單頁(內部限制60,000行)。輸出長度由當前列表大小確定。輸出屏幕包括一個垂直滾動條,允許用戶滾動頁長超過窗口的列表。
?
(3)標準列表的寬度
????標準列表的寬度取決于執行報表時的窗口寬度。如果用戶窗口小于或等于標準窗口大小,則標準頁寬應符合標準窗口寬度。用戶可能必須滾動列表才能查看列表的所有部件。如果用戶窗口超過標準窗口寬度,則標準列表的寬度符合選定標準窗口的寬度。
?
?
二、修改列表和列標題
(1)自定義列表
可以修改標準列表的結構并創建單個結構的列表。使用REPORT語句選項以及事件TOP-OF-PAGE和END-OF-PAGE。PROGRAM語句與REPORT語句等介并有相同的選項。如果列表包括幾頁,則可以分別定義每頁的結構。
---單個頁眉:要分別定義頁眉的格式,必須在緊隨事件關鍵字TOP-OF-PAGE的處理塊中定義,
語法:
?TOP-OF-PAGE.
??? WRITE:....
TOP-OF-PAGE事件在系統開始處理列表新頁時出現。系統在輸出新頁首行之前處理TOP-OF-PAGE后面的語句。如果要取消標準頁眉,使用語法:REPORT <rep> NO STANDARD PAGEHEADING.使用該語句時,系統不在報表<rep>列表上顯示標準頁眉。
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING.
TOP-OF-PAGE.
WRITE:?SY-TITLE,?40?'Page',?SY-PAGNO.
ULINE.
WRITE:?/?'SAP?AG',?29?'Walldorf,?',SY-DATUM,
???????/?'Neurottstr.?16',?/?'69190?Walldorf/Baden'.
ULINE.
START-OF-SELECTION.
DO?5?TIMES.
??WRITE?/?SY-INDEX.
ENDDO.
報表程序不使用標準頁眉,而是使用 TOP-OF-PAGE 之后的自定義頁眉。要顯式結束TOP-OF-PAGE處理塊,必須指定事件關鍵字 START-OF-SELECTION。
?
(2)確定列表寬度
????要確定輸出列表的寬度,使用REPORT語句的LINE-SIZE選項。語法: REPORT<rep> LINE-SIZE<width>.該語句根據<width>字符確定報表<rep>輸出列表的寬度。如果將<width>設置為0,則系統使用標準列表的寬度。一行最多可包含255個字符。如果要打印列表,大多數據打印機不能打印超過132個字符的列表。創建列表時,系統字段SY-LINSZ包含當前行寬。要將列表寬度調整為當前窗口寬度,使用ULINE語句(不帶AT選項)創建的水平線自動適配自定義列表寬度。
?REPORT??ZJESSE02?LINE-SIZE?60.?
WRITE:??'SY-LINSZ:',?SY-LINSZ.?
ULINE.?
DO?20?TIMES.?
??WRITE?SY-INDEX.?
ENDDO.
?
(3)確定頁長
? 要確定輸出列表的頁長,使用REPORT語句的LINE-COUNT選項。REPORT<rep> LINE-COUNT<length>[(<n>)].該語句用<length>行確定報表的頁長。如果指定選項號<n>,則系統為頁腳保留<n>行頁長。并不將這些頁腳行填寫到END-OF-PAGE事件中,而是作為空行顯示。如果設置為0,則系統使用標準頁長。創建列表時,系統字段SY-LINCT包含每頁的當前行數。
?REPORT??ZJESSE02?LINE-SIZE?40?LINE-COUNT?4.?
WRITE:??'SY-LINCT:',?SY-LINCT.?
SKIP.?
DO?6?TIMES.?
?WRITE?/?SY-INDEX.?
ENDDO.
該程序將頁長確定為四行。使用標準頁眉。假定標準頁眉 包括兩行列表表頭:
JESSE的ABAP程序???????????????????????1
SY-LINCT:????4
JESSE的ABAP程序???????????????????????2
????????1
????????2
JESSE的ABAP程序???????????????????????3
????????3
????????4
JESSE的ABAP程序???????????????????????4
????????5
????????6
?
(4)定義頁腳
要定義頁腳,使用END-OF-PAGE事件。在處理列表頁時,如果系統到達頁腳保留行,或者如果RESERVE語句觸發分布則該事件發生。在緊接著END-OF-PAGE事件關鍵字的處理塊中填充頁腳的行:
語法
? END-OF-PAGE.
???WRITE:...
?如果為REPORT語句的LINE-COUNT選項中的腳注保留行,則系統只處理緊接著END-OF-PAGE的處理塊。
?REPORT??ZJESSE02?LINE-SIZE?40?LINE-COUNT?6(2)?
????????????????NO?STANDARD?PAGE?HEADING.?
TOP-OF-PAGE.?
WRITE:?'Page?with?Header?and?Footer'.?
ULINE?AT?/(27).?
END-OF-PAGE.?
ULINE.?
WRITE:?/30?'Page',?SY-PAGNO.?
START-OF-SELECTION.?
DO?6?TIMES.?
??WRITE?/?SY-INDEX.?
ENDDO.
該程序包括三個處理塊。關閉標準頁眉。將頁長設置為六行,其中兩行留作頁腳。列表包括三頁,每頁六行。每頁由自定義的兩行頁眉、兩行實際列表和兩行頁腳組成。頁腳中顯示的當前頁號來自系統字段SY-PAGNO 。運行結果如下:
Page with Header and Footer
????????1
????????2
????????????????????????????Page????1
Page with Header and Footer
????????3
????????4
????????????????????????????Page????2
Page with Header and Footer
????????5
????????6
????????????????????????????Page????3
?
?
多頁列表
如果在報表中寫入列表輸出頁的行數超過在REPORT語句LINE-COUNT選項中定義的行數,則系統自動創建新頁。每個新頁都包含為報表定義的頁眉和頁腳(如果有的話)。除自動分布外,可以使用NEW-PAGE和RESERVE語句顯式地編碼分布。NEW-PAGE語句的選項允許分別設置每頁格式。也需要NEW-PAGE語句在程序內打印列表。
?
無條件分頁
?要在頁處理期間觸發分頁,請使用NEW-PAGE.
?REPORT??ZJESSE02?LINE-SIZE?40.?
TOP-OF-PAGE.?
WRITE:?'TOP-OF-PAGE',?SY-PAGNO.?
ULINE?AT?/(17).?
START-OF-SELECTION.?
DO?2?TIMES.?
??WRITE?/?'Loop:'.?
??DO?3?TIMES.?
????WRITE?/?SY-INDEX.?
??ENDDO.?
??NEW-PAGE.?
ENDDO.?
?
條件分頁
RESERVE <n> LINES.
?REPORT??ZJESSE02?LINE-SIZE?40?LINE-COUNT?8(2).?
END-OF-PAGE.?
ULINE.?
START-OF-SELECTION.?
DO?4?TIMES.?
??WRITE?/?SY-INDEX.?
ENDDO.?
DO?2?TIMES.?
??WRITE?/?SY-INDEX.?
ENDDO.?
RESERVE?3?LINES.?
WRITE:?/?'LINE?1',?
???????/?'LINE?2',?
???????/?'LINE?3'.
該樣本程序標準頁眉的列表頭定義為“標準頁眉”。REPORT 語句將頁長確定為八行 ,兩行用于標準頁眉,另外兩行為頁腳保留。頁腳包括水平行和空行 。因此,輸出的實際列表,每頁留下四行。第一個 DO 循環填充四行,然后發生END-OF-PAGE 事件,其后系統自動開始新頁。在第二個 DO 循環之后, 因為頁上剩余的自由行 數少于三, 因此 RESERVE語句觸發 END-OF-PAGE 事件和分頁 。
?
單頁的標準頁眉
標準頁眉包括列表和列標題。
NEW-PAGE [NO-TITLE|WITH-TITLE] [NO-HEADING|WITH-HEADING].
使用NO-TITLE或WITH-TITLE選項取消或在以后所有頁上顯示標準表頭。基本列表的缺省值為WITH-TITLE,輔助列表為NO-TITLE.使用NO-HEADING或WITH-HEADING選項取消或在以后所有頁上顯示列標題。基本列表的缺省值為WITH-HEADING,輔助列表為NO-HEADING.即使使用REPORT語句的NOSTANDARD PAGEHEADING選項取消標準頁眉,也能使用WITH-TITLE和WITH-HEADING激活單個組件的顯示。
?REPORT??ZJESSE02?LINE-SIZE?40.?
WRITE:?'Page',?SY-PAGNO.?
NEW-PAGE?NO-TITLE.?
WRITE:?'Page',?SY-PAGNO.?
NEW-PAGE?NO-HEADING.?
WRITE:?'Page',?SY-PAGNO.?
NEW-PAGE?WITH-TITLE.?
WRITE:?'Page',?SY-PAGNO.?
NEW-PAGE?WITH-HEADING.?
WRITE:?'Page',?SY-PAGNO.
該程序創建五頁,分別帶有不同頁眉。將列表表頭標題文本元素定義為“標準頁眉”,列標題定義為“列”。?
第 1 和 5 頁包含完整的標準頁眉 。第 2 頁沒有列表表頭。在第 3 頁上,取消整個頁眉。 在第 4 頁上,省略列標題。
?
單頁頁長
要分別確定每頁的頁長,請使用NEW-PAGE語句:
NEW-PAGE LINE-COUNT<length>."該語句將后續的頁長確定為<length>。可以是變量。如果設置為0,則系統使用標準頁長。頁眉是頁的部分因此也是頁長的部分。要將頁長適配當前窗口長度,將值設置為SY-SROWS.
?
列表級的頁寬
NEW-PAGE LINE-SIZE <width>.從新頁開始的所有列表級寬度都為<width>,而不是REPORT語句中定義的寬度。
?
?
通過窗口滾動窗口
SCROLL LIST FORWARD|BACKWRAD[INDEX<idx>].不帶INDEX選項時,該語句以當前窗口大小向前或向后滾動當前列表。使用INDEX選項時,系統以列表級<idx>滾動列表。
?REPORT??ZJESSE02??NO?STANDARD?PAGE?HEADING?LINE-SIZE?40.?
TOP-OF-PAGE.?
WRITE:?'Top?of?Page',?SY-PAGNO,?'SY-SROWS:',?SY-SROWS.?
ULINE.?
START-OF-SELECTION.?
DO?100?TIMES.?
??WRITE?/?SY-INDEX.?
ENDDO.?
DO?3?TIMES.?
??SCROLL?LIST?FORWARD.?
ENDDO.?
?
按頁滾動
? 要按頁滾動列表,即按頁長垂直滾動列表,SCROLL語句提供下列選項:
SCROLL LIST TO FIRST PAGE|LASTPAGE|PAGE<pag>[INDEX<idx>][LINE<lin>].
不用INDEX選項,語句將當前列表滾動到首頁、尾頁或<pag>頁。使用INDEX選項,則系統滾動列表級<idx>的列表。
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?
???????????????LINE-SIZE?40?LINE-COUNT?8(2).?
DATA:?PAG?TYPE?I?VALUE?15,?
??????LIN?TYPE?I?VALUE?4.?
TOP-OF-PAGE.?
WRITE:?'Top?of?Page',?SY-PAGNO.?
ULINE.?
END-OF-PAGE.?
ULINE.?
WRITE:?'End?of?Page',?SY-PAGNO.?
START-OF-SELECTION.?
DO?100?TIMES.?
??DO?4?TIMES.?
????WRITE?/?SY-INDEX.?
??ENDDO.?
ENDDO.?
SCROLL?LIST?TO?PAGE?PAG?LINE?LIN.?
列表從第 15 頁開始顯示 。由于LINE 選項,實際列表的前三行滾動到頁眉以下。
?
滾動到列表的頁邊緣
語法:
SCROLL LIST LEFT|RIGHT [INDEX<idx>].
?
按列滾動
SCROLL LIST TO COLUMN <col>[INDEX<idx>]
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?200.?
TOP-OF-PAGE.?
WRITE:?AT?161?'Top?of?Page',?SY-PAGNO,??
????????????????'SY-SCOLS:',?SY-SCOLS.?
ULINE.?
START-OF-SELECTION.?
DO?200?TIMES.?
??WRITE?SY-INDEX.?
ENDDO.?
SCROLL?LIST?TO?COLUMN?178.?
?
?
三、列表頁面設置
定位輸出
? SY-COLNO用于當前列???SY-LINNO?? 用于當前行
?
(1)絕對定位:
POSITION <col>."水平定位該語句將水平輸出位置和SY-COLNO系統字段設置為<col>.
SKIP TO LINE<n>."垂直定位該語句將垂直輸出位置和SY-LINNO系統字段設置為<lin>.
BACK. "將輸出定位到整個頁眉之后的第一行
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?60.?
DATA:?X(3),?Y(3).?
X?=?SY-COLNO.?Y?=?SY-LINNO.?
TOP-OF-PAGE.?
WRITE:?'Position?of?Header:?',?X,?Y.?
ULINE.?
START-OF-SELECTION.?
SKIP?TO?LINE?10.?
POSITION?20.?
X?=?SY-COLNO.?Y?=?SY-LINNO.?
WRITE:?'*?<-?Position',?X,?Y.?
SKIP?TO?LINE?12.?
ULINE?AT?20(20).?
BACK.?
X?=?SY-COLNO.?Y?=?SY-LINNO.?
WRITE:?'Position?after?BACK:',?X,?Y.
?
(2)相對定位
產生換行,要生產換行,在WRITE,ULINE或NEW-LINE語句的AT選項中使用反斜杠。
NEW-LINE "該語句將輸出定位在新行中,將SY-COLNO設置為1并且將SY-LINNO加1.
WRITE <f> UNDER<g>."系統從開始輸出字段<g>的同一列中開始輸出<f>。該語句不限于當前頁。
RESERVE. ... BACK. "如果BACK緊隨RESERVE,則后續輸出出現在RESERVE之后的第一行中。
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?40.?
DATA?X?TYPE?I.?
WRITE?'Some?numbers:'?NO-GAP.?
X?=?SY-COLNO.?
ULINE?AT?/(X).?
RESERVE?5?LINES.?
DO?5?TIMES.?
??WRITE?/?SY-INDEX.?
ENDDO.?
X?=?SY-COLNO.?
BACK.?
WRITE?AT?X?'???<-?Start?of?Loop'.?
輸出前兩行之后,RESERVE 語句用于將后續五行定義為塊。緊隨 BACK 之后的輸出寫入到塊的第一行。請注意,如何使用SY-COLNO 系統字段給第一行加下劃線以及如何定位最后的WRITE輸出。
輸出如下:
Some numbers:
????????1????<- Start of Loop
????????2
????????3
????????4
????????5
?
格式輸出:
FORMAT <option1>[ON|OFF]<option2> [ON|OFF] ....
?
使字段可接受輸入
FORMAT INPUT [ON|OFF]. "要在運行時將輸出字段設置為“準備輸入”。
?REPORT??ZJESSE02.
WRITE???'Please?fill?in?your?name?before?printing:'.?
WRITE?/?'???Enter?name?here????'?INPUT?ON.?
ULINE.?
WRITE?'You?can?overwrite?the?following?line:'.?
FORMAT?INPUT?ON?INTENSIFIED?OFF.?
ULINE.?
FORMAT?INPUT?OFF?INTENSIFIED?ON.
?
將字段輸出為熱點
FORMAT HOTSPOT [ON|OFF]
?REPORT??ZJESSE02.
INCLUDE?<LIST>.?
START-OF-SELECTION.?
WRITE?'Now?comes?a'.?
FORMAT?HOTSPOT?ON?COLOR?5?INVERSE?ON.?
WRITE?'HOTSPOT'.?
FORMAT?HOTSPOT?OFF?COLOR?OFF.?
AT?LINE-SELECTION.?
WRITE?/?'New?list?AT-LINE-SELECTION'.?
SKIP.?
WRITE?'This?is?also?a?hotspot:'.?
WRITE?ICON_LIST?AS?ICON?HOTSPOT.
在本程序中 ,首行的 START-OF-SELECTION事件部分格式化為熱點。標準頁眉定義為文本元素。如果用戶將鼠標移動到輸出的 HOTSPOT 單詞上,則鼠標指針更改為手形。單擊觸發事件AT-LINE-SELECTION。 在該事件中 ,程序創建包含其他熱點的輔助列表。
?
特殊輸出格式
SET COUNTRY <c>.
?REPORT??ZJESSE02?LINE-SIZE?40.?
DATA:?NUM?TYPE?P?DECIMALS?3?VALUE?'123456.789'.?
ULINE.?
WRITE:?/?'INITIAL:'.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
SET?COUNTRY?'US'.?
WRITE:?/?'US,??????SY-SUBRC:',?SY-SUBRC.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
SET?COUNTRY?'GB'.?
WRITE:?/?'GB,??????SY-SUBRC:',?SY-SUBRC.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
SET?COUNTRY?'DE'.?
WRITE:?/?'DE,??????SY-SUBRC:',?SY-SUBRC.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
SET?COUNTRY?'XYZ'.?
WRITE:?/?'XYZ,?????SY-SUBRC:',?SY-SUBRC.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
SET?COUNTRY?SPACE.?
WRITE:?/?'SPACE,???SY-SUBRC:',?SY-SUBRC.?
WRITE:?/?NUM,?SY-DATUM.?
ULINE.?
運行結果如下:
JESSE的ABAP程序???????????????????????1
INITIAL:
????123,456.789? 2011-07-16
US,?????SY-SUBRC:????0
????123,456.789? 07/16/2011
GB,?????SY-SUBRC:????0
????123,456.789? 16.07.2011
DE,?????SY-SUBRC:????0
????123.456,789? 16.07.2011
XYZ,????SY-SUBRC:????4
????123,456.789? 07/16/2011
SPACE,??SY-SUBRC:????0
????123,456.789? 2011-07-16
?
貨幣特有的輸出格式
WRITE <f> CURRENCY<c>.
?REPORT??ZJESSE02?LINE-SIZE?40.?
DATA:?NUM1?TYPE?P??DECIMALS?4?VALUE?'12.3456',?
??????NUM2?TYPE?P?????????????VALUE?'123456'.?
SET?COUNTRY?'US'.?
WRITE:?'USD',?NUM1?CURRENCY?'USD',?NUM2?CURRENCY?'USD',?
?????/?'BEF',?NUM1?CURRENCY?'BEF',?NUM2?CURRENCY?'BEF',?
?????/?'KUD',?NUM1?CURRENCY?'KUD',?NUM2?CURRENCY?'KUD'.?
JESSE的ABAP程序???????????????????????1
USD????????1,234.56????????1,234.56
BEF?????????123,456?????????123,456
KUD?????????123.456?????????123.456
?
單位特有輸出格式
WRITE <f> UNIT<u>.
?REPORT??ZJESSE02?LINE-SIZE?40.?
DATA:?NUM1?TYPE?P?DECIMALS?1?VALUE?1,?
??????NUM2?TYPE?P?DECIMALS?4?VALUE?'2.5'.?
SET?COUNTRY?'US'.?
WRITE:?'KG',?NUM1?UNIT?'KG',?NUM2?UNIT?'KG',?
?????/?'PC',?NUM1?UNIT?'PC',?NUM2?UNIT?'PC'.?
JESSE的ABAP程序???????????????????????1
KG???????????????1???????????2.5000
PC?????????????1.0???????????2.5000
?
?
畫線、框架和網格
直接:
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING.?
SKIP?TO?LINE?3.?
ULINE?AT?2(1).?
WRITE?4??'-'.?
WRITE?6??'--'.?
WRITE?9??'---'.?
ULINE?AT?12(4).?
SKIP?TO?LINE?1.?
POSITION?18.?
WRITE?'|'.?
SKIP?TO?LINE?3.?
DO?4?TIMES.?
??NEW-LINE.?
??POSITION?18.?
??WRITE?'|'.?
ENDDO.?
第一條 ULINE 語句創建一列的水平線 。第一條 WRITE 語句的連字符顯示為正常輸出字段。第二條 WRITE語句的連字符創建兩列寬的直線。下面三個連字符與 ULINE 語句一起創建七列寬的直線。輸出的第一個 '|'字符在第一行中創建垂直線。其他四個 '|' 字符創建 條線段長的直線,從第 3 行開始。
?
?
角
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING.?
WRITE???'--'.?
WRITE?/?'|'.?
SKIP?TO?LINE?1.?
ULINE?AT?5(6).?
NEW-LINE.?
WRITE?10?'|'.?
SKIP?TO?LINE?4.?
WRITE:?'|????????|',?
?????/?'----------'.?
?
T型交叉
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING.?
WRITE?'---'.?
WRITE?/2?'|?????|'.?
ULINE?AT?/5(8).?
SKIP?TO?LINE?4.?
DO?3?TIMES.?
??WRITE?'|'.?
??NEW-LINE.?
ENDDO.?
SKIP?TO?LINE?5.?
WRITE?'---------'.?
SKIP?TO?LINE?4.?
ULINE?AT?6(10).?
WRITE?15?'|'?.
?
十字交叉
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING.?
WRITE???'???|'.?
WRITE??/'-------'.?
WRITE??/'???|'.?
SKIP?TO?LINE?1.?
DO?3?TIMES.?
??WRITE?12?SY-VLINE.?
??NEW-LINE.?
ENDDO.?
SKIP?TO?LINE?2.?
ULINE?AT?12(1).?
?
特殊線
?REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?60.?
INCLUDE?<LINE>.?
DATA:?X0?TYPE?I?VALUE?10,?
??????Y0?TYPE?I?VALUE?10,?
??????N?TYPE?I?VALUE?16,?
??????I?TYPE?I?VALUE?0,?
??????X?TYPE?I,?Y?TYPE?I.?
X?=?X0.?Y?=?Y0.?PERFORM?POS.?
WHILE?I?LE?N.?
??WRITE?LINE_BOTTOM_LEFT_CORNER?AS?LINE.?
??X?=?X?+?1.?PERFORM?POS.?
??ULINE?AT?X(I).?
??X?=?X?+?I.?PERFORM?POS.?
??WRITE?LINE_BOTTOM_RIGHT_CORNER?AS?LINE.?
??Y?=?Y?-?1.?PERFORM?POS.?
??DO?I?TIMES.?
????WRITE?'|'.?
????Y?=?Y?-?1.?PERFORM?POS.?
?????ENDDO.?
??WRITE?LINE_TOP_RIGHT_CORNER?AS?LINE.?
??I?=?I?+?1.?
??X?=?X?-?I.?PERFORM?POS.?
??ULINE?AT?X(I).?
??X?=?X?-?1.?PERFORM?POS.?
??WRITE?LINE_TOP_LEFT_CORNER?AS?LINE.?
??Y?=?Y?+?1.?PERFORM?POS.?
??DO?I?TIMES.?
????WRITE?'|'.?
????Y?=?Y?+?1.?PERFORM?POS.?
??ENDDO.?
??I?=?I?+?1.?
ENDWHILE.?
FORM?POS.?
??SKIP?TO?LINE?Y.?
??POSITION?X.?
ENDFORM.?
運行結果如下所示:
?
?
編程框架
可以使用ABAP/4中可用的線類型編程框架。下面的樣本程序定義宏WRITE_FRAME,可以取代WRITE<f>語句。系統在WRITE_FRAME語句指定的字段<f>周圍畫框架,該框架字段動態適配該字段的長度。
? REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?60.?
DATA:?X?TYPE?I,?Y?TYPE?I,?L?TYPE?I.?
DEFINE?WRITE_FRAME.?
??X?=?SY-COLNO.?Y?=?SY-LINNO.?
??WRITE:?'|'?NO-GAP,?&1?NO-GAP,?'|'?NO-GAP.?
??L?=?SY-COLNO?-?X.?
??Y?=?Y?-?1.?SKIP?TO?LINE?Y.?POSITION?X.?
??ULINE?AT?X(L).?
??Y?=?Y?+?2.?SKIP?TO?LINE?Y.?POSITION?X.?
??ULINE?AT?X(L).??
??Y?=?Y?-?1.?X?=?SY-COLNO.?SKIP?TO?LINE?Y.?POSITION?X.?
END-OF-DEFINITION.?
SKIP.?
WRITE???????'Demonstrating'.?
WRITE_FRAME?'dynamic?frames'.?
WRITE???????'in'.?
WRITE_FRAME?'ABAP/4'.?
WRITE???????'output?lists.'.
運行結果:
編程網絡
? REPORT??ZJESSE02?NO?STANDARD?PAGE?HEADING?LINE-SIZE?60.?
TABLES?SPFLI.?
DATA:??X?TYPE?I,?Y?TYPE?I,?L?TYPE?I.?
TOP-OF-PAGE.?
WRITE?3?'List?of?Flights?in?a?Dynamic?Grid'??
?????????COLOR?COL_HEADING.?
ULINE.?
START-OF-SELECTION.?
DEFINE?NEW_GRID.?
??Y?=?SY-LINNO.?Y?=?Y?+?2.?SKIP?TO?LINE?Y.?
??X?=?SY-COLNO.?POSITION?X.?WRITE?'|'.?
END-OF-DEFINITION.?
DEFINE?WRITE_GRID.?
??X?=?SY-COLNO.?Y?=?SY-LINNO.?POSITION?X.?
??WRITE:??&1,?'|'.?
??L?=?SY-COLNO?-?X?+?1.?
??X?=?X?-?2.?Y?=?Y?+?1.?SKIP?TO?LINE?Y.?POSITION?X.?
??ULINE?AT?X(L).?
??Y?=?Y?-?1.?X?=?SY-COLNO.?SKIP?TO?LINE?Y.?POSITION?X.?
END-OF-DEFINITION.?
GET?SPFLI.?
NEW_GRID.?
WRITE_GRID:?SPFLI-CARRID,?
????????????SPFLI-CONNID,?
????????????SPFLI-CITYFROM,?
????????????SPFLI-CITYTO.?
運行結果:
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的ABAP Write 宝典的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: F4IF_INT_TABLE_VALUE
- 下一篇: Dynpro F4的实现测试