สรุปแบบ เข้าใจง่าย จาก FD ตัวจริง — รายงานนี้เอา PND54 (WHT จ่ายไปต่างประเทศ) มากระทบยอดกับ
VAT36 / PP36 (reverse-charge VAT) ที่มักเกิดจากธุรกรรมเดียวกัน (จ่ายค่าบริการต่างประเทศ)
· FD เขียนว่าใช้ standard report S_P00_07000134 แล้วเพิ่ม field ในจอเลือก — ในระบบจริงคือ ZTAXA_R01 = enhanced copy ของ RFIDYYWT เรียกด้วย T-code ZTAXB_R01 และ design หลายข้อถูกตกลงใหม่หลัง FD v0.1 (ดู §2.5)
S_P00_07000134 + 2 field ใน Further Selections (Profit Center & Recovery Indicator) · ระบบ: ZTAXB_R01 → ZTAXA_R01 (Z-copy ของ RFIDYYWT) · output group R03TCURR-UKURSZTAXA_R03 (WHT adj) → month-end ZTAXA_R02 (VAT36) → รัน reconBSAK (clearing) → invoice → BKPF/BSET/ACDOCA/WITH_ITEMZTAXB_R01 · main program SAPLZTAXA_R01 · engine RFIDYYWT · output group ทางการ R03 (FD ไม่ระบุ) · CoCd TH01 · รายงาน read-only run ได้เสมอ · defect 3 ตัว + ระบบ unit test 9 TC + ทักษะ post/อ่าน document ทั้งหมดอยู่ที่ TAX-RPT-1 FUT Field Notes →| WRICEF ID | TAX-RPT-1 |
| Title | Reconciliation Report for PND.54 (including profit center) |
| T-code / Main program | ZTAXB_R01 / SAPLZTAXA_R01 (ยืนยันจาก FUT) |
| Standard base / engine | S_P00_07000134 · RFIDYYWT (Generic WHT Reporting) |
| Output group | R03 — Attachment P.N.D. 3/53/54 (ทางการ · FD ไม่ระบุ) |
| Company code | TH01 · TH |
| Module | SAP Finance — Tax Accounting |
| Description | สร้างรายงานกระทบยอด PND.54 และ VAT PP36 |
| Type | Report |
| Nature | Retrofit from ECC (Change) |
| Business Process | 01.01.07.03 Withholding Tax |
| Complexity / Priority | Medium · P1 |
| Business Owner | Client Tax team |
| Geography | Thailand เท่านั้น |
[S/4 Program]_D2.1_Blueprint_01.01.07 Tax Accounting · Previous FS = 65_undefined PND54 Attachmentรายงานเอา WHT (ฝั่ง PND54) มาเทียบกับ VAT36 (ฝั่ง invoice) — ต้องแปลง FC เป็น THB ตามมาตรา 9 ของประมวลรัษฎากร
เข้าใจง่าย ๆ: เวลาจ่ายค่าบริการให้ต่างชาติ มักเกิด 2 ภาระพร้อมกัน — หัก WHT (ยื่น PND54) และตั้ง VAT แทน (VAT36 → PP36) รายงานนี้ดึงทั้งสองฝั่งมาวางคู่กัน + แนบ Profit Center / Recovery Indicator เพื่อตรวจว่ายอดตรงกัน
FD v0.1 (23/10/2025) ไม่ใช่คำตอบสุดท้าย — ส่วนนี้คือสิ่งที่ ตกลงแล้ว (AGREED) และสิ่งที่ เห็นในระบบ (SYS) · ช่องว่างระหว่าง FD กับ design นี้ต้องปิดด้วย FD v0.2 / CR ก่อน UAT sign-off (G3)
| Column | FD step | Source | Date | Serves |
|---|---|---|---|---|
| Fx on TaxPmt | 22 | BKPF-KURSF ของ payment ที่ post แล้ว | T | WHT / ภ.ง.ด.54 |
| Fx on Posting date | 28 | รายงาน lookup TCURR เอง | T-1 (≤ fallback) | VAT / ภ.พ.36 |
คลิกวันในแถบด้านล่างเพื่อทำเป็น “วันหยุด” (ไม่มี rate ใน TCURR) · เสาร์–อาทิตย์ไม่มี rate อยู่แล้ว
M เท่านั้น · FCURR = สกุล invoice (BSAK-WAERS) → THB · GDATU = วัน posting ของ payment − 1 แบบ ≤ fallback · guard UKURS/FFACT = 0 · 5 ทศนิยมabs(FC) × sign(RC)WT_QBSHB) หรือ prorate ตาม base — รอ team lead (D3)| ชั้น | รายละเอียด |
|---|---|
| Output group | R03 ผ่าน T059ID01 WT_OG_REP_DOC · โค้ดจริงไม่ใช้ sy-tcode (เงื่อนไข sy-tcode ถูก comment ทิ้ง) — ส่ง output group ผ่าน memory ID ZTAXA_R01_OUTPUTGROUP ก่อนเรียก ZTAXA_R01_DISPATCHER (TAX-ENH-7, 03-Aug-2026) · ดู ZTAXA_R01 X-ray |
| Standard data source | FM มาตรฐานของ RFIDYYWT |
| TH BAdI | DELETE_EWHT_DOCUMENTS |
ZTAXA_R01_I02 | FORM check_witht อ่าน whitelist ZCAX_P01 param WHT_TYPE_PND54 · DELETE ไม่มี key GJAHR/BUKRS + เสี่ยง sort ของ BINARY SEARCH — ผู้ต้องสงสัยหลักของ doc 8084322612 (5G/B8) ที่หาย |
ZTAXA_R01_I01 | PC/RI filter ลบที่ ระดับ document ใน i01_select_wt_data |
| Output | ZTAXA_R01_DISPATCHER / ZTAX_PRINT_ALV (ALV) |
ทั้งหมดนี้เป็น locked decisions — รายการเต็มและคำถามที่รอคำตัดสินอยู่ที่ Decisions & Open Points · หลักฐาน FUT อยู่ที่ RPT-1 testing
ต้องรันตามลำดับ — รายงานจะครบก็ต่อเมื่อ 2 โปรแกรมก่อนหน้ารันแล้ว
| Ref | ขั้นตอน | รายละเอียด |
|---|---|---|
| 01 | AP Invoice Posting | ลง AP invoice พร้อม VAT36 · บางเคส invoice ไม่มี VAT36 แต่มี PND54 · การจ่ายใช้ PND54 WHT code |
| 02 | Run WHT Adjustment | รัน ZTAXA_R03 เพื่อปรับ WHT |
| 03 | Generate VAT36 | หลังปิดงวด รันทุก payment doc ด้วย ZTAXA_R02 – VAT36 → สร้าง VAT liability line items สำหรับยื่น |
| 04 | Reconciliation Report | รันรายงานกระทบยอด PND54 ↔ VAT36 เพื่อตรวจความถูกต้อง/ครบถ้วน |
ZTAXA_R03 แต่ TC-006 เขียน ZTAXA_E02 · field 29 เขียน ZTAXA_R02 (WRICEF TAX-ENH-3) ส่วน flow เขียน ZTAXA_R02 TODO: verify ชื่อโปรแกรมที่ถูกต้องกับทีมFD: ใช้ standard แล้วเพิ่ม 2 field ใต้ปุ่ม “Further Selections” · ระบบ: ZTAXA_R01 Z-copy (ดู §2.5)
Report ใช้ S_P00_07000134 (Generic Withholding Tax Reporting) แสดงผลแบบ ALV · Data source = withholding transactions ใน SAP · Module = FI-TAX, FI-AP
| Field ที่เพิ่ม | คุณสมบัติ | Validation |
|---|---|---|
| Profit Center | Alphanumeric · Optional · From/To/Multiple | Validate กับ CEPC (field PRCTR) |
| Recovery Indicator | Alphanumeric · Optional · Multiple | ดึงจาก T8JJ (field RECID) · validate ด้วยคู่ company code (BUKRS) + RECID ใน T8JJ |
เข้าใจอันนี้อันเดียว แล้วตาราง 34 fields จะอ่านง่ายขึ้นมาก
ไอเดีย: เริ่มจาก เอกสารการจ่าย (PND54) → ใช้เลขเอกสารไปหา invoice ผ่านตาราง BSAK (เอกสาร clearing) → แล้วดึงข้อมูลฝั่ง VAT36 จากตารางต่าง ๆ ของ invoice นั้น
WIT = withholding · VST = input VAT · XST = (ใช้ดึง PC/Recovery ฝั่ง invoice) · rate/ชื่อ WHT มาจาก T059Z · rate แปลงค่ามาจาก TCURRส่วนใหญ่ “Same as ECC” — ที่น่าสนใจคือ field ที่มี logic ดึงข้ามตาราง (ไฮไลต์ด้านล่าง)
| # | Field | ความหมาย / ที่มา |
|---|---|---|
| 1 | Cert. No | เลขที่หนังสือรับรอง — same as ECC |
| 2 | Business Place | สาขาภาษี — same as ECC |
| 3 | Document No. | เลขเอกสารการจ่าย (แกนอ้างอิง) — same as ECC |
| 4 | Doc WHT FX ADJ | เอกสารปรับ FX ของ WHT: BSEG (KTOSL=WIT, ตรง BELNR/GJAHR/BUKRS ของขั้น 3) → คืน AUGBL (clearing doc) |
| 5–14 | WHT Code / Type / Posting date / Recipient Type / Address / Payment Curr. / WT base-amt / WT amt in RC / Bus Area / Payment Date | same as ECC |
| 15 | WHT rate | T059Z (LAND1=TH, WITHT=type, WT_WITHCD=code) → QSATZ |
| 16 | WHT Descp | T059Z เงื่อนไขเดียวกัน → TEXT40 (ชื่อ) |
| 17 | Profit Center | ACDOCA (RLDNR=0L, KTOSL=WIT, ตรงเอกสารขั้น 3) → PRCTR |
| 18 | Recovery Indicator | ACDOCA (0L, KTOSL=WIT) → RECID |
| 19 | AP Voucher No. | ตัวเชื่อมไป invoice: BSAK (AUGBL=เลขจ่ายขั้น 3) → BELNR ที่ BELNR ≠ AUGBL (+ BUKRS, GJAHR) |
| 20 | WT base/amt FC | WITH_ITEM (ตรง BUKRS/GJAHR/BELNR ของขั้น 19) → WT_QSSHB |
| 21 | WT amt in FC | WITH_ITEM → WT_QBSHB |
| 22 | Fx. On TaxPmt | BKPF (เอกสารจ่ายขั้น 3) → KURSF (exchange rate) |
| # | Field | ความหมาย / ที่มา |
|---|---|---|
| 23 | AP Voucher No. | = ขั้น 19 (BSAK-BELNR) |
| 24 | Posting Date | BKPF (BELNR=invoice ขั้น 19) → BUDAT |
| 25 | VAT36 base/amt FC | BSET (invoice ขั้น 19) → FWBAS (tax base) |
| 26 | VAT36 amt FC | BSET → FWSTE (amount) |
| 27 | Invoice doc curr | BKPF → WAERS (สกุลเงิน invoice) |
| 28 | Fx on Posting date | LC1 ใช้ rate วันทำการก่อนหน้า (T-1) → TCURR-UKURS ที่ GDATU = BUDAT − 1 · เลือกสกุลตาม 3 กฎ Section 9 |
| 29 | VAT36 Doc No. | ดึงจากโปรแกรม ZTAXA_R02 (WRICEF TAX-ENH-3) ด้วย AP voucher no + company code + fiscal year |
| 30 | VAT36 base (THB) | = BSET-FWBAS (ขั้น 25) × TCURR-UKURS (ขั้น 28) |
| 31 | VAT36 PmtAmt (THB) | = BSET-FWSTE (ขั้น 26) × TCURR-UKURS (ขั้น 28) |
| 32 | VAT code | ACDOCA (0L, KTOSL=VST) → MWSKZ |
| 33 | Profit center | ACDOCA (0L, KTOSL=XST) → PRCTR |
| 34 | Recovery Indicator (Invoice) | ACDOCA (0L, KTOSL=XST) → RECID |
RC = Reporting Currency · FC = Foreign Currency · fields 5–14 เป็น “same as ECC” จึงย่อรวมไว้
9 เคสจาก FD จริง + validation อีก 2 · จัดกลุ่ม: สกุลเงิน (FX) · selection · dependency · edge/negative
Badge: FD = จากเอกสารจริง · PROPOSED = ผม derive ต้อง verify
ก่อนทดสอบ (precondition): ต้องมี WHT ของ recipient type “54” posted แล้ว · invoice ต้อง post ด้วย VAT PP36 tax code (บางเคสอาจมีแต่ PND54)
ZTAXA_E02 (= ZTAXA_R03)
Whenรัน adjustment ก่อน recon
Thencolumn Doc WHT FX Adj มีค่าในรายงาน
ZTAXA_R02 (VAT36)
Whenรัน ก่อน recon
Thencolumn VAT36 Doc No. มีค่าในรายงาน
CEPC ของ company code นั้น
Whenยืนยันในจอเลือก
Thenvalidation ไม่ผ่าน (ตรวจกับ CEPC-PRCTR)
T8JJ)
Whenยืนยันใน Further Selections
Thenvalidation ไม่ผ่าน (ตรวจคู่ BUKRS + RECID ใน T8JJ)
| Frequency | Monthly · Ad Hoc |
| Trigger | Manual execution (T-code → list output) |
| Volume | ~800–1,000 records |
| Output | ALV · Online + File Download (Summary + Detail) |
| Roles (display) | Accountant · Tax Accountant · AP Accountant · Business Analyst |
| Error handling | ไม่มี exception ใหม่ (No new exception) |
3 objects ของซีนั่งอยู่บน selection screen เดียวกัน (+ FRM-3 ของเพื่อนร่วมทีม)
| ตัวเรียกร่วม | ZTAXB_R01 → ZTAXA_R01 (Z-copy ของ RFIDYYWT / Generic Withholding Tax Reporting) |
| Field ที่เพิ่มร่วมกัน | Profit Center (validate CEPC-PRCTR) · Recovery Indicator (validate T8JJ-RECID คู่กับ BUKRS) — ทั้ง 3 objects ใช้กติกาเดียวกันเป๊ะ |
| Output group | R03 คือประตูที่เรียก ฟอร์มใบแนบของ TAX-FRM-1 — ตรงกับที่คุณเห็นตอน FUT |
| Object | Output | WHT Type ที่ครอบคลุม | เจ้าของ |
|---|---|---|---|
TAX-RPT-1 | ALV — recon ภ.ง.ด.54 ↔ ภ.พ.36 | ฝั่ง 54 (5A / 5D) | ★ คุณ |
TAX-FRM-1 | Adobe Form — ใบแนบ PDF | 3A–3F (ภ.ง.ด.3) · 4A–4F (53) · 5A,5D (54) | ★ ซี |
TAX-ENH-1 | DMEEX — text file e-Filing | 1A–1E · 2A · 3A–3F · 4A–4F | ★ ซี |
ข้อสังเกตที่ทำให้เห็นภาพทั้งกระบวนการยื่นภาษี:
→ เปิด TAX-FRM-1 deep-dive · เปิด TAX-ENH-1 deep-dive · SE16N — วิธีพิสูจน์ข้อมูลด้วยตัวเอง
ตอบในใจก่อนกดเฉลย — โฟกัสจุดที่ออกสอบ/ทดสอบบ่อย
1. TAX-RPT-1 ใช้โปรแกรมอะไร และเพิ่ม field อะไรในจอเลือก?
2. Invoice เป็น USD จ่ายเป็น THB — ใช้สกุลไหนแปลงเป็น THB?
3. ฝั่ง VAT36 (invoice) ใช้ rate ของวันไหน และจากตารางใด?
4. ต้องรันโปรแกรมใดก่อน recon จึงจะได้ column WHT FX Adj และ VAT36 Doc No.?
5. เชื่อมเอกสารจ่ายไป invoice ผ่านตารางอะไร?