03ABAP語法茸时,A3-顯示物料記錄的表字段值和屬性

圖3-A3 物料表字段屬性界面

需求分析:

1贡定、具體需求

本實(shí)踐有如下需求:

  1. 初始界面輸入物料編號,執(zhí)行后從物料表中獲得對應(yīng)物料編號的記錄可都;
  2. 獲得記錄中指定字段(集團(tuán)缓待、物料編號蚓耽、物料名稱、計(jì)量單位旋炒、類型步悠、制造商、標(biāo)準(zhǔn)價(jià)格瘫镇、價(jià)格單位鼎兽、庫存)的字段說明、字段值铣除、字段類型谚咬、長度、小數(shù)位數(shù)尚粘;
  3. 格式化輸出信息择卦。
2、開發(fā)分析

要達(dá)成本實(shí)踐目標(biāo)郎嫁,需要綜合ABAP的數(shù)據(jù)輸出實(shí)現(xiàn)方式:

  1. 可以通過定義結(jié)構(gòu)秉继,以存儲和處理要獲得和輸出的數(shù)據(jù);
  2. 通過使用OpenSQL語句可以根據(jù)輸入的物料編號泽铛,在對應(yīng)物料表(ztmaterial)表中讀取數(shù)據(jù)并存儲于結(jié)構(gòu)中离赫;
  3. 使用DESCRIBE FIELD關(guān)鍵字可以獲得各字段類型梅忌、長度、小數(shù)位數(shù)等屬性;
  4. 通過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)代碼僵控。

本實(shí)踐小結(jié):

1、控制語句
2鱼冀、DESCRIBE FIELD關(guān)鍵字
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末报破,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子千绪,更是在濱河造成了極大的恐慌充易,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荸型,死亡現(xiàn)場離奇詭異盹靴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瑞妇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門稿静,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辕狰,你說我怎么就攤上這事改备。” “怎么了蔓倍?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵悬钳,是天一觀的道長。 經(jīng)常有香客問我偶翅,道長默勾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任聚谁,我火速辦了婚禮母剥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘垦巴。我一直安慰自己媳搪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布骤宣。 她就那樣靜靜地躺著秦爆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪憔披。 梳的紋絲不亂的頭發(fā)上等限,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天爸吮,我揣著相機(jī)與錄音,去河邊找鬼望门。 笑死形娇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筹误。 我是一名探鬼主播桐早,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厨剪!你這毒婦竟也來了哄酝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤祷膳,失蹤者是張志新(化名)和其女友劉穎陶衅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體直晨,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搀军,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勇皇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩句。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖儒士,靈堂內(nèi)的尸體忽然破棺而出的止,到底是詐尸還是另有隱情,我是刑警寧澤着撩,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站匾委,受9級特大地震影響拖叙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赂乐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一薯鳍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挨措,春花似錦挖滤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至觉既,卻和暖如春惧盹,著一層夾襖步出監(jiān)牢的瞬間乳幸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工钧椰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粹断,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓嫡霞,卻偏偏與公主長得像瓶埋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子诊沪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

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