รายงาน ALV ใน SAP บทช่วยสอน - โปรแกรมดูรายการ ABAP

⚡ สรุปอย่างชาญฉลาด

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

  • 📋 วัตถุประสงค์หลัก: โปรแกรม ABAP List Viewer มีคุณสมบัติรายการมาตรฐานผ่านโมดูลฟังก์ชันสำเร็จรูป ดังนั้นจึงไม่จำเป็นต้องเขียนโปรแกรมเพิ่มเติมอีกต่อไป
  • 🗂️ แคตตาล็อกภาคสนาม: ฟังก์ชัน REUSE_ALV_FIELDCATALOG_MERGE จะสร้างแคตตาล็อกที่อธิบายคอลัมน์เอาต์พุตทุกคอลัมน์ และสามารถกรอกข้อมูลในแคตตาล็อกนี้ด้วยตนเองได้เช่นกัน
  • 🖥️ รายการและตาราง: REUSE_ALV_LIST_DISPLAY จะแสดงรายการแบบคลาสสิก และ REUSE_ALV_GRID_DISPLAY จะแสดงข้อมูลเดียวกันในรูปแบบตาราง
  • 🧱 รายงานบล็อก: INIT, APPEND และ DISPLAY รวมตารางภายในหลายตารางเข้าเป็นเอาต์พุตเดียวที่ประกอบด้วยบล็อกแยกกัน
  • 🌳 รายงานแบบลำดับชั้น: REUSE_ALV_HIERSEQ_LIST_DISPLAY เชื่อมโยงตารางส่วนหัวและตารางรายการผ่านคีย์ร่วมใน IS_KEYINFO
  • 🧰 ประเภทสระว่ายน้ำ SLIS: โครงสร้าง ประเภทตาราง และค่าคงที่ทั้งหมดที่ใช้โดย ALV แบบดั้งเดิม จะถูกประกาศไว้ในพูลประเภท SLIS
  • 💾 ตัวเลือกการแสดงผล: ตัวแปรจะจัดเก็บค่าเริ่มต้นสำหรับการเรียงลำดับ การกรอง และการรวมผล และพารามิเตอร์ I_SAVE จะตัดสินว่าค่าเหล่านั้นเป็นแบบเฉพาะผู้ใช้หรือแบบมาตรฐาน

รายงาน ALV ใน SAP ABAP

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

ตารางภายในนี้มีสามฟิลด์:

  1. ประเภท : 'H' – ส่วนหัว, 'S' – การเลือก, 'A' – การดำเนินการ
  2. คีย์ : เฉพาะเมื่อพิมพ์เป็น 'S'
  3. ข้อมูล : ข้อความที่จะพิมพ์

ตัวอย่าง: รายงาน 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
  • คุณสามารถระบุตัวเลือกบนหน้าจอการเลือกเพื่อเลือกรูปแบบการแสดงผลที่จะใช้ได้

โมดูลฟังก์ชันทั่วไปที่เกี่ยวข้องกับการเลือก / ตรวจสอบรูปแบบการแสดงผล ได้แก่

  1. Reuse_alv_variant_default_get
  2. Reuse_alv_variant_f4
  3. Reuse_alv_variant_existence

💡 เคล็ดลับ: ส่งค่า I_SAVE = 'U' เพื่ออนุญาตเฉพาะตัวเลือกที่กำหนดเอง 'X' สำหรับตัวเลือกมาตรฐานเท่านั้น และ 'A' สำหรับทั้งสองแบบ ค่าว่างจะบล็อกการบันทึกทั้งหมด

นั่นคือทั้งหมดที่ ABAP – การเขียนโปรแกรม ALV!

คำถามที่พบบ่อย

โมดูล REUSE จัดอยู่ในกลุ่ม ALV แบบคลาสสิกที่ใช้ฟังก์ชันเป็นหลัก CL_GUI_ALV_GRID เป็นคอนโทรลเชิงวัตถุที่ฝังอยู่ในคอนเทนเนอร์แบบกำหนดเองบนไดนามิกโพรซีเดอร์ และมีเซลล์ที่สามารถแก้ไขได้ รวมถึงการจัดการเหตุการณ์ผ่านเมธอดต่างๆ

ตั้งค่า DO_SUM ในแคตตาล็อกฟิลด์สำหรับคอลัมน์ที่ต้องเพิ่ม และส่งตารางเรียงลำดับโดยเปิดใช้งาน SUBTOT สำหรับคอลัมน์ที่ใช้จัดกลุ่มแถว ไม่จำเป็นต้องเขียนโค้ดคำนวณเพิ่มเติม

ส่งชื่อฟอร์มไปยังฟังก์ชัน I_CALLBACK_USER_COMMAND ฟอร์มจะได้รับรหัสฟังก์ชันและแถวที่เลือก เพื่อให้โปรแกรมสามารถอ่านเรคอร์ดและเปิดรายการรายละเอียดหรือธุรกรรมได้

ใช่แล้ว ผู้ช่วย AI ในเครื่องมือพัฒนา ABAP จะสร้างคำสั่ง SELECT, แคตตาล็อกฟิลด์ และการเรียกใช้ REUSE_ALV_GRID_DISPLAY จากคำอธิบายของคอลัมน์ที่ต้องการ คำสั่ง SELECT ที่สร้างขึ้นยังคงต้องได้รับการตรวจสอบประสิทธิภาพอีกครั้ง

ไม่ ALV ยังคงเป็นเอาต์พุตมาตรฐานของ SAP รายงานแบบ GUI นั้นมีประโยชน์มากขึ้น เพราะผู้ช่วย AI จะเพิ่มคุณค่าเข้าไปด้วยการสรุปรายการยาวๆ ระบุข้อมูลที่ผิดปกติ และตอบคำถามเกี่ยวกับข้อมูลที่แสดงในภาษาที่เข้าใจง่าย

สรุปโพสต์นี้ด้วย: