SAP การควบคุมตาราง ABAP พร้อมตัวอย่าง

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

SAP ABAP Table Control แสดงตารางภายในเป็นตารางแบบเลื่อนได้บนหน้าจอที่สร้างขึ้นใน Screen Painterหน้านี้อธิบายคุณสมบัติ การประกาศ CONTROLS การจัดการเคอร์เซอร์ ลูป PBO และ PAI และคุณลักษณะของคอลัมน์

  • 🖥️ คำจำกัดความหลัก: ตัวควบคุมตารางเป็นลูปขั้นตอนที่ได้รับการปรับปรุง ซึ่งแสดงข้อมูลในรูปแบบตารางด้วยรูปลักษณ์และความรู้สึกเหมือนตารางในแอปพลิเคชันบนเดสก์ท็อป
  • 🧰 คุณสมบัติในตัว: การเลื่อนหน้าจอ การปรับขนาดคอลัมน์ การเรียงลำดับคอลัมน์ใหม่ การเลือกแถว และการบันทึกการตั้งค่าการแสดงผล จะถูกจัดการโดยส่วนนี้ SAPส่วนติดต่อผู้ใช้แบบกราฟิก (GUI)
  • 📜 กฎเส้นเดียว: แถวของลูปแบบทีละขั้นตอนอาจกินพื้นที่หลายบรรทัดบนหน้าจอ ในขณะที่แถวควบคุมตารางจะต้องพอดีกับบรรทัดเดียวเสมอ
  • ⌨️ ประกาศ: การควบคุม พิมพ์ตารางวิวโดยใช้หน้าจอ เชื่อมโยงองค์ประกอบบนหน้าจอเข้ากับโปรแกรม ABAP
  • 🎯 การจัดการเคอร์เซอร์: คำสั่ง SET CURSOR จะวางเคอร์เซอร์ไว้ที่ตำแหน่ง PBO และคำสั่ง GET CURSOR จะอ่านค่าฟิลด์และแถวที่ตำแหน่ง PAI
  • 🔁 การถ่ายโอนข้อมูล: คำสั่ง LOOP AT … USING CONTROL ทำงานที่ PBO และคำสั่ง LOOP AT ธรรมดาทำงานที่ PAI โดยข้อมูลจะเคลื่อนย้ายระหว่างหน้าจอและตารางภายในภายในลูปเหล่านั้น
  • 🎨 คุณลักษณะแบบไดนามิก: ตาราง SCREEN และ -cols structure เปลี่ยนการแสดงผลและการจัดรูปแบบคอลัมน์ในระหว่างการทำงาน

SAP การควบคุมตาราง ABAP

Table Control คืออะไรใน SAP เอบัพ?

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

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

คุณสมบัติของการควบคุมตาราง ABAP

ด้วยการควบคุมตาราง ผู้ใช้สามารถ:

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

ตัวควบคุมตารางยังมีฟีเจอร์การจัดรูปแบบพิเศษ (บางรายการเป็นแบบอัตโนมัติ บางรายการไม่บังคับ) ซึ่งทำให้ดูและใช้งานตารางได้ง่ายขึ้น การควบคุมตารางให้ –

  • การปรับขนาดตารางอัตโนมัติ (แนวตั้งและแนวนอน) เมื่อผู้ใช้ปรับขนาดหน้าต่าง
  • เส้นคั่นระหว่างแถวและระหว่างคอลัมน์ (แนวตั้งและแนวนอน)
  • ฟิลด์ส่วนหัวของคอลัมน์สำหรับคอลัมน์ทั้งหมด

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

ตัวอย่าง (รายการ TZ60)

SAP การควบคุมตาราง ABAP

รายการธุรกรรม TZ60 ด้านบนแสดงผลลัพธ์ที่เสร็จสมบูรณ์: ตารางที่มีส่วนหัวคอลัมน์ เส้นคั่น และคอลัมน์สำหรับเลือกข้อมูล ความแตกต่างจากลูปขั้นตอนแบบเดิมจะสรุปไว้ด้านล่าง

การควบคุมตารางเทียบกับการวนลูปทีละขั้นตอน

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

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

เนื่องจากการควบคุมตารางเป็นองค์ประกอบที่ทันสมัย ​​ดังนั้นส่วนที่เหลือของหน้านี้จึงตั้งโปรแกรมให้ควบคุมตารางเป็นหลัก

วิธีการสร้างและตั้งโปรแกรมตัวควบคุมตาราง

การควบคุมตารางจำเป็นต้องมีองค์ประกอบบนหน้าจอ โครงสร้างควบคุมในโปรแกรม และลูปทั้งใน PBO และ PAI โดยหัวข้อย่อยด้านล่างจะเรียงตามลำดับนั้น

การประกาศการควบคุม

ในการจัดการตัวควบคุมตารางในโปรแกรม ABAP คุณต้องประกาศตัวควบคุมในส่วนการประกาศของโปรแกรมสำหรับตัวควบคุมตารางแต่ละรายการโดยใช้คำสั่งต่อไปนี้:

CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>

ที่ไหน เป็นชื่อของส่วนควบคุมตารางบนหน้าจอในโปรแกรม ABAP การควบคุมอนุญาตให้โปรแกรม ABAP อ่านคุณลักษณะของการควบคุมตารางและมีอิทธิพลต่อการควบคุม ที่นี่ คือหมายเลขหน้าจอที่โหลดค่าเริ่มต้นของตาราง

การตั้งค่าและการอ่านตำแหน่งเคอร์เซอร์

ตำแหน่งเคอร์เซอร์สำหรับการควบคุมตารางสามารถตั้งค่าได้ดังนี้:

ที่ PBO คุณสามารถตั้งค่าเคอร์เซอร์บนฟิลด์เฉพาะของแถวเฉพาะของตัวควบคุมตารางได้

SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]

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

ที่ PAI คุณสามารถอ่านตำแหน่งเคอร์เซอร์ปัจจุบันได้

GET CURSOR FIELD <f> LINE <lin> ...

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

GET CURSOR LINE <lin>.

เพื่อตรวจสอบแถวของตัวควบคุมตาราง คำสั่ง SY-SUBRC ช่วยให้คุณตรวจสอบได้ว่าเคอร์เซอร์อยู่ในแถวใดของตัวควบคุมตารางหรือไม่

อ่านบรรทัดตารางภายในที่เกี่ยวข้อง

สำหรับการรับบรรทัดที่สอดคล้องกันของ ตารางภายใน:

GET CURSOR line <lin>.

ind = <table_control>-top_line + <lin> - 1.

Read table <itab> index ind.

ตัวแปรระบบ stepl – มีดัชนีบรรทัดตารางปัจจุบันอยู่ในลูป … endloop Loopc – มีจำนวนบรรทัดที่มองเห็นได้ในตาราง

การสร้างตัวควบคุมในหน้าจอ Painter

เพื่อสร้างตัวควบคุมตาราง

  1. เพิ่มองค์ประกอบควบคุมตารางลงในหน้าจอของคุณ
  2. ตั้งชื่อให้กับตัวควบคุมตาราง ในโปรแกรม ABAP ให้ประกาศโครงสร้างที่มีชื่อเดียวกัน (CONTROLS) พิมพ์ TABLEVIEW โดยใช้ SCREEN )
  3. ในการสร้างฟิลด์ ให้ไปที่ฟังก์ชันฟิลด์ของพจนานุกรม/โปรแกรม
    • ป้อนชื่อของโครงสร้างที่มีฟิลด์ที่คุณต้องการ (ถ้าคุณต้องการให้มันเลือกจากพจนานุกรมของโปรแกรมของคุณให้คลิกปุ่ม puh ที่เกี่ยวข้อง)
    • ในรายการเขตข้อมูล ให้เลือกเขตข้อมูลที่คุณต้องการแล้วเลือกตกลง
    • คลิกในพื้นที่ควบคุมตาราง

หากคุณต้องการคอลัมน์การเลือก ให้ทำเครื่องหมายในช่องกาเครื่องหมายที่เหมาะสมในแอตทริบิวต์และตั้งชื่อให้ สร้างฟิลด์ใน โปรแกรมเอแบค.

การเขียนโค้ดลูป PBO และ PAI

ใน PBO คุณควรมีข้อความ

LOOP at <itab> USING CONTROL <cntrl_name>.

ENDLOOP.

ใน PAI ที่คุณควรมี

LOOP at <itab>.

ENDLOOP.

การถ่ายโอนข้อมูลระหว่างหน้าจอและตารางภายในเกิดขึ้นภายในลูป เมื่อคุณเติมข้อมูลลงในตารางภายใน ให้ใช้คำสั่ง DESCRIBE TABLE LINEเอส -lines ใช้สำหรับจัดเก็บจำนวนบรรทัดทั้งหมดในตัวควบคุม คำสั่ง FIELD สามารถใช้เพื่อควบคุมเวลาที่การถ่ายโอนข้อมูลเกิดขึ้น

⚠️คำเตือน: ลูป PBO ต้องตั้งชื่อคอนโทรลด้วยคำสั่ง USING CONTROL หากไม่มีคำสั่งนี้ คอนโทรลจะไม่ทราบจำนวนบรรทัด และการเลื่อนแนวตั้งจะไม่ทำงาน

การเปลี่ยนคุณสมบัติของคอลัมน์ขณะรันไทม์

หากต้องการเปลี่ยนคุณลักษณะของแต่ละเซลล์ ให้เปลี่ยนตาราง SCREEN ใน PBO เป็นการชั่วคราว คุณสามารถเปลี่ยนคุณสมบัติของโครงสร้างที่สร้างขึ้นโดยคำสั่ง CONTROLS

<cntrl>-fixed_cols etc are the attributes of the control

<cntrl>-cols-index etc are the attributes of the columns.

<cntrl>-cols-screen-invisible etc are the screen attributes of each column.

💡 เคล็ดลับ: วนซ้ำ -ใช้คำสั่ง -cols ใน PBO เพื่อซ่อนหรือปกป้องคอลัมน์สำหรับบทบาทผู้ใช้ที่กำหนด แทนที่จะสร้างหน้าจอที่สอง

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

ส่วนหน้าจัดการการเลื่อนแนวนอน แต่การเลื่อนแนวตั้งเขียนด้วยโค้ดใน PAI ประเมิน SY-UCOMM เพื่อหาโค้ดฟังก์ชันการเลื่อน และย้ายฟิลด์ top_line ของโครงสร้างควบคุมก่อนที่ PBO จะทำงานครั้งถัดไป

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

SY-STEPL เก็บค่าดัชนีของแถวที่กำลังประมวลผลอยู่ภายในลูปหน้าจอ และ SY-LOOPC เก็บค่าจำนวนแถวที่แสดงอยู่บนหน้าจอ ทั้งสองค่าจะถูกเติมเฉพาะภายในคำสั่ง LOOP … ENDLOOP ของคอนโทรลเท่านั้น

ใช่แล้ว ผู้ช่วย AI ในเครื่องมือพัฒนา ABAP จะร่างคำประกาศ CONTROLS ทั้งลูปหน้าจอและตรรกะการเลื่อนจากคำอธิบายของตารางภายใน ตรรกะการไหลที่สร้างขึ้นยังคงต้องได้รับการทดสอบในหน้าจอ Painter.

เครื่องมือวิเคราะห์ AI จะอ่านตรรกะการไหลของไดนามิกโปร (Dynpro) แสดงรายการฟิลด์และรหัสฟังก์ชัน และเสนอการออกแบบที่เทียบเท่าโดยใช้ Fiori หรือ ALV ซึ่งจะช่วยลดระยะเวลาในการวิเคราะห์ของโครงการปรับปรุงระบบให้ทันสมัย

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