SAP การเขียนโปรแกรมรายงาน ABAP

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

การเขียนโปรแกรมรายงานด้วย ABAP สร้างโปรแกรมที่สามารถทำงานได้ ซึ่งใช้ในการเลือก ประมวลผล และแสดงผลข้อมูลจำนวนมาก SAP ข้อมูล หน้านี้อธิบายเกี่ยวกับการเพิ่มส่วนหัวของรายงาน หน้าจอการเลือก ลำดับเหตุการณ์ คำสั่งการจัดรูปแบบ รายการแบบโต้ตอบ และฐานข้อมูลเชิงตรรกะ

  • 📊 วัตถุประสงค์หลัก: โปรแกรมสร้างรายงานจะอ่านข้อมูลจากหลายตาราง ประมวลผล และแสดงผลออกมาเป็นรายการที่สามารถจัดรูปแบบ ดาวน์โหลด หรือส่งทางอีเมลได้
  • 🧾 ประเภทโปรแกรม: รายงานทุกฉบับเป็นโปรแกรมที่สามารถเรียกใช้งานได้ประเภทที่ 1 ซึ่งเชื่อมโยงกับพื้นที่แอปพลิเคชัน และขับเคลื่อนโดยเหตุการณ์ต่างๆ อย่างสมบูรณ์
  • 🏁 ส่วนเพิ่มเติมในส่วนหัว: ไม่มีหัวเรื่องมาตรฐานของหน้าเว็บ LINE-ขนาด, LINE-COUNT และ MESSAGE-ID จะต้องอยู่ในคำสั่ง REPORT แรก
  • ⌨️ หน้าจอการเลือก: พารามิเตอร์ (PARAMETERS) รับค่าเดียว ในขณะที่ตัวเลือกการเลือก (SELECT-OPTIONS) รับช่วงค่าหรือชุดของค่า
  • ⏱️ ลำดับเหตุการณ์: คำสั่ง LOAD-OF-PROGRAM, INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION และ END-OF-SELECTION จะทำงานตามลำดับที่กำหนดไว้
  • 🖱️ รายการแบบโต้ตอบ: คำสั่ง HIDE จะเก็บค่าฟิลด์ของแถวที่เลือกไว้ และคำสั่ง HOTSPOT จะเปลี่ยนฟิลด์ในรายการให้เป็นองค์ประกอบที่คลิกได้สำหรับรายการรอง
  • 🗄️ ฐานข้อมูลเชิงตรรกะ: สร้างขึ้นใน SE36 โดยแทนที่คำสั่ง SELECT ด้วยเหตุการณ์ GET และเพิ่มการตรวจสอบการอนุญาตส่วนกลาง

SAP การเขียนโปรแกรมรายงาน ABAP

การเขียนโปรแกรมรายงาน ABAP คืออะไร?

SAP-ABAP รองรับโปรแกรมสองประเภท ได้แก่ โปรแกรมรายงานและโปรแกรมโต้ตอบ โปรแกรมรายงานใช้เมื่อต้องการแสดงข้อมูลจำนวนมาก

วัตถุประสงค์/การใช้โปรแกรมรายงาน

  • ใช้เมื่อจำเป็นต้องเลือกและประมวลผลข้อมูลจากหลายตารางก่อนนำเสนอ
  • ใช้เมื่อรายงานต้องการรูปแบบพิเศษ
  • ใช้เมื่อต้องดาวน์โหลดรายงาน SAP ไปยังแผ่นงาน Excel ที่จะกระจายไปทั่ว
  • ใช้เมื่อจะต้องส่งรายงานไปยังบุคคลใดบุคคลหนึ่งโดยเฉพาะ

ประเด็นสำคัญที่ควรทราบเกี่ยวกับโปรแกรมรายงาน

  • โปรแกรมรายงานเป็นโปรแกรมที่ปฏิบัติการได้เสมอ ประเภทโปรแกรมเป็น 1 เสมอ
  • ทุกโปรแกรมรายงานจะสอดคล้องกับประเภทแอปพลิเคชันเฉพาะ เช่น การขายและการจัดจำหน่าย FI – CO เป็นต้น นอกจากนี้ยังสามารถเป็นแอปพลิเคชันข้ามประเภท เช่น '*' ได้อีกด้วย
  • การเขียนโปรแกรมรายงานเป็นการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์
  • บรรทัดแรกของโปรแกรมรายงานจะเป็นรายงานเสมอ -
  • เพื่อระงับส่วนหัวของรายการหรือชื่อของโปรแกรมที่เพิ่ม ไม่มีส่วนหัวของหน้ามาตรฐาน ถูกนำมาใช้.
  • ขนาดเส้นสำหรับรายงานเฉพาะสามารถตั้งค่าได้โดยใช้ส่วนเพิ่มเติม ขนาดเส้น -
  • จำนวนบรรทัดสำหรับเพจใดเพจหนึ่งสามารถตั้งค่าได้โดยใช้การเพิ่ม จำนวนบรรทัด n(n1)- N คือจำนวนบรรทัดสำหรับเพจ และ N1 คือจำนวนบรรทัดที่สงวนไว้สำหรับส่วนท้ายของหน้า
  • ในการแสดงข้อมูลหรือข้อความแสดงข้อผิดพลาดใด ๆ เราจะเพิ่มคลาสข้อความให้กับโปรแกรมโดยใช้ส่วนเพิ่มเติม: รหัสข้อความ - คลาสข้อความยังคงอยู่ใน SE91

ดังนั้น โปรแกรมรายงานในอุดมคติควรเริ่มต้นด้วย:

Report <report name> no standard page heading

line-size <size>

line-count <n(n1)>

message-id <message class>.

โปรแกรมรายงานเทียบกับโปรแกรมสนทนา

โปรแกรมทั้งสองประเภททำงานบนระบบเดียวกัน แต่แก้ปัญหาที่ตรงกันข้าม โปรแกรมรายงานอ่านและแสดงข้อมูล ในขณะที่โปรแกรมแบบโต้ตอบช่วยให้ผู้ใช้สามารถจัดการข้อมูลผ่านหน้าจอต่างๆ ได้

หลักเกณฑ์ โปรแกรมรายงาน โปรแกรมสนทนา
ประเภทโปรแกรม ประเภท 1, ไฟล์ปฏิบัติการ ประเภท M, กลุ่มโมดูล
เริ่มโดย ชื่อโปรแกรมหรือรหัสธุรกรรม รหัสธุรกรรมเท่านั้น
การควบคุมการไหล เหตุการณ์ต่างๆ เช่น การเริ่มต้น (INITIALIZATION) และการเริ่มต้นการเลือก (START-OF-SELECTION) ตรรกะการไหลของหน้าจอด้วยโมดูล PBO และ PAI
อินพุตของผู้ใช้ หน้าจอการเลือกที่สร้างขึ้น หน้าจอที่ออกแบบในหน้าจอ Painter
การใช้งานทั่วไป การแสดงผลและการดาวน์โหลดข้อมูลปริมาณมาก การสร้างและเปลี่ยนแปลงข้อมูลทางธุรกิจ

หน้าจอการเลือกเป็นส่วนที่รายงานจะรวบรวมข้อมูล ดังนั้นจะอธิบายในส่วนถัดไป

หน้าจอการเลือก

"หน้าจอเลือกค่า" คือหน้าจอที่ใช้ระบุค่าอินพุตที่โปรแกรมควรใช้ในการทำงาน

โดยปกติหน้าจอการเลือกจะถูกสร้างขึ้นจาก

  1. พารามิเตอร์
  2. เลือก-ตัวเลือก

วากยสัมพันธ์

Selection-screen begin of screen <screen #>
selection-screen begin of block <#>  with frame title <text>
.........
.........
selection-screen end of block <#>
selection-screen end of screen <screen #>

พารามิเตอร์

พารามิเตอร์ช่วยในการเลือกแบบไดนามิก สามารถรองรับได้เพียงค่าเดียวสำหรับหนึ่งรอบการทำงานของโปรแกรม

วากยสัมพันธ์

การกำหนดพารามิเตอร์เป็นชนิดข้อมูล

Parameters p_id(30) type c.

การกำหนดพารามิเตอร์เช่นเขตข้อมูลตาราง

Parameter p_id like <table name>-<field name>.

พารามิเตอร์สามารถเป็นทั้งช่องกาเครื่องหมายและปุ่มตัวเลือกได้

Parameters p_id as checkbox.Parameters p_id1 radiobutton group <group name>.
Parameters p_id2  radiobutton group <group name>.

พารามิเตอร์สามารถเป็นรายการกล่องได้

Parameter p_id like <table name>-<field name> as listbox

เลือกตัวเลือก

Select-Option ใช้เพื่อป้อนช่วงของค่าหรือชุดของค่าให้กับโปรแกรม

วากยสัมพันธ์

select-options s_vbeln for vbak-vbeln.

หน้าจอการเลือก

ภาพหน้าจอแสดงช่องป้อนข้อมูลค่าต่ำและค่าสูงที่ตัวเลือกการเลือกสร้างขึ้น พร้อมกับปุ่มเลือกหลายรายการ

คุณยังสามารถกำหนดตัวเลือกการเลือกได้เช่นตัวแปร

select-options s_vbeln for vbak-vbeln no intervals no-extension

เมื่อรวบรวมข้อมูลเข้าแล้ว โปรแกรมจะตอบสนองต่อลำดับเหตุการณ์ที่กำหนดไว้

เหตุการณ์ในโปรแกรมรายงาน ABAP

โปรแกรมรายงาน ABAP ได้แก่ โปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์- เหตุการณ์ต่างๆ ในโปรแกรมรายงาน ได้แก่:

โหลดของโปรแกรม

  • ทริกเกอร์เหตุการณ์ที่เกี่ยวข้องในเซสชันภายในหลังจากโหลดโปรแกรมประเภท 1, M, F หรือ S
  • นอกจากนี้ ยังรันบล็อกการประมวลผลที่เกี่ยวข้องเพียงครั้งเดียวเท่านั้นสำหรับแต่ละโปรแกรมและเซสชันภายใน
  • บล็อกการประมวลผล LOAD-OF-PROGRAM มีฟังก์ชันประมาณเดียวกันสำหรับ โปรแกรมเอแบค ประเภท 1, M, F หรือ S ตามที่ Constructor มีสำหรับคลาสใน ABAP Objects

การเริ่มต้น.

  • เหตุการณ์นี้จะถูกดำเนินการก่อนที่หน้าจอการเลือกจะแสดง
  • การเริ่มต้นของค่าทั้งหมด
  • คุณสามารถกำหนดค่าอื่นนอกเหนือจากค่าเริ่มต้นบนหน้าจอการเลือกได้
  • คุณสามารถกรอกค่าบางค่าในขณะรันไทม์ให้กับหน้าจอการเลือกของคุณได้

ที่หน้าจอการเลือก

  • เหตุการณ์จะได้รับการประมวลผลเมื่อหน้าจอการเลือกได้รับการประมวลผล (ที่ส่วนท้ายของ PAI )
  • การตรวจสอบความถูกต้องและการตรวจสอบค่าที่ป้อนเกิดขึ้นที่นี่

จุดเริ่มต้นของการคัดเลือก

  • ที่นี่โปรแกรมจะเริ่มเลือกค่าจากตาราง

สิ้นสุดการคัดเลือก

  • หลังจากเลือกข้อมูลทั้งหมดแล้ว เหตุการณ์นี้จะเขียนข้อมูลลงบนหน้าจอ

เหตุการณ์แบบโต้ตอบ

  • ใช้สำหรับการรายงานเชิงโต้ตอบ ใช้เพื่อสร้างรายการโดยละเอียดจากรายการพื้นฐาน

💡 เคล็ดลับ: โดยค่าเริ่มต้น คำสั่งที่เขียนโดยไม่มีคีย์เวิร์ดเหตุการณ์ใดๆ จะถูกจัดอยู่ในกลุ่ม START-OF-SELECTION ซึ่งเป็นเหตุผลว่าทำไมรายงานจึงยังคงทำงานได้แม้ว่าจะไม่มีเหตุการณ์ดังกล่าวก็ตาม

ตัวอย่าง: โปรแกรมสร้างรายงาน ABAP อย่างง่าย

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

REPORT z_sales_order_list NO STANDARD PAGE HEADING
                          LINE-SIZE 80
                          LINE-COUNT 65(3)
                          MESSAGE-ID zsd.

TABLES: vbak.

DATA: lt_vbak TYPE STANDARD TABLE OF vbak,
      ls_vbak TYPE vbak.

* Selection screen
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
PARAMETERS: p_erdat LIKE vbak-erdat.

INITIALIZATION.
  p_erdat = sy-datum.

AT SELECTION-SCREEN.
  IF p_erdat > sy-datum.
    MESSAGE e001(zsd).          " Date must not lie in the future
  ENDIF.

START-OF-SELECTION.
  SELECT * FROM vbak
    INTO TABLE lt_vbak
    WHERE vbeln IN s_vbeln
      AND erdat LE p_erdat.

END-OF-SELECTION.
  LOOP AT lt_vbak INTO ls_vbak.
    WRITE: / ls_vbak-vbeln, ls_vbak-erdat, ls_vbak-netwr.
    HIDE ls_vbak-vbeln.
  ENDLOOP.

มีรายละเอียดสำคัญสามประการที่ควรทราบ INITIALIZATION จะเติมค่าพารามิเตอร์วันที่ก่อนที่หน้าจอเลือกจะปรากฏขึ้น AT SELECTION-SCREEN จะตรวจสอบความถูกต้องของข้อมูลที่ป้อนและแสดงข้อความจากคลาส ZSD HIDE จะเก็บหมายเลขลำดับของแต่ละแถวที่เขียนไว้ เพื่อให้การดับเบิ้ลคลิกสามารถสร้างรายการรองจากแถวนั้นได้ ซึ่งเป็นหัวข้อของส่วนถัดไป

การจัดรูปแบบรายงาน

ABAP อนุญาตให้จัดรูปแบบรายงานตามที่ผู้ใช้ต้องการ ตัวอย่างเช่น “เส้นสลับ” จะต้องปรากฏเป็นสีที่ต่างกัน และเส้น “ผลรวม” ควรปรากฏเป็นสีเหลือง

วากยสัมพันธ์

Format Color n

Format Color n Intensified On

n อาจสอดคล้องกับตัวเลขต่างๆ

โปรดทราบว่ายังมีส่วนเพิ่มเติมอื่นๆ พร้อมกับรูปแบบด้วย

FORMAT COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT OFF INPUT OFF

การเขียนโปรแกรมรายงานเชิงโต้ตอบ

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

คำสั่งบางคำสั่งที่ใช้ในการเขียนโปรแกรมเชิงโต้ตอบ

ฮอตสปอต

หากลากเมาส์ไปบนข้อมูลที่แสดงในรายงาน เคอร์เซอร์จะเปลี่ยนเป็นรูปมือที่มีนิ้วชี้เหยียดออก สามารถสร้างจุดสนใจได้โดยใช้คำสั่ง FORMAT

Syntax:      Format Hotspot On (Off).

ซ่อน

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

Syntax:     Hide <field-name>.

รายงานที่อ่านข้อมูลจากหลายตารางสามารถแทนที่คำสั่ง SELECT ด้วยฐานข้อมูลเชิงตรรกะตามที่อธิบายไว้ด้านล่าง

ฐานข้อมูลเชิงตรรกะ

  • แทนที่จะใช้คำสั่ง "เลือก" คุณสามารถใช้ฐานข้อมูลเชิงตรรกะเพื่อดึงข้อมูลสำหรับโปรแกรมได้
  • ฐานข้อมูลแบบลอจิคัลถูกสร้างขึ้นตามธุรกรรม SE36
  • ชื่อของฐานข้อมูลลอจิคัลสามารถมีความยาวได้สูงสุด 20 อักขระ อาจเริ่มต้นด้วยคำนำหน้าเนมสเปซ
  • ข้อมูลถูกเลือกโดยโปรแกรมอื่นและสามารถเข้าถึงข้อมูลโดยใช้ GET คำสั่งนำข้อมูลไปไว้ในพื้นที่ทำงาน -

ข้อดีของฐานข้อมูลแบบลอจิคัลเหนือแบบสอบถาม Select ปกติ

  1. โดยมีเงื่อนไขการตรวจสอบเพื่อดูว่าอินพุตถูกต้อง สมบูรณ์ และเป็นไปได้หรือไม่
  2. มันมีการตรวจสอบการอนุญาตจากส่วนกลางสำหรับการเข้าถึงฐานข้อมูล
  3. การปรับปรุงต่างๆ เช่น การปรับปรุงประสิทธิภาพจะมีผลทันทีกับรายงานทั้งหมดที่ใช้ฐานข้อมูลเชิงตรรกะ

หมายเหตุ: เนื่องจากความซับซ้อนที่เกี่ยวข้อง ฐานข้อมูลเชิงตรรกะจึงไม่ได้ถูกใช้ในกรณีส่วนใหญ่

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

คำสั่ง PARAMETERS สร้างช่องป้อนข้อมูลหนึ่งช่องที่เก็บค่าเดียว ส่วนคำสั่ง SELECT-OPTIONS สร้างตารางภายในที่มีฟิลด์ SIGN, OPTION, LOW และ HIGH เพื่อรองรับช่วงค่า การยกเว้น และการเลือกหลายรายการ

AT LINE-SELECTION จะตอบสนองต่อการดับเบิ้ลคลิกหรือปุ่ม F2 และ AT USER-COMMAND จะตอบสนองต่อรหัสฟังก์ชันจากเมนู ทั้งสองคำสั่งจะสร้างรายการรองจากค่าที่จัดเก็บไว้โดย HIDE

เมนูรายการมีตัวเลือก รายการ บันทึก และไฟล์ในเครื่อง สำหรับรายงานแบบคลาสสิก นอกจากนี้ โปรแกรมยังสามารถเรียกใช้โมดูลฟังก์ชัน GUI_DOWNLOAD และส่งออกรายการ ALV ไปยังสเปรดชีตโดยไม่ต้องเขียนโค้ดเพิ่มเติมใดๆ

ใช่แล้ว ผู้ช่วย AI ในเครื่องมือพัฒนา ABAP จะสร้างส่วนหัวของรายงาน (REPORT header), ตัวเลือกการเลือก (SELECT-OPTIONS) และบล็อกเหตุการณ์ (event blocks) จากคำอธิบายรายการที่ต้องการอย่างง่ายๆ อย่างไรก็ตาม ประสิทธิภาพของคำสั่ง SELECT ที่สร้างขึ้นยังคงต้องได้รับการตรวจสอบอีกครั้ง

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

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