需求分析:
1贡定、具體需求
本實(shí)踐有如下需求:
- 初始界面輸入物料編號,執(zhí)行后從物料表中獲得對應(yīng)物料編號的記錄可都;
- 獲得記錄中指定字段(集團(tuán)缓待、物料編號蚓耽、物料名稱、計(jì)量單位旋炒、類型步悠、制造商、標(biāo)準(zhǔn)價(jià)格瘫镇、價(jià)格單位鼎兽、庫存)的字段說明、字段值铣除、字段類型谚咬、長度、小數(shù)位數(shù)尚粘;
- 格式化輸出信息择卦。
2、開發(fā)分析
要達(dá)成本實(shí)踐目標(biāo)郎嫁,需要綜合ABAP的數(shù)據(jù)輸出實(shí)現(xiàn)方式:
- 可以通過定義結(jié)構(gòu)秉继,以存儲和處理要獲得和輸出的數(shù)據(jù);
- 通過使用OpenSQL語句可以根據(jù)輸入的物料編號泽铛,在對應(yīng)物料表(ztmaterial)表中讀取數(shù)據(jù)并存儲于結(jié)構(gòu)中离赫;
- 使用DESCRIBE FIELD關(guān)鍵字可以獲得各字段類型梅忌、長度、小數(shù)位數(shù)等屬性;
- 通過Write語句可以將數(shù)據(jù)輸出到屏幕萨咳,而在輸出時(shí)需要考慮每列數(shù)據(jù)輸出起始位置及所占字符長度族展。
實(shí)踐步驟:
本實(shí)踐通過程序編輯器(SE38)即可完成窝稿,編寫的代碼將有如下幾部分組成从绘,按開發(fā)人員風(fēng)格不同,其組成部分并非強(qiáng)制一致撵幽。
No | 部分 | 說明 |
---|---|---|
1 | 程序聲明 | 聲明本程序執(zhí)行后是否包含標(biāo)準(zhǔn)標(biāo)題灯荧,數(shù)據(jù)輸出寬度和每頁的行數(shù)量為多少 |
2 | 對象定義 | 通過定義變量或常量或要使用的表結(jié)構(gòu)等,以在程序執(zhí)行過程中計(jì)算和存儲臨時(shí)值 |
3 | 頁眉輸出 | 如不指定標(biāo)準(zhǔn)標(biāo)題盐杂,則可以通過代碼設(shè)置輸出的頁眉 |
4 | 獲取數(shù)據(jù) | 從表中獲得要輸出的數(shù)據(jù)數(shù)據(jù)逗载,并存儲到內(nèi)表中以待后續(xù)輸出 |
5 | 輸出數(shù)據(jù) | 將內(nèi)表中的數(shù)據(jù)按要求輸出 |
1、程序聲明
程序聲明部分代碼如下:
REPORT zu0303_mat_stru_data.
REPORT 程序名稱:是對程序的定義链烈,表明此程序代碼不是FUNCTION MODULE(功能函數(shù))厉斟,不是CLASS(類),而是可以執(zhí)行的可以輸出數(shù)據(jù)的此程序强衡;這是對程序最基本的聲明擦秽,且必須存在的部分。
2、對象定義
對象定義部分代碼如下:
*****對象定義
DATA: BEGIN OF mat_stru, " MAT_STRU-結(jié)構(gòu)體名稱
mandt TYPE ztmaterial-mandt, "通過已有表字段定義類型
materialid TYPE ztmaterial-materialid,
materialname TYPE ztmaterial-materialname,
sunit TYPE ztmaterial-bunit,
materialtype TYPE ztmaterial-materialtype,
supplier TYPE ztmaterial-supplier,
sprice TYPE ztmaterial-sprice,
scurrency TYPE ztmaterial-scurrency,
inventory TYPE ztmaterial-inventory,
END OF mat_stru.
*DATA: MAT_STRU TYKE ZU02_MAT_STRU. "通過字典對象定義結(jié)構(gòu)體
DATA: typ(1) TYPE c,
len TYPE i,
olen TYPE i,
deci TYPE i,
compo TYPE i.
PARAMETERS: matnr TYPE ztmaterial-materialid DEFAULT '1017'.
如上代碼對程序中要使用的對象進(jìn)行定義感挥,首先定義了1個(gè)結(jié)構(gòu)mat_stru缩搅,此結(jié)構(gòu)包含如下字段:mandt(集團(tuán))、materialid(物料編號)触幼、materialname(物料名稱)硼瓣、sunit(計(jì)量單位)、materialtype(物料類型)置谦、supplier(制造商)堂鲤、sprice(標(biāo)準(zhǔn)價(jià)格)、scurrency(價(jià)格單位)媒峡、inventory(庫存)瘟栖。
然后定義了如下變量以存儲和輸出字段的各種屬性:typ(字段名)、len(字段說明)丝蹭、 olen(字段類型)慢宗、deci(長度)坪蚁、compo(小數(shù)位數(shù))奔穿。
同時(shí)通過PARAMETERS定義初始界面中要輸入的物料編號,以作為獲取記錄的條件敏晤,默認(rèn)為“1017”贱田。
3、頁眉輸出
頁眉部分代碼嘴脾,要通過TOP-OF-PAGE定義男摧,在此部分可以定義每一頁上方輸出的標(biāo)題行。
*****輸出頁眉
TOP-OF-PAGE. "頁眉事件
WRITE:/5(75) sy-uline,
/5 '字段', 20 '字段說明', 35(15) '字段值', 50 '字段類型', 60 '長度' , 70 '小數(shù)位數(shù)',
/5(75) sy-uline.
4译打、獲得數(shù)據(jù)
獲得數(shù)據(jù)部分代碼如下:
*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION. "數(shù)據(jù)處理事件
SELECT SINGLE "通過SELECT 語句從表ZTMETERIAL中獲得數(shù)據(jù)并賦值到結(jié)構(gòu)體
mandt materialid materialname sunit materialtype supplier sprice scurrency inventory
INTO mat_stru
FROM ztmaterial
WHERE materialid = matnr.
如上SELECT代碼為ABAP的Open SQL語句耗拓,通過其可以將數(shù)據(jù)從ztmaterial表中,獲得所需的各個(gè)字段的數(shù)據(jù)并插入到mat_stru結(jié)構(gòu)中奏司,WHERE條件以篩選數(shù)據(jù)物料編號乔询。
5、變量賦值和輸出
賦值和輸出數(shù)據(jù)部分代碼如下:
*****獲得字段屬性并輸出
*****客戶端
DESCRIBE FIELD mat_stru-mandt TYPE typ. "獲得字段的類型
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'. "獲得字段的長度韵洋,不同類型對象的長度方式有差異
DESCRIBE FIELD mat_stru-mandt LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-mandt LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-mandt DECIMALS deci. "對類型為F和P的對象獲得小數(shù)位數(shù)
ENDIF.
WRITE:/5 'MANDT', 20 '集團(tuán)', 35(15) mat_stru-mandt, 50 typ, 60 len , 70 deci.
*****物料編號
DESCRIBE FIELD mat_stru-materialid TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-materialid LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-materialid LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-materialid DECIMALS deci.
ENDIF.
WRITE:/5 'MATERIALID', 20 '物料編號', 35(15) mat_stru-materialid, 50 typ, 60 len , 70 deci.
*****物料名稱
DESCRIBE FIELD mat_stru-materialname TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-materialname LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-materialname LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-materialname DECIMALS deci.
ENDIF.
WRITE:/5 'MATERIALNAME', 20 '物料名稱', 35(15) mat_stru-materialname, 50 typ, 60 len , 70 deci.
*****銷售計(jì)量單位
DESCRIBE FIELD mat_stru-sunit TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-sunit LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-sunit LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-sunit DECIMALS deci.
ENDIF.
WRITE:/5 'SUNIT', 20 '銷售計(jì)量單位', 35(15) mat_stru-sunit, 50 typ, 60 len , 70 deci.
*****物料類型
DESCRIBE FIELD mat_stru-materialtype TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-materialtype LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-materialtype LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-materialtype DECIMALS deci.
ENDIF.
WRITE:/5 'MATERIALTYPE', 20 '物料類型', 35(15) mat_stru-materialtype, 50 typ, 60 len , 70 deci.
*****制造商
DESCRIBE FIELD mat_stru-supplier TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-supplier LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-supplier LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-supplier DECIMALS deci.
ENDIF.
WRITE:/5 'SUPPLIER', 20 '制造商', 35(15) mat_stru-supplier, 50 typ, 60 len , 70 deci.
*****標(biāo)準(zhǔn)價(jià)格
DESCRIBE FIELD mat_stru-sprice TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
* DESCRIBE FIELD MAT_STRU-SPRICE LENGTH LEN IN CHARACTER MODE. "對于類型為P的對象竿刁,不得通過CHARACTER語句
ELSE.
DESCRIBE FIELD mat_stru-sprice LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-sprice DECIMALS deci.
ENDIF.
WRITE:/5 'SPRICE', 20 '標(biāo)準(zhǔn)價(jià)格', 35(15) mat_stru-sprice, 50 typ, 60 len , 70 deci.
*****價(jià)格單位
DESCRIBE FIELD mat_stru-scurrency TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
DESCRIBE FIELD mat_stru-scurrency LENGTH len IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-scurrency LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-scurrency DECIMALS deci. " 字段小數(shù)位數(shù)
ENDIF.
WRITE:/5 'SCURRENCY', 20 '價(jià)格單位', 35(15) mat_stru-scurrency, 50 typ, 60 len , 70 deci.
*****庫存
DESCRIBE FIELD mat_stru-inventory TYPE typ.
IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
* DESCRIBE FIELD MAT_STRU-INVENTORY LENGTH LEN IN CHARACTER MODE.
ELSE.
DESCRIBE FIELD mat_stru-inventory LENGTH len IN BYTE MODE.
ENDIF.
deci = 0.
IF typ = 'F' OR typ = 'P'.
DESCRIBE FIELD mat_stru-inventory DECIMALS deci. " 字段小數(shù)位數(shù)
ENDIF.
WRITE:/5 'INVENTORY', 20 '庫存', 35(15) mat_stru-inventory, 50 typ, 60 len , 70 deci.
如上代碼,通過DESCRIBE FIELD取得字段類型搪缨、長度食拜、小數(shù)位數(shù),并結(jié)合內(nèi)表里的數(shù)量逐條賦值給變量輸出副编。
WRITE輸出格式:字段名稱(字符)负甸、字段說明(字符)、字段值(結(jié)構(gòu))、字段類型(typ)呻待、長度(len)煮盼、小數(shù)位數(shù)(deci)。
如上5部分代碼按順序組合在一起带污,則是此開發(fā)實(shí)踐的完整實(shí)現(xiàn)代碼僵控。