05模塊化編程呀伙,A1-使用宏技術輸出系統(tǒng)圖標列表

圖5-A1使用宏技術輸出系統(tǒng)圖標列表

需求分析:

1你稚、具體需求

本《使用宏技術輸出系統(tǒng)圖標列表》有如下需求:

  1. 將系統(tǒng)中自帶的圖標輸出為列表寇壳;
  2. 分頁輸出醒颖,并在每頁的上方輸出頁碼和列表抬頭;
  3. 內(nèi)容含四周(上下左右)框線輸出壳炎。
    其中列表輸出效果如圖5-1泞歉。


    圖5- 1 列表輸出效果
2、開發(fā)分析

要達成本實踐目標匿辩,在不考慮使用模塊化編程技術的情況下腰耙,其方式可有2種,如圖5-2所示铲球。

圖5- 2 實現(xiàn)本實踐的2種方式
實現(xiàn)步驟

如上兩種方式挺庞,都可以完成本實踐,且實現(xiàn)的代碼也并不復雜睬辐。如果使用方式1挠阁,一條記錄一次輸出,從效率上比較高溯饵,但代碼的復用性比較弱侵俗,如有其他的需求,或同一個報表僅僅是增加一列丰刊,或需要指定另一個長度隘谣,或輸出顏色要單獨設置,那么輸出數(shù)據(jù)、輸出上/下橫線的代碼則都需要修改寻歧;使用方式2時掌栅,每個單元格的輸出步驟都是類似的,可以充分使用ABAP的模塊化編程技術码泛,將輸出一個單元格內(nèi)容的完整步驟封裝為一個模塊猾封,如此在相同的程序或不同的程序中都可以重復調(diào)用,如此代碼的可讀性噪珊、可維護性都將提高晌缘,當然,因為需要每個單元格都需獨立完成一遍輸出痢站,效率會低點磷箕。
如果不考慮代碼的可讀性、可維護性阵难、可重用性岳枷,不對方式2的代碼進行模塊化編程,每個單元格獨立一次輸出呜叫,此時使用方式2是完全沒優(yōu)勢的空繁,如此肯定是優(yōu)先選擇方式1;而在項目實踐應用中怀偷,代碼的可讀性家厌、可維護性、可重用性會更為重要椎工,如此本實踐使用模塊化編程技術之一——宏予以實現(xiàn)饭于。

實踐步驟:

本實踐通過程序編輯器(SE38)即可完成,編寫的代碼將有如下幾部分組成维蒙,按開發(fā)人員風格不同掰吕,其組成部分并非強制一致。

No 部分 說明
1 程序聲明 聲明本程序執(zhí)行后是否包含標準標題颅痊,數(shù)據(jù)輸出寬度和每頁的行數(shù)量為多少殖熟。
2 對象定義 通過定義類型池以在程序中使用相應的圖標,定義要使用的變量等斑响,以在程序執(zhí)行過程中計算和存儲臨時值
3 宏定義 通過宏定義單元格內(nèi)容菱属,以及列表數(shù)據(jù)表頭的輸出
4 獲取和輸出數(shù)據(jù) 從表中獲得要輸出的數(shù)據(jù),并調(diào)用宏將數(shù)據(jù)按要求輸出
1舰罚、程序聲明

程序聲明部分的代碼如下:

REPORT zu0501_icon_list_macro NO STANDARD PAGE HEADING
       LINE-SIZE 100.

通過如上代碼定義纽门,程序輸出時,頁面寬度為100(能容納100個數(shù)字或英文字符)营罢,不控制輸出行數(shù)赏陵,而是在代碼中定義。

2、對象定義

對象定義部分的代碼如下:

****對象定義
TABLES icon.                           " 定義了一個與表icon同名的工作區(qū)
DATA: col    TYPE sy-colno,            " 用于記錄輸出位置的列
      lin    TYPE sy-linno,            " 用于記錄輸出位置的行
      length TYPE i,                   " 用于確定輸出橫線的長度
      cnt(6) TYPE c,                   " 用于記錄輸出的序號
      cntr   TYPE i,                   " 用于記錄輸出的行數(shù)
      pg     TYPE sy-pagno.            " 頁碼

如上代碼蝙搔,使用類型MAT_AG_TYPE定義了一個含工作區(qū)的標準內(nèi)表缕溉,如此,在輸出時吃型,可以將內(nèi)表數(shù)據(jù)遍歷后放到內(nèi)表自己的工作區(qū)中证鸥,而不需要另外一個結(jié)構存儲。在實際開發(fā)中败玉,偏向于使用不含工作區(qū)的內(nèi)表敌土,如此增加代碼的可讀性。

3运翼、宏定義

本實踐定義了2個分別用于輸出單元格數(shù)據(jù)和輸出列表數(shù)據(jù)抬頭的宏,代碼如下兴枯。

3.1血淌、單元格數(shù)據(jù)輸出宏

此部分代碼如下:

*&---------------------------------------------------------------------*
*&      DEFINE WRITE_GRID
*&---------------------------------------------------------------------*
*       定義宏輸出單元格內(nèi)容數(shù)據(jù)
*       &1: 輸出內(nèi)容
*       &2: 輸出內(nèi)容占位長度
*       &3: 顏色設置,on财剖,文字顏色悠夯,off 背景色
*       &4: 背景顏色濃淡設置,on濃躺坟, off淡沦补,如&3為on不起作用
*       &5: 顏色代碼color_XXXX
*----------------------------------------------------------------------*
DEFINE write_grid.
  lin = sy-linno.   col = sy-colno.                           "將當前輸出所在行列賦值給變量

  FORMAT INVERSE &3 INTENSIFIED &4 COLOR &5.                  "輸出顏色設置
  WRITE: sy-vline NO-GAP, (&2) &1 NO-GAP, sy-vline NO-GAP.    "繪制左右豎線和內(nèi)容

  length = sy-colno - col.                                    "確定橫線輸出長度
  lin = lin - 1.
  SKIP TO LINE lin.                                           "移動到上一行
  ULINE AT col(length).                                       "繪制頂部橫線

  lin = lin + 2.
  SKIP TO LINE lin.                                           "移動到下一行
  ULINE AT col(length).                                       "繪制底部橫線

  lin = lin - 1.    col = sy-colno - 2.
  SKIP TO LINE lin. POSITION col.                         "移動到右側(cè)豎線前一位置,以備下一輸出
END-OF-DEFINITION.

通過DEFINE……END-OF-DEFINITION定義一個宏咪橙,可以在調(diào)用宏時傳入變量值夕膀,并可在代碼中按順序使用&1……&5在宏定義的代碼中使用。

3.2美侦、列表數(shù)據(jù)抬頭輸出宏

此部分代碼如下:

*&---------------------------------------------------------------------*
*&      DEFINE WRITE_PHEAD
*&---------------------------------------------------------------------*
*       定義宏輸出每頁的列表數(shù)據(jù)抬頭
*----------------------------------------------------------------------*
DEFINE write_phead.
  NEW-PAGE NO-HEADING.                             "無頁眉新頁
  pg = pg + 1.
  WRITE:/65  '頁碼:', (3) pg.

  SKIP 2.
  POSITION 5.
  write_grid 'NO' 6 on off col_key.                "調(diào)用宏輸出
  write_grid '圖標名稱' 35 on off col_key.
  write_grid '圖示' 8 on off col_group.
  write_grid '代碼' 4 on off col_total.
  cntr = 5.                                        "包含列表頭已輸出5行
                                                   "每頁輸出行數(shù)重置
  SKIP 2.                                          "空2行以輸出下一行數(shù)據(jù)
  POSITION 5.                                      "空5個字符作為起始位置
END-OF-DEFINITION.

本部分代碼定義的宏产舞,也調(diào)用了“單元格數(shù)據(jù)輸出宏”,以輸出列表數(shù)據(jù)抬頭菠剩,同時此宏其輸出內(nèi)容都是在代碼中定義的易猫,無需在調(diào)用時傳入變量值。

4具壮、獲取和輸出數(shù)據(jù)

獲取和輸出數(shù)據(jù)部分的代碼如下:

*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.
*****獲得ICON數(shù)據(jù)
  SELECT * FROM icon.
    IF cntr => 59 OR cnt IS INITIAL.             "輸出超過59行或在初始時輸出表頭
                                                 "每頁輸出(59-5)/2=27條記錄
      write_phead.                               "調(diào)用宏輸出數(shù)據(jù)列表抬頭
    ENDIF.

    cnt = sy-dbcnt.
    write_grid cnt 6 on off col_key.             "調(diào)用宏輸出數(shù)據(jù)
    write_grid icon-name 35 on off col_key.
    write_grid icon-id 8 on off col_group.
    write_grid icon+1(2) 4 on off col_total.
    cntr = cntr + 2.                             "包括下橫線增加了2行輸出

    SKIP 2.                                      "空2行以輸出下一行數(shù)據(jù)
    POSITION 5.                                  "空5個字符作為起始位置
  ENDSELECT.

本部分通過SELECT語句從icon中獲得數(shù)據(jù)后存儲到icon表同名的工作區(qū)中准颓,然后按需求輸出列表抬頭和逐條輸出系統(tǒng)圖標內(nèi)容。
如上4部分代碼合在一起則實現(xiàn)了本實踐的需求棺妓。

本實踐小結(jié):

宏(Macros)是一段獨立的代碼攘已,與子程序類似,能實現(xiàn)數(shù)據(jù)的運算與輸出涧郊,主要應用于同一程序中需要的重復運算與輸出贯被,以簡化代碼;而與子程序不同,宏不需要定義接收參數(shù)的類型及格式彤灶,其通過&N(N為索引)接收傳入的參數(shù)看幼;宏只能被本程序中定義于宏后面的語名所調(diào)用,因此一般定義于程序最開始幌陕。
可以在表TRMAC中查看到系統(tǒng)所包含的宏诵姜。

(實踐5A1 End)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搏熄,隨后出現(xiàn)的幾起案子棚唆,更是在濱河造成了極大的恐慌,老刑警劉巖心例,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵凌,死亡現(xiàn)場離奇詭異,居然都是意外死亡止后,警方通過查閱死者的電腦和手機瞎惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來译株,“玉大人瓜喇,你說我怎么就攤上這事∏该樱” “怎么了乘寒?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匪补。 經(jīng)常有香客問我伞辛,道長,這世上最難降的妖魔是什么叉袍? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任始锚,我火速辦了婚禮,結(jié)果婚禮上喳逛,老公的妹妹穿的比我還像新娘瞧捌。我一直安慰自己,他們只是感情好润文,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布姐呐。 她就那樣靜靜地躺著,像睡著了一般典蝌。 火紅的嫁衣襯著肌膚如雪曙砂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天骏掀,我揣著相機與錄音鸠澈,去河邊找鬼柱告。 笑死,一個胖子當著我的面吹牛笑陈,可吹牛的內(nèi)容都是我干的际度。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涵妥,長吁一口氣:“原來是場噩夢啊……” “哼乖菱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蓬网,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤窒所,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帆锋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吵取,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年窟坐,在試婚紗的時候發(fā)現(xiàn)自己被綠了海渊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哲鸳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盔憨,到底是詐尸還是另有隱情徙菠,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布郁岩,位于F島的核電站婿奔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏问慎。R本人自食惡果不足惜萍摊,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望如叼。 院中可真熱鬧冰木,春花似錦、人聲如沸笼恰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社证。三九已至逼龟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間追葡,已是汗流浹背腺律。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工奕短, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匀钧。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓翎碑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榴捡。 傳聞我的和親對象是個殘疾皇子杈女,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容