← หน้ารวม (Hub)
Skill · ทักษะพื้นฐานที่ใช้ทุกวัน ANONYMIZED Data Extraction

SE16N — ดึงข้อมูลใน SAP แบบครบถ้วน

T-code · SE16N ชื่อเต็ม · General Table Display ญาติ · SE16 · SE11 · SE16H · SQVI ใช้กับ · ทุก object ในเล่มนี้

SE16N คือ “ประตูหลัง” เข้าไปดูข้อมูลดิบในตารางของ SAP โดยไม่ต้องผ่านหน้าจอ transaction สำหรับ consultant สายภาษี มันคือเครื่องมือที่ใช้ บ่อยที่สุด — ใช้พิสูจน์ว่า “รายงานผิด” หรือ “ข้อมูลผิด” · ใช้เตรียมข้อมูลทดสอบ · ใช้ตอบคำถาม user ภายใน 2 นาที คนที่ใช้ SE16N เป็น จะ debug ได้เร็วกว่าคนที่ไม่เป็น 5–10 เท่า

ระดับความสำคัญ
★★★★★
ใช้ทุกวันในโปรเจกต์
ความเสี่ยง
อ่านอย่างเดียว = ปลอดภัย
ห้ามแก้ข้อมูล (ดู §11)
เวลาเรียนรู้
30 นาที + ฝึก
recipe ใน §9 ใช้ได้เลย
Key Takeaways — 8 ข้อที่ต้องติดตัว
1

SE16N คืออะไร และทำไมสายภาษีต้องใช้

SAP เก็บทุกอย่างในตารางฐานข้อมูล — เอกสารบัญชี · master data · config · ตาราง custom หน้าจอ transaction ปกติ (เช่น FB03, S_P00_07000134) เป็นเพียง “มุมมองที่จัดไว้ให้” SE16N คือการเปิดดู ข้อมูลดิบตรง ๆ

3 สถานการณ์ที่ SE16N คือคำตอบเดียว

  1. “รายงานไม่แสดงรายการนี้” — ต้องพิสูจน์ว่าข้อมูลมีอยู่จริงในตารางไหม ถ้ามี = โปรแกรมกรองผิด · ถ้าไม่มี = ข้อมูลไม่ถูกบันทึก
  2. “ต้องเตรียมข้อมูลทดสอบ” — หาเอกสารที่มีเงื่อนไขครบ (เช่น WHT type 3A + profit center X + ledger 0L) ก่อนรันรายงาน
  3. “config ตั้งไว้ว่าอะไร” — ตาราง custom (ZTAXA_T01, ZTAXB_T02) ดูผ่าน SE16N ได้ทันทีโดยไม่ต้องรอ dev
คำถาม
“ทำไมยอดไม่ตรง”
→ SE16N
ดูข้อมูลดิบ
→ คำตอบที่มีหลักฐาน
ไม่ใช่การเดา
ประโยคที่เปลี่ยนภาพลักษณ์คุณในทีม: แทนที่จะพูดว่า “น่าจะเป็นเพราะ master data” ให้พูดว่า “ผมเช็ค WITH_ITEM แล้ว เอกสาร 1904322110 มี WITHT = 3A แต่ QSREC ว่าง — รายการจึงไม่เข้าเงื่อนไขของ ภ.ง.ด.3 ครับ” · ข้อมูลชุดเดียวกัน แต่ความน่าเชื่อถือคนละระดับ
2

SE16N เทียบกับญาติทั้งตระกูล

รู้ว่าเมื่อไหร่ควรใช้ตัวไหน = ประหยัดเวลาตัวเองและ basis

T-code / เครื่องมือทำอะไรใช้เมื่อ
SE16NGeneral Table Display — ดูข้อมูล 1 ตาราง พร้อม ALV เต็มรูปแบบ · เลือก field ได้ · export ง่ายค่าเริ่มต้น — ใช้ตัวนี้ 90% ของเวลา
SE16รุ่นเก่ากว่า · หน้าจอ selection แบบเดิมระบบที่ไม่มี SE16N หรือ user ที่ถนัดของเดิม
SE11Data Dictionary — ดูโครงสร้างตาราง: field, data type, key, index, check table, foreign keyอยากรู้ว่า field ชื่ออะไร / เป็น key ไหม / ผูกกับตารางไหน
SE16HSE16N รุ่น HANA-optimized — มี Group by · Aggregate (SUM/COUNT/MIN/MAX) · Having และ join ได้บางกรณีอยาก รวมยอด หรือ นับกลุ่ม โดยไม่ต้อง export ไป Excel
SQVIQuickViewer — สร้าง query ส่วนตัว · join หลายตารางได้ต้อง join เช่น WITH_ITEM × ACDOCA · SE16N ทำไม่ได้
SQ01/SQ02/SQ03SAP Query — query แชร์ให้ทีมได้ · มี user groupงานที่ต้องทำซ้ำและแชร์
Fiori — View Browserค้นหา CDS view ที่ SAP เตรียมไว้ (มี business logic ในตัว)อยากได้ข้อมูลที่ “ผ่านการตีความแล้ว” ไม่ใช่ตารางดิบ
ST05SQL Trace — ดูว่าโปรแกรมยิง SQL อะไรจริง ๆเมื่ออยากรู้ว่า รายงานอ่านตารางไหนด้วยเงื่อนไขอะไร (ขั้นสูง)
สูตรเลือกเครื่องมือใน 5 วินาที
  • ดูข้อมูล 1 ตาราง → SE16N
  • ไม่รู้ว่า field ชื่ออะไร → SE11 ก่อน แล้วค่อย SE16N
  • อยากได้ยอดรวม/นับตามกลุ่ม → SE16H (ถ้ามีสิทธิ์) หรือ export ไป Excel
  • ต้องเชื่อม 2 ตาราง → SQVI
  • อยากรู้ว่าโปรแกรมอ่านอะไร → ST05
3

หน้าจอ SE16N — ทีละส่วน

┌─────────────────────────────────────────────────────────────────┐ │ General Table Display │ ├─────────────────────────────────────────────────────────────────┤ │ Table [ ACDOCA ] Universal Journal Entry Line │ │ Layout [ ] │ │ │ │ Selection [→] │ │ Company Code [ TH01 ] to [ ] [→] │ │ Fiscal Year [ 2026 ] to [ ] [→] │ │ Ledger [ 0L ] to [ ] [→] │ │ ... │ │ │ │ Settings │ │ Number of entries [ ] │ │ Maximum no. of hits [ 500 ] ← ต้องล้างทิ้ง! │ │ Runtime [ ] │ └─────────────────────────────────────────────────────────────────┘

ส่วนที่ 1 — ช่อง Table

ส่วนที่ 2 — Selection (ช่องกรอกเงื่อนไข)

SE16N แสดง field ที่ใช้กรองได้ทั้งหมด · แต่ละบรรทัดมี ช่องซ้าย (from) · ช่องขวา (to) · ไอคอนลูกศร → (ดูวิธีใช้ละเอียดใน §4)

ส่วนที่ 3 — Settings (ส่วนที่คนมองข้ามแล้วเจ็บ)

Fieldทำอะไรควรทำยังไง
Number of entriesแสดงจำนวนแถวที่ตรงเงื่อนไขใช้ปุ่ม “Number of Entries” บน toolbar ก่อนดึงจริงเสมอ
Maximum no. of hitsจำกัดจำนวนแถวที่ดึง · default = 500ล้างให้ว่าง ถ้าต้องการข้อมูลครบ · หรือใส่เลขที่ตั้งใจ
Runtimeแสดงเวลาที่ใช้ queryดูเพื่อประเมินว่าเงื่อนไขดีพอหรือยัง (> 30 วิ = ต้องเพิ่ม filter)
⚠ กับดักอันดับ 1 ของ SE16N — “Maximum no. of hits = 500”: สมมติคุณเช็คว่า “profit center X มีรายการ WHT ไหม” แล้วเห็น 500 แถว → คุณอาจสรุปว่ามี 500 รายการ · แต่ความจริงอาจมี 50,000 · ที่แย่กว่าคือถ้าคุณกรองแล้วไม่เจอสิ่งที่หา คุณอาจสรุปว่า “ไม่มี” ทั้งที่มันอยู่ในแถวที่ 501 · ล้างช่องนี้ก่อนเสมอ หรือกด “Number of Entries” เพื่อรู้ยอดจริง

ส่วนที่ 4 — Toolbar หลังกด Execute (F8)

ปุ่ม / เมนูทำอะไรใช้ตอนไหน
Number of Entriesนับแถวโดยไม่ดึงข้อมูลกดก่อน execute เสมอ
Sort ascending / descendingเรียงตามคอลัมน์ที่เลือกหายอดสูงสุด/ต่ำสุด
Set filter (กรวย)กรองซ้ำบนผลลัพธ์ที่ดึงมาแล้วค่อย ๆ แคบลงโดยไม่ต้องรัน query ใหม่
Total (Σ) / Subtotalรวมยอดคอลัมน์ตัวเลข · ซอยตามคอลัมน์ที่เลือกกระทบยอดกับรายงาน
Change layoutเลือก/ซ่อน/เรียงคอลัมน์ · บันทึกเป็น layoutทำครั้งเดียวใช้ได้ตลอด
Export → Spreadsheetส่งออก Excel / CSVทำงานต่อใน Excel
Details (แว่นขยาย)ดูแถวเดียวแบบเต็มทุก fieldตรวจ record ทีละใบ
4

เขียนเงื่อนไข — ครบทุกแบบ

นี่คือทักษะที่แยก “คนใช้ SE16N ได้” ออกจาก “คนใช้ SE16N เป็น”

4.1 · แบบพื้นฐาน (กรอกในช่องหน้าจอตรง ๆ)

ต้องการวิธีกรอกตัวอย่าง
ค่าเดียวใส่ช่องซ้ายอย่างเดียวTH01
ช่วงใส่ทั้งช่องซ้ายและขวาTH01 ถึง 1010
ขึ้นต้นด้วย…ใช้ * ท้ายA21* → A2100000, A2199999 …
ลงท้ายด้วย…ใช้ * หน้า*999999999
มีคำนี้อยู่ตรงกลางครอบด้วย **ROYAL*
อักขระเดียวใช้ +3+ → 3A, 3B, 3C … (ไม่ติด 3AB)
จำ 2 ตัวนี้ให้แม่น: * = อักขระกี่ตัวก็ได้ (รวม 0 ตัว) · + = อักขระ 1 ตัวพอดี → ถ้าอยากได้ WHT type ที่ขึ้นต้นด้วย 3 และยาว 2 ตัว ให้ใช้ 3+ ไม่ใช่ 3* (3* จะติด 3 เดี่ยว ๆ ด้วย)

4.2 · Multiple selection (ไอคอนลูกศร →) — 4 แท็บ

คลิกไอคอนลูกศรท้ายช่อง จะได้หน้าต่างที่มี 4 แท็บ:

แท็บชื่อใช้ทำอะไร
1 (เขียว)Select Single Valuesใส่ค่าหลายค่าทีละบรรทัด เช่น 3A 3B 3C 3D 3E 3F
2 (เขียว)Select Rangesใส่หลายช่วงพร้อมกัน
3 (แดง)Exclude Single Valuesไม่เอาค่าเหล่านี้
4 (แดง)Exclude Rangesไม่เอาช่วงเหล่านี้

ในหน้าต่างนี้ยังมีปุ่ม “Upload from clipboard” (วางค่าจาก Excel ทีเดียวหลายร้อยบรรทัด) และ “Import from text file” — ประหยัดเวลามหาศาลเวลาต้องเช็คเอกสารเป็นร้อยใบ

4.3 · Selection options (ตัวดำเนินการเปรียบเทียบ)

ในหน้าต่าง multiple selection กดปุ่ม “Selection options” จะได้ operator ครบชุด:

สัญลักษณ์ความหมายตัวอย่างการใช้กับงานภาษี
=Equal toKTOSL = WIT
≠Not equal toWT_WITHCD ≠ ' ' (ไม่ว่าง)
>Greater thanHSL > 1000000 (หารายการใหญ่)
<Less thanHSL < 0 (หายอดติดลบ)
≥ / ≤Greater/Less or equal—
(...)Between (ช่วง)BUDAT ระหว่าง 01.01.2026–31.01.2026
Patternตรงกับ pattern (ใช้ * +)RACCT pattern A5*

4.4 · การหาค่าว่าง / ไม่ว่าง

หา “ค่าว่าง” ปล่อยช่องว่างไว้เฉย ๆ → ไม่ได้ผล! (แปลว่า “ไม่กรอง field นี้”) วิธีที่ถูก: ใช้ Selection options → Equal to แล้วปล่อยค่าเป็นช่องว่าง หรือใส่เครื่องหมาย = ตามด้วยว่าง หา “ไม่ว่าง” (เช่น WT_WITHCD ต้องไม่ว่าง ตามที่ TAX-FRM-1 กำหนด) ใช้ Selection options → Not equal to แล้วปล่อยค่าเป็นช่องว่าง หรือใช้ Greater than + ค่าว่าง
เคล็ดลับที่ใช้ได้ทุกวัน: ถ้าไม่แน่ใจว่าเงื่อนไขถูกไหม ให้กรองหลวม ๆ ก่อนแล้วใช้ ปุ่มกรวย (Set filter) บน ALV ค่อย ๆ แคบลง — เพราะการกรองบนผลลัพธ์ ไม่ต้องยิง query ใหม่ จึงลองผิดลองถูกได้ไว พอได้เงื่อนไขที่ใช่แล้วค่อยกลับไปใส่ในหน้า selection ให้ถาวร
5

เลือก field ที่จะกรองและที่จะแสดง

ตารางอย่าง ACDOCA มี field เป็นร้อย — ถ้าไม่จัดการ จะทั้งช้าและอ่านไม่รู้เรื่อง

เส้นทาง: Settings → Fields for Selection

  1. เมนู Settings (หรือ Extras ในบางเวอร์ชัน) → Fields for Selection / Field selection
  2. ติ๊กเฉพาะ field ที่ต้องการให้ปรากฏบนหน้าจอ selection
  3. บันทึกไว้ — SE16N จำ setting ต่อ user + ต่อตาราง

เส้นทาง: Change Layout (บนหน้า ALV)

  1. กด Change Layout (ไอคอนตาราง/กริด)
  2. ย้าย field จาก “Column Set” มาที่ “Displayed Columns”
  3. จัดลำดับ · กำหนดความกว้าง · เลือกให้ sort/subtotal
  4. Save layout ตั้งชื่อขึ้นต้นด้วย / เพื่อให้ทีมใช้ร่วมกันได้ (เช่น /TAX_WHT)
Layout ที่ควรสร้างไว้ล่วงหน้า (ทำครั้งเดียว ใช้ทั้งโปรเจกต์)
  • /TAX_ACDOCA — BUKRS · GJAHR · BELNR · DOCLN · RLDNR · RACCT · KTOSL · PRCTR · SEGMENT · RECID · VBUND · SHKZG · HSL · KSL · OSL · BUDAT · BLART
  • /TAX_WITHITEM — BUKRS · GJAHR · BELNR · WITHT · WT_WITHCD · QSREC · WT_ACCO · WT_QSSHH · WT_QBSHH
  • /TAX_CONFIG — สำหรับตาราง ZTAXA_T01 / ZTAXB_T02

ดูชื่อ field ทางเทคนิค vs คำอธิบาย

บนหน้า ALV ให้เปิด Settings → Display → Technical names (หรือติ๊กในหน้า Change Layout) → จะเห็น RACCT แทน “G/L Account” · สำคัญมากเวลาคุยกับ dev เพราะ dev พูดด้วยชื่อทางเทคนิค

ทางลัดที่ทุกคนควรรู้: ถ้าอยู่บนหน้าจอ SAP ใด ๆ แล้วอยากรู้ว่าช่องนั้นคือ field อะไร → คลิกที่ช่อง แล้วกด F1 → Technical Information (ไอคอนค้อน/ประแจ) จะบอก Table name + Field name ให้เอาไปใช้ใน SE16N ได้ทันที
6

จัดการ output — sort · filter · total · subtotal

ลำดับการทำงานที่แนะนำ

  1. Sort ตามคอลัมน์ที่ใช้จัดกลุ่มก่อน (เช่น PRCTR)
  2. Total (Σ) คอลัมน์ตัวเลขที่ต้องการรวม (เช่น HSL)
  3. Subtotal ตามคอลัมน์ที่ sort ไว้ → ได้ยอดรวมต่อกลุ่มทันที
ตัวอย่างผลลัพธ์ที่ได้: PRCTR RACCT BELNR HSL ───────────────────────────────────────────────── C_PC11 A213X025 1904322110 15,000.00 C_PC11 A213X025 1904322111 22,500.00 ● C_PC11 37,500.00 ← subtotal C_PC12 A213X025 1904322118 8,000.00 ● C_PC12 8,000.00 ───────────────────────────────────────────────── ●● Total 45,500.00 ← grand total
ทำไมสิ่งนี้ทรงพลัง: คุณเพิ่ง สร้างรายงานกระทบยอดของตัวเอง ภายใน 30 วินาที โดยไม่ต้องพึ่ง dev · เอายอด subtotal นี้ไปเทียบกับคอลัมน์ profit center ในรายงาน (RPT-3 / RPT-4) ได้ทันที ถ้าไม่ตรง = คุณมีหลักฐานว่าโปรแกรมผิด · ถ้าตรง = ปัญหาอยู่ที่อื่น

SE16H — ถ้ามีสิทธิ์ ให้ใช้แทนในงานสรุปยอด

ความสามารถSE16NSE16H
Group byทำทางอ้อมด้วย sort + subtotalทำได้ตรง ๆ
Aggregate (SUM / COUNT / MAX / MIN / AVG)SUM ผ่าน ALVครบทุกตัว
กรองบนค่าที่รวมแล้ว (Having)ไม่ได้ได้
ประสิทธิภาพกับข้อมูลใหญ่ดึงทุกแถวมาก่อนรวมยอดที่ระดับฐานข้อมูล = เร็วกว่ามาก
Outer join / เชื่อมตารางไม่ได้ได้บางกรณี
7

Export ข้อมูลออกมาใช้งานต่อ

วิธีเส้นทางเหมาะกับ
Excel (recommended)List → Export → Spreadsheet · เลือก “Excel (in MHTML format)” หรือ XLSXข้อมูลกลาง–ใหญ่ · รักษาคอลัมน์ครบ
Local file (text)List → Export → Local file → Unconverted / Tab-delimitedไฟล์ใหญ่มาก · เอาไปเข้าเครื่องมืออื่น
Copy–pasteเลือกแถว → Ctrl+Y ลากคลุม → Ctrl+Cข้อมูลไม่กี่แถว · เร็วสุด
Send (mail/inbox)List → Send toส่งให้เพื่อนร่วมทีมในระบบ
⚠ ก่อนกด export ทุกครั้ง — 3 คำถามด้าน confidentiality: (1) ข้อมูลนี้มีชื่อ vendor / เลขประจำตัวผู้เสียภาษี / ยอดเงินจริงหรือไม่ · (2) ไฟล์จะถูกเก็บที่ไหน (เครื่องบริษัทเท่านั้น) · (3) จะส่งให้ใคร · ข้อมูล production ของ client ห้ามออกนอกช่องทางที่ได้รับอนุญาต และห้ามนำมาเก็บใน study notes ส่วนตัวเด็ดขาด
เทคนิคเลี่ยงปัญหา Excel ตัดเลข 0 นำหน้า: รหัสอย่าง company code 0001 หรือ business place 00001 เวลา export แล้วเปิดใน Excel จะกลายเป็น 1 → ให้ export เป็น text/tab-delimited แล้ว import ผ่าน “Get Data → From Text” โดยระบุคอลัมน์นั้นเป็น Text · หรือใช้ XLSX ที่รักษา format ได้ดีกว่า
8

ตารางที่สาย FI-TAX ต้องรู้ (cheat sheet)

รวมทุกตารางที่ปรากฏใน FD ของ WRICEF ในเล่มนี้ + ตารางพื้นฐานที่ต้องรู้

8.1 · ตารางธุรกรรมหลัก

Tableชื่อKey fields ที่ต้องใส่ใช้ตอบคำถามอะไร
ACDOCAUniversal Journal Entry Line ItemsRLDNR · RBUKRS/BUKRS · GJAHR · BELNR · DOCLNยอดทุกอย่างในบัญชี · profit center · segment · recovery indicator · trading partner
WITH_ITEMWitholding Tax Info per W/tax Type and FI Line ItemBUKRS · BELNR · GJAHR · BUZEI · WITHTข้อมูล WHT ทุกอย่าง — type · code · recipient · ฐาน · ภาษี
BKPFAccounting Document HeaderBUKRS · BELNR · GJAHRวันที่เอกสาร · document type · ผู้บันทึก · เอกสารกลับรายการ (STBLG)
BSEGAccounting Document SegmentBUKRS · BELNR · GJAHR · BUZEIบรรทัดเอกสารแบบเดิม (ยังมีใน S/4 แต่ ACDOCA เป็นตัวหลัก)
ANLA / ANLCAsset master / Asset valueBUKRS · ANLN1 · ANLN2asset class · ค่าเสื่อมต่อ depreciation area

8.2 · Master data & config มาตรฐาน

Tableเก็บอะไรใช้ validate อะไร
T001Company codescompany code มีจริงไหม · สกุลเงินบริษัท
CEPCProfit center masterProfit center (ใช้โดย ENH-1 · FRM-1 · RPT-4 · RPT-5 · RPT-3)
T8JJJVA — Recovery IndicatorRecovery Indicator คู่กับ BUKRS
T093BDepreciation areas ต่อ company codeDepreciation area (AFABE) คู่กับ BUKRS
FAGL_SEGMSegment masterSegment
FINSC_LD_CMPLedger ต่อ company codeLedger (check table ของ ZTAXA_T03-RLDNR)
TCURRExchange ratesFX rate สิ้นเดือน (ใช้โดย RPT-5)
DFKKBPTAXNUMTax numbers ของ Business Partnerเลขประจำตัวผู้เสียภาษีของผู้ขาย (FRM-1 — TAXTYPE TH1/TH3 · TAXNUM/TAXNUMXL)
SKA1 / SKB1G/L account master (chart / company)บัญชีมีจริงไหม · ชื่อบัญชี
LFA1 / BUT000Vendor / Business Partnerชื่อและข้อมูลผู้ขาย

8.3 · ตาราง custom ของ tax workstream

Tableเก็บอะไรเจ้าของ WRICEF
ZTAXA_T05Node master (+ flag Overseas)RPT-3 / RPT-4
ZTAXA_T06Node + description + Proportion/Fixed + Fixed RateRPT-3 / RPT-4
ZTAXA_T01GL account mapping (ไทย) + Valid from/toRPT-3
ZTAXA_T07Report layout + Valid from/to + Proportion/FixedRPT-3 / RPT-4
ZTAXA_T03Upload data (manual adjustment) + LedgerRPT-3 / TAX-ENH-10
ZTAXA_T08Asset class include/exclude (รวม T030–T032)RPT-3 / RPT-4
ZTAXA_T11Tax rate for tax filingRPT-3
ZTAXA_T04Trading partner ต่อ tax rate (IBC-TC) + Valid from/toRPT-3
ZTAXA_T02Company code สำหรับ IBC / BOI + tax rateRPT-3 / RPT-4
ZTAXA_T10IBC tax rate + trading partner จาก customersRPT-3
ZTAXB_T03Exchange rate type ต่อ company codeRPT-5
ZTAXB_T01Loss carried forward storeRPT-5
ZTAXB_T06CR% tableSAC-RPT-1
ZTAXB_T08ITD cost recovery balanceSAC-RPT-1
ZTAXB_T07Specific asset classesTAX-RPT-9
ZTAXB_T09Depreciation & NBV (DD&A)TAX-RPT-9
ZTAXB_T02GL mapping (ต่างประเทศ) + % + capped + validityRPT-4

8.4 · Field ของ ACDOCA ที่ใช้บ่อยที่สุดในงานภาษี

Fieldความหมายค่าที่มักใช้
RLDNRLedger0L (leading) · T1 (tax) · S1 (มาเลเซีย)
RACCTG/L AccountA* / B* / C*
KTOSLTransaction keyWIT = บรรทัดภาษีหัก ณ ที่จ่าย
PRCTRProfit Center—
SEGMENTSegmentCIT_TH · PSC_OM …
RECIDRecovery Indicator (JVA)—
VBUNDTrading partnerตัวชี้ intercompany สำหรับ IBC-TC
SHKZGDebit/Credit indicatorS = เดบิต · H = เครดิต
HSL / RHCURยอด LC1 / สกุล LC1Company code currency
KSL / RKCURยอด LC2 / สกุล LC2Global currency
OSL / ROCURยอด LC3 / สกุล LC3Freely defined currency 1
BUDATPosting date—
BLARTDocument typeKR · RE (ใช้ในกติกา PSC_MY)
POPERPosting period1–16

8.5 · Field ของ WITH_ITEM ที่ต้องรู้

Fieldความหมายค่าที่ใช้ในงาน Client
WITHTWithholding tax type1A–1E (ภ.ง.ด.1/1ก) · 2A (2/2ก) · 3A–3F (3) · 4A–4F (53) · 5A/5D (54)
WT_WITHCDWithholding tax codeประเภทเงินได้ — ต้อง ไม่ว่าง ตามกติกาของ FRM-1
QSRECRecipient type01 · 02 · 03 · 53 · 54
WT_ACCOVendor number (partner)ใช้ต่อไป DFKKBPTAXNUM-PARTNER
WT_QSSHHWHT base amount (local currency)ฐานภาษี
WT_QBSHHWHT amount (local currency)ภาษีที่หัก

TODO: verify ชื่อ field ยอดเงินของ WITH_ITEM ให้ตรงกับระบบจริง (บางระบบใช้ WT_QSSHH/WT_QBSHH, บางกรณีมี *SHB สำหรับ 2nd local currency) — เปิด SE11 → WITH_ITEM เพื่อยืนยันก่อนใช้จริง

9

12 Recipes — สูตรสำเร็จที่ใช้ได้ทันที

แต่ละสูตรผูกกับงานจริงในเล่มนี้ · copy วิธีไปใช้ได้เลย

R01หาเอกสารทั้งหมดที่มีภาษีหัก ณ ที่จ่ายในงวดหนึ่ง
ตาราง
WITH_ITEM
เงื่อนไข
BUKRS = TH01 · GJAHR = 2026
ดูอะไร
จำนวนแถว (Number of Entries) · การกระจายของ WITHT
ต่อยอด
Sort ตาม WITHT แล้ว subtotal WT_QBSHH → ได้ยอดภาษีต่อประเภทแบบยื่นทันที
R02พิสูจน์ว่าเอกสารใบหนึ่งควรอยู่ใน ภ.ง.ด. 53 หรือไม่
ตาราง
WITH_ITEM
เงื่อนไข
BELNR = <เลขเอกสาร> · GJAHR = <ปี>
ดูอะไร
WITHT อยู่ใน 4A–4F ไหม · QSREC = 53 ไหม · WT_WITHCD ว่างไหม
ตีความ
ครบ 3 ข้อ = ควรอยู่ · ขาดข้อไหน = นั่นคือสาเหตุที่หายไป (ดู FRM-1 §3)
R03หาว่าเอกสาร WHT ใบนั้นตกอยู่ profit center ไหน
ตาราง
ACDOCA
เงื่อนไข
BUKRS · GJAHR · BELNR = <เลขเอกสาร> · RLDNR = 0L · KTOSL = WIT
ดูอะไร
คอลัมน์ PRCTR
ทำไมสำคัญ
นี่คือ logic เดียวกับเส้นทาง B ของ TAX-FRM-1 — คุณกำลังรันโปรแกรมด้วยมือ
R04เช็คว่าผู้ขายมีเลขประจำตัวผู้เสียภาษีหรือไม่
ตาราง
DFKKBPTAXNUM
เงื่อนไข
PARTNER = <ค่าจาก WITH_ITEM-WT_ACCO>
ดูอะไร
TAXTYPE (ต้องเป็น TH1 ถ้าบุคคล / TH3 ถ้าไม่ใช่) · TAXNUM หรือ TAXNUMXL ตัวไหนไม่ว่าง
แก้ปัญหา
ถ้าไม่มี record = field [7] ในใบแนบจะว่าง → แจ้งทีม master data ไม่ใช่ dev
R05หายอด GL ต่อ profit center เพื่อกระทบยอดกับ Current Tax Report
ตาราง
ACDOCA
เงื่อนไข
RLDNR = T1 · BUKRS · GJAHR · POPER 1–12 · RACCT (ใส่ค่าจาก ZTAXA_T01)
ดูอะไร
Sort PRCTR → Subtotal KSL (LC2)
เทียบกับ
คอลัมน์ profit center ใน RPT-3 · ไม่ตรง = โปรแกรมกรองต่างจากที่คิด
R06ดู GL mapping ที่ config ไว้ (ก่อนโทษโปรแกรม)
ตาราง
ZTAXA_T01 (ไทย) หรือ ZTAXB_T02 (ต่างประเทศ)
เงื่อนไข
Layout / Type ที่สนใจ · ตรวจ Valid From ≤ วันที่รายงาน ≤ Valid To
ดูอะไร
From GL–To GL · Exclude GL · %Add back · Capped amount · Profit center
ประโยชน์
80% ของ “รายงานผิด” จบที่นี่ — mapping ไม่ครบ หรือ validity หมดอายุ
R07ตรวจว่า Recovery Indicator ที่จะใช้ทดสอบมีจริงไหม
ตาราง
T8JJ
เงื่อนไข
BUKRS = <company code>
ดูอะไร
รายการ RECID ที่ใช้ได้กับบริษัทนั้น
ทำไม
ทุก object (ENH-1 · FRM-1 · RPT-4 · RPT-5 · RPT-3) validate ด้วยคู่ BUKRS+RECID — เตรียมค่าที่ถูกก่อนเทสต์
R08ตรวจ LCF ที่ถูกเก็บไว้ (หลังกดปุ่ม Update)
ตาราง
ZTAXB_T01
เงื่อนไข
Company code · Reporting year · Segment · Type of report (LCF / Unabsorbed CA)
ดูอะไร
LCF Original balance · LCF Conversion balance · LCF movement · Tax rate (สำหรับ IBCTC/IBCSVCS) · TAX_INFO
ระวัง
ถ้าไม่ใส่ Type of report จะได้ทั้ง LCF และ Unabsorbed CA ปนกัน (ดู RPT-5 §7)
R09หา FX rate สิ้นเดือนที่โปรแกรมควรใช้
ตาราง
TCURR (ดู rate type จาก ZTAXB_T03 ก่อน)
เงื่อนไข
KURST = <rate type> · FCURR · TCURR · GDATU
ระวัง
GDATU เก็บวันที่แบบ กลับด้าน (99999999 − YYYYMMDD) — SE16N แปลงให้อยู่แล้วในหน้าจอ แต่เวลา sort จะดูแปลก
ใช้ทำอะไร
คำนวณมือว่า LC2 Conversion = LC1 ÷ rate ตรงกับที่ RPT-5 แสดงหรือไม่
R10หาว่าเอกสารใบไหนเป็น “เอกสารกลับรายการ”
ตาราง
BKPF
เงื่อนไข
BUKRS · GJAHR · STBLG ≠ ' ' (มีเลขเอกสารกลับรายการ)
ดูอะไร
BELNR (ใบเดิม) · STBLG (ใบที่กลับ) · STJAH (ปีของใบที่กลับ)
ใช้ทำอะไร
ทดสอบ TC-007 ของ TAX-ENH-1 — เอกสาร reversal ต้องไม่ออกไฟล์
R11แยกกำไร/ขาดทุนด้วย SHKZG (สำหรับ IBC-TC)
ตาราง
ACDOCA
เงื่อนไข
RACCT = <บัญชี trading investment> · SHKZG = H (เครดิต = กำไร) หรือ S (เดบิต = ขาดทุน)
ดูอะไร
Subtotal HSL แยกตาม SHKZG
ทำไมสำคัญ
RPT-3 §8 ระบุว่าต้องแยกอ่านด้าน ไม่ใช่เอายอดสุทธิ
R12หาว่า trading partner ตัวไหนถูกจัด 3% หรือ 20%
ตาราง
ZTAXA_T04 แล้วต่อด้วย ACDOCA
ขั้นที่ 1
เปิด ZTAXA_T04 — ดูว่า trading partner ตัวไหนเป็น intercompany (R001) และ validity ยังใช้ได้
ขั้นที่ 2
เปิด ACDOCA กรอง BUKRS = 1086 + RACCT ที่สนใจ → ดูคอลัมน์ VBUND
ตีความ
VBUND ที่ไม่มีในตาราง = จะไม่ถูกปันเข้าคอลัมน์ไหนเลย → เป็นสาเหตุที่ Check difference ≠ 0
Pattern ที่ซ้ำใน 12 recipes — จำ pattern แทนจำสูตร
  • เริ่มจากคำถาม ไม่ใช่จากตาราง — “ทำไมยอดหาย” ต่างจาก “อยากดู ACDOCA”
  • ใส่ key field ก่อนเสมอ (company code + ปี) แล้วค่อยเพิ่มเงื่อนไขเฉพาะ
  • ตรวจ config ก่อนโทษโปรแกรม — mapping/validity ผิดเป็นสาเหตุอันดับ 1
  • Subtotal คือเพื่อนที่ดีที่สุด — เปลี่ยนข้อมูลดิบเป็นรายงานกระทบยอดใน 30 วินาที
10

Performance — อย่าทำให้ระบบช้าเพราะ query ของคุณ

⚠ เรื่องจริงที่เกิดบ่อย: consultant ใหม่เปิด ACDOCA โดยไม่ใส่ filter อะไรเลย แล้วกด Execute · ACDOCA ของบริษัทขนาด Client มีได้ หลายร้อยล้านแถว → query ค้าง · ใช้ memory มหาศาล · กระทบ user คนอื่นทั้งระบบ · basis โทรตาม อย่าให้เป็นคุณ

กติกา 7 ข้อ

  1. ใส่ key field เสมอ — ACDOCA ต้องมีอย่างน้อย RLDNR + RBUKRS/BUKRS + GJAHR
  2. กด “Number of Entries” ก่อน execute — รู้ว่าจะได้กี่แถวก่อนดึงจริง
  3. จำกัดช่วงเวลาให้แคบ — 1 งวดพอ ไม่ต้องทั้งปี ถ้าไม่จำเป็น
  4. ลดคอลัมน์ — Settings → Fields · ยิ่งน้อยยิ่งเร็ว
  5. ถ้าต้องดึงเยอะจริง ๆ ให้รัน background (Program → Execute in background) แล้วดูผลใน SP01
  6. เลี่ยง * นำหน้า — *123 ใช้ index ไม่ได้ ต้อง scan ทั้งตาราง · 123* เร็วกว่ามาก
  7. ถ้าต้องการแค่ยอดรวม ใช้ SE16H — รวมที่ระดับฐานข้อมูล ไม่ต้องดึงแถวมาทั้งหมด
วิธีรู้ว่า field ไหนเป็น key/index: เปิด SE11 → ใส่ชื่อตาราง → Display → คอลัมน์ Key ติ๊กอยู่คือ primary key · กดปุ่ม Indexes เพื่อดู secondary index → กรองด้วย field ที่อยู่ใน key หรือ index = เร็ว · กรองด้วย field อื่น = ช้า
เขียนแบบนี้ผลลัพธ์
ACDOCA · ไม่มี filter❌ อย่าทำ — ดึงทั้งตาราง
ACDOCA · RACCT = A213X025 อย่างเดียว❌ ช้ามาก — RACCT ไม่ใช่ key นำ
ACDOCA · RLDNR=0L + RBUKRS=TH01 + GJAHR=2026 + RACCT=A213X025✅ ดี — เริ่มจาก key แล้วค่อยแคบ
ACDOCA · เพิ่ม POPER = 1✅✅ ดีมาก — แคบลงอีกชั้น
11

ข้อห้าม · สิทธิ์ · และสิ่งที่ต้องระวังทางวินัย

11.1 · SE16N ในโหมดแก้ไข — รู้ว่ามี แต่ห้ามใช้

SE16N มีความสามารถแก้ไขข้อมูลตารางโดยตรงผ่าน special command (&SAP_EDIT) ซึ่งในองค์กรที่มี governance ดี จะถูกปิดใน production เสมอ และ การพยายามใช้จะถูกบันทึกไว้และตรวจสอบได้

⚠ จุดยืนที่ถูกต้องของ consultant:
  • • ห้ามแก้ข้อมูลผ่าน SE16N ในทุกระบบ รวมถึง QA/DEV เว้นแต่ได้รับอนุมัติเป็นลายลักษณ์อักษร
  • • การแก้ตารางตรง ๆ ข้ามทุก validation และ business logic → ข้อมูลจะไม่สอดคล้องกัน (เช่น ACDOCA ไม่ตรงกับ BKPF)
  • • ถ้าข้อมูลผิดจริง ให้แก้ผ่าน transaction ที่ถูกต้อง (กลับรายการ + บันทึกใหม่) หรือ ขอ data fix ผ่านกระบวนการ
  • • การที่คุณรู้ว่ามันมีอยู่และเลือกไม่ใช้ คือสิ่งที่ทำให้คุณน่าเชื่อถือ

11.2 · Authorization ที่เกี่ยวข้อง

Auth objectคุมอะไร
S_TCODEสิทธิ์เรียก T-code SE16N
S_TABU_DISสิทธิ์ดู/แก้ตามกลุ่มสิทธิ์ตาราง (authorization group)
S_TABU_NAMสิทธิ์ระดับ ชื่อตาราง (ละเอียดกว่า S_TABU_DIS)
S_DEVELOPเกี่ยวกับ debug/edit — ปกติ consultant ฝั่ง functional ไม่ควรมีใน production

ถ้าเปิดตารางแล้วขึ้น “You are not authorized to display table …” — อย่าหาทางเลี่ยง ให้แจ้ง security/basis พร้อมเหตุผลทางธุรกิจว่าต้องใช้ตารางไหนเพื่อทำอะไร

11.3 · Confidentiality — สำคัญเป็นพิเศษกับข้อมูลภาษี

12

10 กับดักที่ทำให้สรุปผิด

#กับดักอาการวิธีแก้
1Maximum no. of hits = 500สรุปว่า “ไม่มีข้อมูล” ทั้งที่มีล้างช่อง หรือกด Number of Entries
2ลืมกรอง RLDNRยอดเบิ้ล 2–3 เท่าใส่ ledger เสมอ (0L หรือ T1)
3ปล่อยช่องว่าง = คิดว่ากรอง “ค่าว่าง”ได้ทุกแถว ไม่ใช่แถวที่ว่างใช้ Selection options → Equal to + ค่าว่าง
4ลืมว่าเอกสารมีหลายบรรทัดนับ “จำนวนเอกสาร” ผิดACDOCA นับเป็น line item — ต้อง distinct BELNR
5สับสน ปี GJAHR กับ ปีของ posting dateข้อมูลข้ามปีหายตรวจ BUDAT ควบคู่กับ GJAHR
6ไม่ดูเอกสารกลับรายการยอดเกินความจริงเช็ค BKPF-STBLG (recipe R10)
7เอายอดสุทธิแทนที่จะแยก debit/creditกำไร/ขาดทุนหักล้างกันหมดกรอง SHKZG แยก S / H
8ลืมเช็ค Valid From/To ของตาราง configดู mapping ที่หมดอายุแล้วกรองด้วยวันที่ของงวดที่รายงาน
9Excel ตัดเลข 0 นำหน้ารหัสเพี้ยน (0001 → 1)export เป็น text แล้ว import แบบระบุ column type
10ดูตารางผิดระบบ (DEV/QA/PRD)ข้อมูลไม่ตรงกับที่ user เห็นเช็คมุมขวาล่างของหน้าจอ SAP ว่าอยู่ system ไหน ก่อนสรุปทุกครั้ง
กับดักที่ 10 คือกับดักที่ทำให้เสียหน้าที่สุด: คุณเช็คใน DEV แล้วบอก user ว่า “ไม่มีข้อมูล” แต่ user ดูอยู่ใน QA → เสียเวลาทั้งวัน · ติดนิสัยพูดชื่อระบบทุกครั้ง เช่น “ผมเช็คใน QA client 200 แล้วครับ พบว่า…”
Self-check

ทวนความเข้าใจ

1. อยากดูข้อมูล 1 ตาราง vs อยากรู้ว่าตารางมี field อะไรบ้าง — ใช้ T-code ต่างกันยังไง?

ดูข้อมูล → SE16N · ดูโครงสร้าง (field, key, index, check table) → SE11 · ถ้าอยากรวมยอด/group by → SE16H · ถ้าต้อง join 2 ตาราง → SQVI

2. * กับ + ต่างกันอย่างไร ยกตัวอย่าง

* = อักขระกี่ตัวก็ได้ (รวม 0 ตัว) · + = อักขระ 1 ตัวพอดี → 3* ได้ 3, 3A, 3AB · 3+ ได้เฉพาะ 3A, 3B … (ยาว 2 ตัว)

3. ค่าอะไรใน ACDOCA ที่บอกว่าบรรทัดนั้นเป็นภาษีหัก ณ ที่จ่าย?

KTOSL = 'WIT' — ใช้เป็นเงื่อนไขหลักของทั้ง TAX-ENH-1 และ TAX-FRM-1

4. จะหาแถวที่ WT_WITHCD “ไม่ว่าง” ต้องทำอย่างไร?

คลิกไอคอนลูกศร → Selection options → เลือก “Not equal to” แล้วปล่อยค่าเป็นช่องว่าง · ไม่ใช่การปล่อยช่องบนหน้าจอว่างไว้ (นั่นแปลว่า “ไม่กรอง field นี้”)

5. ก่อนกด Execute บนตารางใหญ่ ควรทำอะไรก่อน 2 อย่าง?

(1) ล้าง “Maximum no. of hits” หรือกำหนดค่าที่ตั้งใจ · (2) กด “Number of Entries” เพื่อรู้จำนวนแถวจริงก่อนดึง · และต้องแน่ใจว่ามี key field (ledger + company code + ปี) ในเงื่อนไขแล้ว

6. อยากได้ยอดรวมต่อ profit center จาก ACDOCA ทำยังไงใน SE16N?

Sort ตาม PRCTR → เลือกคอลัมน์ยอด (HSL/KSL) กด Total (Σ) → กด Subtotal ตาม PRCTR · จะได้ยอดต่อ profit center ทันที (หรือใช้ SE16H ที่ group by ได้ตรง ๆ)

7. ทำไมการกรองด้วย *123 ถึงช้ากว่า 123*?

เพราะ ดอกจันนำหน้าทำให้ใช้ index ไม่ได้ — ฐานข้อมูลต้อง scan ทุกแถวเพื่อเทียบ ขณะที่ 123* ยังใช้ index หาจากจุดเริ่มต้นได้

8. เจอปัญหา “ยอดในรายงานเบิ้ล 2 เท่า” — ข้อสงสัยแรกคืออะไร?

ไม่ได้กรอง RLDNR (ledger) — เอกสารเดียวกันมีบรรทัดในหลาย ledger (0L leading + T1 tax + อื่น ๆ) · เป็นสาเหตุเดียวกับที่ TAX-FRM-1 ระบุ RLDNR = '0L' ในเส้นทางที่หา PRCTR

9. SE16N แก้ข้อมูลได้ไหม และควรทำไหม?

ในทางเทคนิคทำได้ผ่าน special command แต่ห้ามทำ — production ปิดไว้ · การใช้ถูก log และ audit · การแก้ตารางตรงข้ามทุก validation ทำให้ข้อมูลไม่สอดคล้องกัน · ถ้าข้อมูลผิด ให้แก้ผ่าน transaction ที่ถูกต้อง

10. ก่อนบอก user ว่า “ไม่มีข้อมูล” ต้องเช็คอะไรเป็นข้อสุดท้าย?

ระบบและ client ที่คุณกำลังดูอยู่ (DEV / QA / PRD · client number) — ดูมุมขวาล่างของหน้าจอ SAP · และควรพูดชื่อระบบทุกครั้งที่รายงานผล