บางที ไอ้เจ้า รายงาน Material Document List (MB51) มันไม่ตอบโจทย์ User โดยส่วนมากที่เจอก็คือ User อยากได้ข้อมูลที่ไม่มีใน Report MB51 เช่น ข้อมูล WBS Description ฮ้าว เห้ยไม่เหมือนที่คุยกันนี้หว่า งานนี้ เราต้อง Add fields in MB51
ไม่ต้องตกใจนะครับ ทาง SAP ได้เสนอวิธีการขึ้นมา นั้นก็คือ Enhancement Implementation(SE19) ซึ่งตัวนี้แหละ คือพระเอกของเรา
โดยผมขออธิบายเป็น Step ดังนี้นะครับ
1.เข้าไปที่ SE38 ป้อนชื่อโปรแกรมของ MB51 นั้นก็คือ RM07DOCS
2.ค้นหาว่า เจ้าตัวโปรแกรมนี้ มีจุดที่เราสามารถทำการเพิ่ม Code ผ่าน Enhancement Implementation ได้ตรงไหนบ้าง
ให้ คลิกขวา -> Enhancement Operations -> Show Implicit Enhancement Options (ตามรูปข้างล่าง)
3. ให้สังเกต ตามรูปภาพข้างล่าง ในจุดกรอบสีเหลืองใน Code ซึ่งจุดนั้นคือจุดที่เรา สามารถเขียน Code ได้
จุดที่ 1 WRF_RM07DOCS_02_01
คือจุดนี้ เราจะทำการเขียน Code ประกาศตัวแปรที่เราจะใช้ สังเกตได้ว่า บนเส้นฟันหนูหลายอันนั้น มี Enhancement Implementation ชื่อ WRF_RM07DOCS_02_01 ให้เรา ไปที่ SE19 ทำการ Copy มัน แล้ว สร้างเป็น Z Enhancement Implementation ในที่นี้ ขอสร้างเป็น ZIMPMM001_TOP
เมื่อสร้างเสร็จ ให้กลับมาที่ โปรแกรม RM07DOCS ให้สังเกต Code ที่จุดเดิมจะเห็นความเปลี่ยนแปลงว่า มี Enhancement Implementation โผล่ขึ้นมาตามรูปภาพ
ให้เรา ทำการเขียน Code เข้าไปในจุดนี้ วิธีการ ให้คลิก Enhance (Shift+F4) สังเกตสัญลักญณ์ ก้นหอย ตามรูปภาพ
หลังจากนั้นจะเห็นความเปลี่ยนแปลงของหน้าจอ ให้ทำการ วางเคอร์เซอร์ไปจุดที่เราต้องการเขียน Code หลังจากนั้น คลิก รูปดินสอ Change ตามรูปภาพ
หลังจากนั้น เขียน Code ที่เราต้องการในที่นี้ จะเขียน คำสั่ง INCLUDE ZIMPMM001_TOP. ไปเพื่อให้เราแยกการเขียน Code ออกจาก โปรแกรม RM07DOCS เวลาเรามีการแก้ไขอะไรเพิ่มเติมในอนาคต จะได้ไม่ต้องมาคลิก แก้ไขที่ RM07DOCS แต่ให้ไปแก้ไขใน โปรแกรม ZIMPMM001_TOP แทน ในจุดนี้ ให้ประกาศตัวแปรที่เราจะใช้ สำหรับการเพิ่ม Add fields
Code ใน โปรแกรม ZIMPMM001_TOP
DATA: GT_PRPS TYPE TABLE OF PRPS.
โอเค คราวนี้ทุกคน ก็รู้วิธีการ สร้าง Enhancement Implementation และเขียน Code เข้าไปใน Enhancement Implementation แล้ว ต่อไป ผมจะบอก Enhancement Implementation จุดต่อไปนะ แต่คราวนี้ จะบอกแค่จุดและ แนว Code
จุดที่ 2 WRF_RM07DOCS_12_01 จุดนี้ ทำการ ประกาศ ฟิลด์ที่เราจะใช้ ในที่นี้ ผมจะใช้ ฟิลด์ชื่อ POST1
Code ใน โปรแกรม ZIMPMM001_01
DATA: POST1 TYPE PRPS-POST1. "WBS Description
จุดที่ 3 WRF_RM07DOCS_07_01 จุดนี้ เราจะทำการกำหนด คุณลักษณะของฟิลด์ POST1 หลังจากนั้น ทำการดึงการที่เราต้องการไปเก็บไว้ใน Internal Table GT_PRPS เพื่อเอาไปใช้ใน Step ต่อไป
Code ใน โปรแกรม ZIMPMM001
DATA: lt_itab LIKE itab[],
lt_prps TYPE TABLE OF prps.
DATA: lv_line TYPE i,
lv_text TYPE text50.
DESCRIBE TABLE rtt LINES lv_line.
IF sy-tabix = lv_line.
APPEND fc_flat.
CLEAR: fc_flat-seltext_l,
fc_flat-seltext_m,
fc_flat-seltext_s,
fc_flat-reptext_ddic.
fc_flat-fieldname = 'POST1'.
fc_flat-tabname = 'LIST'.
fc_flat-ref_tabname = 'PRPS'.
fc_flat-ref_fieldname = 'POST1'.
lv_text = 'WBS Description'.
fc_flat-seltext_l = lv_text.
fc_flat-seltext_m = lv_text.
fc_flat-seltext_s = lv_text.
fc_flat-reptext_ddic = lv_text.
fc_flat-no_out = ''.
APPEND fc_flat.
IF itab[] IS NOT INITIAL.
*1. WBS Description
lt_itab[] = itab[].
DELETE ADJACENT DUPLICATES FROM lt_itab COMPARING ps_psp_pnr.
DELETE lt_itab WHERE ps_psp_pnr IS INITIAL.
IF lt_itab[] IS NOT INITIAL.
SELECT *
FROM prps
INTO TABLE gt_prps
FOR ALL ENTRIES IN lt_itab
WHERE pspnr = lt_itab-ps_psp_pnr.
ENDIF.
ENDIF.
ENDIF.
จุดที่ 4 WRF_RM07DOCS_10_01 จุดนี้ ให้ทำการเขียน Code ดึงข้อมูลจาก Internal Table GT_PSPS ตามรูปภาพ ไปใส่ ใน LIST-POST1
Code ใน โปรแกรม ZIMPMM001_02
DATA: ls_prps TYPE prps.
*1. WBS Description
IF <itab>-ps_psp_pnr IS NOT INITIAL.
CLEAR ls_prps.
READ TABLE gt_prps INTO ls_prps WITH KEY pspnr = <itab>-ps_psp_pnr.
IF sy-subrc EQ 0.
list-post1 = ls_prps-post1.
ENDIF.
ENDIF.
เสร็จแล้วครับ กับการ Add fields in MB51 using Enhancement Implementation(SE19) ให้สังเกตแต่ละจุด แล้วลอง Debug ดูครับ
บทความนี้ ลองเอาไป Apply ใช้งานกันดูนะครับ