รายงาน ALV ใน SAP บทช่วยสอน - โปรแกรมดูรายการ ABAP
⚡ สรุปอย่างชาญฉลาด
รายงาน ALV ใน SAPรายการที่สร้างโดย ABAP List Viewer ช่วยให้สามารถจัดแนวคอลัมน์ เรียงลำดับ กรองข้อมูล คำนวณผลรวม และผลรวมย่อยได้โดยไม่ต้องเขียนโค้ดเพิ่มเติม หน้านี้อธิบายถึงประเภทรายการแบบง่าย แบบบล็อก และแบบลำดับชั้น รวมถึงโมดูลฟังก์ชัน REUSE และรูปแบบการแสดงผลต่างๆ

ALV คืออะไรใน SAP เอบัพ?
คุณสมบัติพื้นฐานที่ผู้ใช้ต้องการในรายงานทั่วไป ได้แก่ “การจัดเรียงคอลัมน์” การเรียงลำดับ การกรอง ผลรวมย่อย ผลรวมทั้งหมด เป็นต้น การที่จะสร้างคุณสมบัติเหล่านี้ขึ้นมาเองทั้งหมด ต้องใช้ความพยายามในการเขียนโค้ดเป็นอย่างมาก เพื่อหลีกเลี่ยงความยุ่งยากนั้น เราสามารถใช้แนวคิดที่เรียกว่า ABAP List Viewer (ALV) ได้
แต่ละรายงานเหล่านี้มีให้ โมดูลฟังก์ชัน ซึ่งช่วยในการผลิตผลลัพธ์ที่ต้องการโดยไม่ต้องใช้ความพยายามมากนัก มาดูรายละเอียดกันดีกว่า –
ALV แบบดั้งเดิมมีรายการอยู่สามประเภท และแต่ละประเภทจะมีชุดโมดูลฟังก์ชัน REUSE ของตัวเอง:
- รายงานฉบับย่อ: ตารางภายในหนึ่งตารางแสดงผลเป็นแบบรายการหรือแบบตารางกริด
- รายงานบล็อก: ตารางภายในหลายตารางแสดงเรียงกันเป็นบล็อกแยกกัน
- รายงานแบบลำดับชั้น: ตารางส่วนหัวและตารางส่วนที่เชื่อมโยงกันด้วยคีย์ร่วมกัน
รายงานอย่างง่าย
โมดูลฟังก์ชั่นที่สำคัญในสิ่งเหล่านี้ รายงาน คือ -
- Reuse_alv_fieldcatalog_merge
- Reuse_alv_list_display
- Reuse_alv_events_get
- Reuse_alv_grid_display
- Reuse_alv_commentary_write
REUSE_ALV_FIELDCATALOG_MERGE
โมดูลฟังก์ชันนี้ใช้เพื่อเติมแค็ตตาล็อกฟิลด์ซึ่งจำเป็นต่อการแสดงข้อมูลใน ALV
หากข้อมูลเอาต์พุตมาจากตารางพจนานุกรมเดียวและเลือกคอลัมน์ทั้งหมดแล้ว เราไม่จำเป็นต้องสร้างแค็ตตาล็อกฟิลด์โดยเฉพาะ ก็เพียงพอแล้วที่จะกล่าวถึงชื่อตารางเป็นพารามิเตอร์ (I_structure_name) ใน REUSE_ALV_LIST_DISPLAY แต่ในกรณีอื่นเราจำเป็นต้องสร้างมันขึ้นมา
หมายเหตุ: สามารถกรอก Fieldcatalog ด้วยตนเองได้เช่นกัน โดยการกรอกรายละเอียดที่จำเป็นทั้งหมดลงในตารางภายใน
พารามิเตอร์ที่สำคัญคือ:
1. การส่งออก:
- I_program_name : รหัสรายงาน
- I_internal_tabname : ตารางเอาต์พุตภายใน
- I_inclname : รวมหรือชื่อรายงานที่จัดการฟอร์มไดนามิกทั้งหมด
2. การเปลี่ยนแปลง
- ct_fieldcat : อัน ตารางภายใน ด้วยประเภท SLIS_T_FIELDCAT_ALV ซึ่งได้รับการประกาศไว้ในประเภทพูล SLIS
REUSE_ALV_LIST_DISPLAY
นี่คือโมดูลฟังก์ชันที่พิมพ์ข้อมูล
พารามิเตอร์ที่สำคัญคือ:
1. การส่งออก:
- I_callback_program : รหัสรายงาน
- I_bypassing_buffer : 'X'
- I_buffer_active : ' '
- I_callback_pf_status_set : รูทีนที่ผู้ใช้สามารถตั้งค่าสถานะ pf ของตนเองหรือเปลี่ยนการทำงานของสถานะ pf ที่มีอยู่
- I_callback_user_command : รูทีนที่จัดการโค้ดฟังก์ชัน
- I_struction name : ชื่อของตารางพจนานุกรม
- Is_Layout : โครงสร้างสำหรับกำหนดเค้าโครงของรายงาน
- It_fieldcat : ตารางภายในพร้อมรายการฟิลด์ทั้งหมดและคุณลักษณะที่จะพิมพ์ (ฟังก์ชันนี้สามารถเติมตารางนี้ได้โดยอัตโนมัติ)
- It_events : ตารางภายในพร้อมรายการเหตุการณ์ที่เป็นไปได้ทั้งหมดของ ALV และชื่อแบบฟอร์มที่เกี่ยวข้อง
2. ตาราง:
- ก. t_outtab : ตารางภายในพร้อมข้อมูลที่จะส่งออก
REUSE_ALV_EVENTS_GET
ส่งคืนตารางเหตุการณ์ที่เป็นไปได้สำหรับประเภทรายการ AA
1. นำเข้า:
Et_Events :ตารางเหตุการณ์จะถูกส่งกลับพร้อมกับเหตุการณ์ CALLBACK ที่เป็นไปได้ทั้งหมดสำหรับประเภทรายการที่ระบุ (คอลัมน์ 'NAME') เพื่อให้เหตุการณ์ที่ Callback ประมวลผลได้ จะต้องกรอกฟิลด์ 'FORM' หากฟิลด์ถูกเตรียมใช้งาน เหตุการณ์จะถูกละเว้น รายการสามารถอ่านได้จากตารางเหตุการณ์ ฟิลด์ 'FORM' ที่กรอก และรายการที่แก้ไขโดยใช้ค่าคงที่จากประเภทพูล SLIS
2. การส่งออก:
I_list_type: 0 = รายการแบบง่าย REUSE_ALV_LIST_DISPLAY
1 = รายการลำดับชั้น REUSE_ALV_HIERSEQ_LIST_DISPLAY
2 = รายการบล็อกแบบง่าย REUSE_ALV_BLOCK_LIST_APPEND
3 = รายการบล็อกแบบลำดับชั้น REUSE_ALV_BLOCK_LIST_HS_APPEND
REUSE_ALV_GRID_DISPLAY
ฟังก์ชันใหม่จากเวอร์ชัน ABAP4.6 เพื่อแสดงผลลัพธ์ในรูปแบบตารางแทนที่จะแสดงตัวอย่าง
พารามิเตอร์ : เหมือนกับ reuse_alv_list_display
หมายเหตุ: ตาราง (Grid) ไม่สามารถรองรับข้อมูลปริมาณมากได้ ฟังก์ชันต่างๆ เช่น การเรียงลำดับ การเลื่อนลง จะใช้ทรัพยากร/เวลามาก หากปริมาณข้อมูลที่จะแสดงมีจำนวนมาก ไม่มีคำจำกัดความที่ชัดเจนว่าหากปริมาณข้อมูลเป็น X ควรใช้รายการ (List) หรือตาราง (Grid) แต่ผู้พัฒนาต้องตัดสินใจตามประสบการณ์ของตนเอง หากไม่แน่ใจ รายการ (List) อาจเป็นตัวเลือกที่ดีกว่า
REUSE_ALV_COMMENTARY_WRITE
ซึ่งใช้ในเหตุการณ์ด้านบนของหน้าเพื่อพิมพ์ส่วนหัวและความคิดเห็นอื่นๆ สำหรับรายการ
พารามิเตอร์ที่สำคัญ
- It_list_commentary : ตารางภายในที่มีส่วนหัวเป็นประเภท slis_t_listheader
ตารางภายในนี้มีสามฟิลด์:
- ประเภท : 'H' – ส่วนหัว, 'S' – การเลือก, 'A' – การดำเนินการ
- คีย์ : เฉพาะเมื่อพิมพ์เป็น 'S'
- ข้อมูล : ข้อความที่จะพิมพ์
ตัวอย่าง: รายงาน ALV Grid แบบง่าย
โปรแกรมด้านล่างนี้จะแปลงโมดูลฟังก์ชันด้านบนให้เป็นรายงานที่ใช้งานได้จริง โดยจะอ่านตารางกำหนดการบิน SPFLI สร้างแคตตาล็อกฟิลด์โดยอัตโนมัติ และแสดงผลลัพธ์ในรูปแบบตาราง
REPORT z_alv_demo. TYPE-POOLS: slis. DATA: lt_spfli TYPE STANDARD TABLE OF spfli, lt_fieldcat TYPE slis_t_fieldcat_alv, ls_layout TYPE slis_layout_alv. START-OF-SELECTION. * 1. Read the data into the output table SELECT * FROM spfli INTO TABLE lt_spfli. * 2. Build the field catalog from the dictionary structure CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-repid i_internal_tabname = 'LT_SPFLI' i_structure_name = 'SPFLI' CHANGING ct_fieldcat = lt_fieldcat. * 3. Set the layout and display the grid ls_layout-zebra = 'X'. ls_layout-colwidth_optimize = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = ls_layout it_fieldcat = lt_fieldcat i_save = 'A' TABLES t_outtab = lt_spfli.
พารามิเตอร์สามตัวเป็นส่วนสำคัญที่สุด I_STRUCTURE_NAME ช่วยให้สามารถดึงแคตตาล็อกฟิลด์จากพจนานุกรมได้ ดังนั้นจึงไม่ต้องกำหนดคอลัมน์ด้วยตนเอง IS_LAYOUT เปิดใช้งานแถวแบบแถบและปรับความกว้างของคอลัมน์ให้เหมาะสม I_SAVE = 'A' อนุญาตให้บันทึกรูปแบบการแสดงผลทั้งแบบที่ผู้ใช้กำหนดเองและแบบมาตรฐานจากรายการที่เสร็จสมบูรณ์แล้ว
รายงานบล็อก
ดูเหมือนรายงานธรรมดา แต่รายงานนี้มีคุณลักษณะของการเรียงลำดับและกรองข้อมูลเท่านั้น รายงานนี้ใช้ในกรณีที่คุณต้องแสดงรายงานมากกว่าหนึ่งรายงานในผลลัพธ์ ในทางเทคนิคแล้ว หากคุณมีตารางภายในหลายตารางที่มีข้อมูลที่ต้องแสดงเป็นบล็อกแยกกัน เราจะใช้รายงานแบบบล็อกของ ALV
ฟังก์ชั่นสำคัญที่ใช้ในการสร้างรายงานนี้คือ:
- REUSE_ALV_BLOCK_LIST_INIT
- REUSE_ALV_BLOCK_LIST_APPEND
- REUSE_ALV_BLOCK_LIST_DISPLAY
REUSE_ALV_BLOCK_LIST_INIT
โมดูลฟังก์ชันนี้ใช้เพื่อตั้งค่าสถานะ GUI เริ่มต้น ฯลฯ พารามิเตอร์จะคล้ายกับพารามิเตอร์ที่ใช้ใน reuse_alv_list_display หรือ reuse_alv_grid_display
REUSE_ALV_BLOCK_LIST_APPEND
โมดูลฟังก์ชันนี้จะเพิ่มข้อมูลลงในบล็อก
พารามิเตอร์ที่สำคัญ
1.ส่งออก:
- is_layout : การตั้งค่าเค้าโครงสำหรับบล็อก
- it_fieldcat : แค็ตตาล็อกฟิลด์
- I_tabname : ชื่อตารางภายในพร้อมเหตุการณ์ที่เป็นไปได้ทั้งหมด
2.ตาราง :
- t_outtab : ตารางภายในพร้อมข้อมูลเอาต์พุต
REUSE_ALV_BLOCK_LIST_DISPLAY
โมดูลฟังก์ชันนี้แสดงรายการพร้อมข้อมูลที่ต่อท้ายโดยฟังก์ชันด้านบน
พารามิเตอร์ : พารามิเตอร์ทั้งหมดเป็นทางเลือก
รายงานลำดับชั้น
การแสดงผลแบบลำดับชั้นใช้สำหรับแสดงข้อมูลที่เกี่ยวข้อง เช่น ใบสั่งขายและรายละเอียดรายการสินค้า โดยรายละเอียดใบสั่งขายสามารถเป็นข้อมูลส่วนหัวได้ ในขณะที่รายการในใบสั่งขายสามารถเป็นข้อมูลรายการสินค้าได้
โมดูลฟังก์ชันที่ใช้สำหรับสิ่งนี้คือ
REUSE_ALV_HIERSEQ_LIST_DISPLAY
ส่งออก:
- I_CALLBACK_PROGRAM
- I_CALLBACK_PF_STATUS_SET
- I_CALLBACK_USER_COMMAND
- IS_LAYOUT
- it_fieldcat
- มัน_เหตุการณ์
- I_tabname_header : ชื่อของตารางภายในในโปรแกรมที่มีข้อมูลเอาต์พุตของระดับลำดับชั้นสูงสุด
- I_tabname_item : ชื่อของตารางภายในในโปรแกรมที่มีข้อมูลเอาต์พุตของระดับลำดับชั้นต่ำสุด
- Is_keyinfo : โครงสร้างนี้มีชื่อฟิลด์ส่วนหัวและตารางรายการซึ่งเชื่อมโยงทั้งสองตาราง (คีย์ที่ใช้ร่วมกัน)
ตาราง
- t_outtab_header : ตารางส่วนหัวที่มีข้อมูลที่จะส่งออก
- t_outtab_item : ชื่อของตารางภายในในโปรแกรมที่มีข้อมูลเอาต์พุตของระดับลำดับชั้นต่ำสุด
คำจำกัดความทั้งหมดของตารางภายใน โครงสร้าง และค่าคงที่จะถูกประกาศในประเภทพูลที่เรียกว่า สลิส. ตารางภายในนี้สามารถเติมได้โดยอัตโนมัติโดยใช้ REUSE_ALV_FIELDCATALOG_MERGE'
แสดงรูปแบบต่างๆ
- รูปแบบการแสดงผลใช้เพื่อตั้งค่าคุณสมบัติเริ่มต้นของเอาต์พุต alv เช่น เกณฑ์การเรียงลำดับ เกณฑ์การกรอง การรวมและผลรวมย่อย ฯลฯ
- รูปแบบการแสดงผลอาจเป็นรูปแบบเฉพาะของผู้ใช้และเป็นมาตรฐาน (ผู้ใช้ทุกคนสามารถใช้รูปแบบมาตรฐานได้)
- รูปแบบการแสดงผลที่สามารถบันทึกได้นั้นถูกควบคุมโดยพารามิเตอร์ i_save ซึ่งส่งผ่านเข้าไปในฟังก์ชันโมดูล reuse_alv_list_display / reuse_alv_grid_display
- คุณสามารถระบุตัวเลือกบนหน้าจอการเลือกเพื่อเลือกรูปแบบการแสดงผลที่จะใช้ได้
โมดูลฟังก์ชันทั่วไปที่เกี่ยวข้องกับการเลือก / ตรวจสอบรูปแบบการแสดงผล ได้แก่
- Reuse_alv_variant_default_get
- Reuse_alv_variant_f4
- Reuse_alv_variant_existence
💡 เคล็ดลับ: ส่งค่า I_SAVE = 'U' เพื่ออนุญาตเฉพาะตัวเลือกที่กำหนดเอง 'X' สำหรับตัวเลือกมาตรฐานเท่านั้น และ 'A' สำหรับทั้งสองแบบ ค่าว่างจะบล็อกการบันทึกทั้งหมด
นั่นคือทั้งหมดที่ ABAP – การเขียนโปรแกรม ALV!
