04數(shù)據(jù)輸出,A1-按地區(qū)城市排序輸出客戶列表

圖4-A1 按地區(qū)城市排序輸出客戶列表

實踐A1-按地區(qū)城市排序輸出客戶列表

需求分析:

1、具體需求

本《按地區(qū)城市排序輸出客戶列表》有如下需求:

  1. 從客戶表中取部分字段而不是所有字段進行輸出;
  2. 輸出的客戶列表,首先要按照地區(qū)排序、然后按城市排序;
  3. 需要輸出標題行以對每一列進行說明;
  4. 各列的文字顏色和背景色有不同要求,如客戶列有背景色,客戶名稱列為紅色……。
    整體需求可見圖。
圖4- 1 整體需求
2、開發(fā)分析

要達成本實踐目標,需要綜合ABAP的數(shù)據(jù)輸出實現(xiàn)方式:

  1. ABAP可通過Open SQL從表中獲得要輸出的數(shù)據(jù)存儲到內(nèi)表;
  2. 通過Write語句可以將數(shù)據(jù)輸出到屏幕,而在輸出時需要考慮每列數(shù)據(jù)輸出起始位置及所占字符長度;
  3. 可以通過Format語句控制輸出顏色。

實踐步驟:

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

No 部分 說明
1 程序聲明 聲明本程序執(zhí)行后是否包含標準標題,數(shù)據(jù)輸出寬度和每頁的行數(shù)量為多少
2 對象定義 通過定義變量或常量或要使用的表結(jié)構等,以在程序執(zhí)行過程中計算和存儲臨時值
3 頁眉輸出 如不指定標準標題,則可以通過代碼設置輸出的頁眉
4 獲取數(shù)據(jù) 從表中獲得要輸出的數(shù)據(jù)數(shù)據(jù)并存儲到內(nèi)表中以待后續(xù)輸出
5 輸出數(shù)據(jù) 將內(nèi)表中的數(shù)據(jù)按要求輸出
1、程序聲明

程序聲明部分代碼如下:

REPORT  zu0401_cust_open_sql NO STANDARD PAGE HEADING
       LINE-SIZE 100 LINE-COUNT 80.

REPORT 程序名稱:是對程序的定義,表明此程序代碼不是FUNCTION MODULE(功能函數(shù)),不是CLASS(類),而是可以執(zhí)行的可以輸出數(shù)據(jù)的此程序;這是對程序最基本的聲明,且必須存在的部分。
NO STANDARD PAGE HEADING:標準的標題定義,可在程序編輯器中通過菜單“轉(zhuǎn)到?文本元素”中的“列表標題”進行定義;而如果設置為此,則表示此程序不使用標準的“列表標題”。
LINE-SIZE 100 LINE-COUNT 80:對頁面的寬度高度進行定義,其中LINE-SIZE為按英文字母長度定義的頁面寬度(如此定義為100表示能容納100個數(shù)字或字母,而如果是中文則按一個中文按2個字符算);LINE-COUNT則是頁面的高度(如此定義為80,則表示每一頁面最多能容納80行,超過則在下一頁顯示)。

2、對象定義

對象定義部分代碼如下:

*****對象定義
TYPES: BEGIN OF cust_type,                              " CUST_TYPE-類型名稱
         customerid   TYPE ztcustomer-customerid,
         customername TYPE ztcustomer-customername,
         region       TYPE ztcustomer-region,
         city         TYPE ztcustomer-city,
         address      TYPE ztcustomer-address,
         contact      TYPE ztcustomer-contact,
         cphone       TYPE ztcustomer-cphone,
       END OF cust_type.

DATA:cust_stru TYPE cust_type,
     cust_itab TYPE STANDARD TABLE OF cust_type.

如上代碼,首先通過TYPES定義了一個名稱為CUST_TYPE的類型,此類型包含了要輸出的字段:customerid(客戶編號)、customername(客戶名稱)、region(地區(qū))、city(城市)、address(地址)、contact(聯(lián)系人)、cphone(電話);此類型也可在數(shù)據(jù)字典中定義好后,由此在不同的程序代碼中都可以使用。
然后,通過DATA,使用CUST_TYPE定義了一個結(jié)構CUST_STRU,此結(jié)構可以在后面的程序中存儲要輸出的數(shù)據(jù);也使用此CUST_TYPE定義了一個內(nèi)表CUST_ITAB,此內(nèi)表是一個標準的不含Work Area(工作區(qū))的內(nèi)表,這個內(nèi)表用來存儲從表中獲得的數(shù)據(jù)。
定義的類型、結(jié)構及內(nèi)表在數(shù)據(jù)處理過程中的關系如圖4-2。

圖4- 2 數(shù)據(jù)處理的過程
3、輸出頁眉

輸出頁眉部分代碼如下:

*&----------------------------------------------------------------------*
*& 輸出頁眉
*&----------------------------------------------------------------------*
TOP-OF-PAGE.                                           "頁眉事件
  FORMAT RESET.
  WRITE:/5(90) sy-uline,
        /5 '客戶ID', 15 '客戶地址', 30 '地區(qū)', 35 '城市', 40 '地址' , 60 '聯(lián)系人', 70 '電話號碼',
        /5(90) sy-uline.

頁眉部分代碼,要通過TOP-OF-PAGE定義,在此部分可以定義每一頁上方輸出的標題行。
在如上代碼中首先通過FORMAT RESET,重置輸出數(shù)據(jù)的顏色,因為后面的數(shù)據(jù)輸出時設置了顏色。
然后,通過WRITE進行數(shù)據(jù)的輸出,其中:
/5(90) sy-uline,表示每次執(zhí)行時換行輸出,且前面空4個字符,從第5位開始輸出,輸出的內(nèi)容是長度為90的橫線(sy-uline)。
/5 '客戶ID', 15 '客戶地址',……,則是按要求輸出標題文字。
輸出效果如圖4-3。

圖4- 3 頁眉輸出
4、獲得數(shù)據(jù)

獲得數(shù)據(jù)部分代碼如下:

*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.                                    "數(shù)據(jù)處理事件
*****獲得客戶信息
  SELECT                          "通過SELECT 語句從表ZTCUSTOMER中獲得數(shù)據(jù)并賦值到內(nèi)表
    customerid customername region city address contact cphone
    INTO TABLE cust_itab
    FROM ztcustomer
    ORDER BY region city.          "默認升序:ASCENDING,降序則為:DESCENDING

通過START-OF-SELECTION區(qū)分頁眉部分的處理,后面的代碼則可進行數(shù)據(jù)的處理,包括獲得數(shù)據(jù)和輸出數(shù)據(jù)。
如上SELECT代碼為ABAP的Open SQL,是為了滿足SAP系統(tǒng)在不同底層數(shù)據(jù)庫時的使用,其語句規(guī)范接近標準的SQL又有所差異;有了Open SQL,ABAPer只需要熟悉和掌握其語法則可從相應表中獲得數(shù)據(jù),而不用考慮使用的底層數(shù)據(jù)庫是Oracle還是DB2還是MysqlServer。
如上代碼執(zhí)行完成后,則可將數(shù)據(jù)從ZTCUSTOMER表中,獲得所需的各個字段的數(shù)據(jù)并存儲到內(nèi)表CUST_ITAB中,并按REGION(地區(qū))、CITY(城市)列升序,其中也可增加WHERE條件以篩選數(shù)據(jù)(本實踐中略)。

5、輸出數(shù)據(jù)

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

*****循環(huán)輸出客戶信息
  LOOP AT cust_itab INTO cust_stru .
    FORMAT INVERSE OFF COLOR COL_KEY.   "設置輸出格式為含背景色,且為藍色
    WRITE:
        /5 cust_stru-customerid,        "按FORMAT語句的設置輸出
        15 cust_stru-customername INVERSE ON COLOR COL_NEGATIVE, "無背景色,文字為紅色
        30 cust_stru-region INVERSE ON,                          "無背景色,文字為藍色
        35 cust_stru-city INVERSE ON COLOR COL_POSITIVE,         "無背景色,文字為綠色
        40 cust_stru-address INVERSE ON COLOR COL_GROUP,         "無背景色,文字為橙色
        60 cust_stru-contact,
        70 cust_stru-cphone.

  ENDLOOP.

如上代碼,是將逐條從內(nèi)表CUST_ITAB中獲取數(shù)據(jù)并賦值給結(jié)構CUST_STRU后輸出。
同時通過FORMAT語句設置后續(xù)數(shù)據(jù)輸出的默認格式,其中INVERSE OFF表示為背景色,COLOR COL_KEY表示為藍色;同時WRITE語句中也可控制不同內(nèi)容的格式。
輸出效果如圖4-4。

圖4- 4 數(shù)據(jù)明細輸出

如上從上到下各部分代碼則是組成實現(xiàn)本實踐的全部代碼,編寫完成后激活,則可進行程序的測試發(fā)布。

輸出小結(jié):

1、程序的輸出聲明
項目 說明
NO STANDARD PAGE HEADING 不使用標準的頁眉
LINE-SIZE width 頁眉寬度(能容納的英文字符或數(shù)字)
LINE-COUNT page_lines
[(footer_lines)]
頁面高度(一個頁面能容納的行數(shù))
如指定footer_lines,則頁面中保留行給頁腳以給END-OF-PAGE使用
2 、WRITE語句
基本語法
/ 反斜杠為換行顯示
n 從第n個字符開始輸出
(n) 如不指定(n),則按變量常量或字符的長度輸出,按此指定后,則按此指定長度輸出,如變量常量或字符的長度超過則被截取
WRITE AT 如使用WRITE AT,則字符起始輸出位置n及輸出長度(n)都可以為變量常量,否則只能使用數(shù)值
例子 WRITE /5(90) sy-uline.
從第5位開始,輸出長度為90的橫線
顯示格式
對齊 LEFT-JUSTIFIED 左對齊(字符類型默認)
CENTERED 中對齊
RIGHT-JUSTIFIED 右對齊(數(shù)字類型默認)
UNDER <g> 對齊到另一個輸出對象<g>
輸出 NO-GAP 不保留字段間空格
NO-ZERO 不顯示前導0
NO-SIGN 不顯示正負號
USING EDIT MASK <m> 按掩碼指定輸出
USING NO EDIT MASK 不按掩碼指定輸出
CURRENCY <c> 輸出代碼c對應的貨幣
小數(shù) DECIMALS <d> 顯示d位小數(shù)
EXPONENT <e> F(浮點數(shù))exponent的值
ROUND <r> 四舍五入至r位小數(shù)
日期 DD/MM/YY MM/DD/YY
DD/MM/YYYY MM/DD/YYYY
DDMMYY MMDDYY YYMMDD
按不同格式指定日期輸出
例子 WRITE / 'C10007' using edit mask _:_____. "輸出為C:10007
WRITE / sy-datum mmddyy. "輸出當前日期為10/21/17
WRITE / 'Hello', 'World' NO-GAP. "HelloWorld間無空格
3、空行輸出
項目 說明
SKIP [<n>] 從當前行開始,空n行后再輸出
SKIP TO LINE <n> 跳到第n后輸出
4、顏色控制
FORMAT語句
FORMAT RESET 顏色重置
FORMAT INVERSE OFF 背景色
FORMAT INVERSE ON 前景色
顏色
數(shù)字(COLOR=n) 代碼(COL_代碼) 顏色 用途
1 HEADING 灰藍色 一般用途
2 NORMAL 淺灰色 列表內(nèi)容
3 TOTAL 黃色 匯總
4 KEY 藍色 關鍵字
5 POSITIVE 綠色 正確
6 NEGATIVE 紅色 錯誤
7 GROUP 橙色 控制

(實踐A1 End)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容