“ใบแนบ” คือเอกสารรายละเอียดที่แนบท้ายแบบยื่น — รายชื่อผู้ถูกหักภาษี ยอดจ่าย ยอดภาษี ทีละบรรทัด
FRM-1 พิมพ์ใบแนบของ ภ.ง.ด. 3 (บุคคลธรรมดา) · 53 (นิติบุคคลในประเทศ) · 54 (จ่ายไปต่างประเทศ)
สิ่งที่ “เปลี่ยน” จริง ๆ มีแค่ 2 อย่าง — เพิ่มมิติ Profit Center / Recovery Indicator บนหน้าจอ
และเปลี่ยนวิธีดึง เลขประจำตัวผู้เสียภาษีของผู้ขาย ให้มาจาก DFKKBPTAXNUM
RLDNR = '0L' และ KTOSL = 'WIT' เสมอTAXTYPE = 'TH1' ถ้าเป็นบุคคล, 'TH3' ถ้าไม่ใช่ · แล้วหยิบ TAXNUM หรือ TAXNUMXL ตัวที่ ไม่ว่างForm บน standard transaction เดิม · ผลิตเอกสารกระดาษที่ยื่นจริงต่อกรมสรรพากร
แบบยื่น ภ.ง.ด. 3 / 53 / 54 มี “หน้าปก” ที่สรุปยอดรวม กับ “ใบแนบ” ที่ลิสต์รายละเอียดผู้ถูกหักภาษีทีละราย TAX-FRM-1 คือตัวพิมพ์ ใบแนบ — ไม่ใช่หน้าปก และไม่ใช่หนังสือรับรองการหักภาษี (50 ทวิ)
| แบบยื่น | ใช้กับใคร | WHT Type | Recipient Type |
|---|---|---|---|
| ภ.ง.ด. 3 | จ่ายให้ บุคคลธรรมดา ในประเทศ | 3A 3B 3C 3D 3E 3F | 03 |
| ภ.ง.ด. 53 | จ่ายให้ นิติบุคคล ในประเทศ | 4A 4B 4C 4D 4E 4F | 53 |
| ภ.ง.ด. 54 | จ่าย ออกไปต่างประเทศ (มาตรา 70) | 5A 5D | 54 |
| ของเดิม (ECC) | ครอบคลุม |
|---|---|
65_ZTAXA_F03 PND3-53 Attachment | ใบแนบ ภ.ง.ด. 3 และ 53 |
65_undefined PND54 Attachment | ใบแนบ ภ.ง.ด. 54 |
Legacy form output R03 | “Attachment P.N.D. 3, 53 and 54” |
FD ระบุ trigger ว่า “Invoice posting subject to WHT (FB60 / MIRO / FB01) with the WHT code of WHT type (PND3, 53) or (PND54)” → หมายความว่า ใบแนบเกิดจากเอกสารตั้งหนี้/จ่ายเงินที่มี WHT ไม่ได้เกิดจาก event ใด ๆ ในระบบเอง ตัวฟอร์มถูกพิมพ์ทีหลังแบบ manual/on demand
หน้าจอเดียวกับ TAX-RPT-1 / TAX-ENH-1 — แต่ block “Forms” เป็นของ FRM-1 โดยเฉพาะ
| Block | Field | บทบาทกับ FRM-1 |
|---|---|---|
| Output Groups | Process Type · Output Groups | ต้องเลือกกลุ่มที่ผูกกับ R03 ฟอร์มจึงจะออก |
| Mandatory Selections | Country Key · Reporting Period | TH + งวดที่ยื่น |
| General Selections | Company Code · Fiscal Year · Ext. WH Tax Type · Ext. WH Tax Code · Classic WH Tax Code · Suppliers · Customers | ตัวกรองหลัก |
| General Control | (standard) | — |
| Further Selections | Profit Center (from–to + multiple) · Recovery Indicator (multiple) | ← delta ของ S/4 (ทั้งคู่ optional) |
| Output Control And Lists | (standard) | — |
| Forms | Sender Variant · Form 1: Attachment (Print form 1 / Print Immediately / Number of copies / Output Device) · Form 2: Attachment (ชุดเดียวกัน) | คุมการพิมพ์ใบแนบ 2 ชุด |
| Screen field | Type | Attribute | Parameter | Validation |
|---|---|---|---|---|
| Profit Center | Alphanumeric | Optional | From, To + multiple selection | ตรวจกับตาราง CEPC field PRCTR |
| Recovery Indicator | Alphanumeric | Optional | Multiple selection | ตรวจ คู่ ของ BUKRS + RECID ในตาราง T8JJ |
หัวใจของ FD ฉบับนี้ · ให้ดูที่ “ทิศทางลูกศร” ไม่ใช่ที่ชื่อ field
PRCTR + GJAHR เข้า ACDOCA · เงื่อนไข KTOSL = 'WIT'BELNR ออกมาBELNR + GJAHR เข้า WITH_ITEM · WT_WITHCD ต้อง ไม่ว่างWITHT ∈ {3A…3F} และ QSREC = '03' → ภ.ง.ด. 3WITHT ∈ {4A…4F} และ QSREC = '53' → ภ.ง.ด. 53WITHT ∈ {5A, 5D} และ QSREC = '54'BUKRS + GJAHR จาก selection screen เข้า WITH_ITEM · WT_WITHCD ไม่ว่างWITHT / QSREC ตามแบบ (3A–3F/'03' หรือ 4A–4F/'53')BELNR ออกมาBUKRS + GJAHR + BELNR เข้า ACDOCA · RLDNR = '0L' และ KTOSL = 'WIT'PRCTR ออกมาWITHT ∈ {5A, 5D} และ QSREC = '54'RECID + GJAHR เข้า ACDOCA · match KTOSL = 'WIT' · ดึง BELNRBELNR + GJAHR เข้า WITH_ITEM · WT_WITHCD ไม่ว่างWITHT/QSREC ตามแบบ (3/53 หรือ 54)RLDNR = '0L' ใน FD
แต่เส้นทาง B ระบุไว้ชัดเจน — เพราะ B ต้องอ่าน ACDOCA เพื่อ “หา PRCTR” จึงต้องล็อก ledger กันข้อมูลซ้ำจาก ledger อื่น (เช่น T1)
ส่วน A/C ค้นด้วย PRCTR/RECID ที่ระบุมาแล้ว จึงเสี่ยงซ้ำน้อยกว่า
ในทางปฏิบัติควรล็อก RLDNR ทุกเส้นทาง — ถ้าเจอยอดซ้ำตอนเทสต์ ให้สงสัยจุดนี้ก่อน
TODO: verifyfield เดียวที่เปลี่ยนใน 18 fields · แต่เป็นตัวที่ทำให้ยื่นผ่าน/ไม่ผ่าน
WITH_ITEM กรอง WITHT/QSREC ตามแบบ และ WT_WITHCD ต้องไม่ว่างWT_ACCO (Vendor Number)WT_ACCO เข้าตาราง DFKKBPTAXNUM ที่ field PARTNERTAXTYPE (Identification Type) — ถ้าผู้ขายเป็นบุคคล ใช้ TH1 · ถ้าไม่ใช่ ใช้ TH3TAXNUM (Tax Number) หรือ TAXNUMXL (Tax Number Long) — ตัวไหนที่ไม่ว่างTAXTYPE ให้ถูก ไม่งั้นอาจได้เลขของประเทศอื่น/ประเภทอื่นWITH_ITEM-WT_ACCO มีค่าไหม (2) DFKKBPTAXNUM มี record ของ partner นั้นไหม
(3) record นั้น TAXTYPE เป็น TH1/TH3 ตรงกับประเภทผู้ขายไหม
→ ตาม TC-02 ระบบต้องปล่อยช่องว่างไว้ พร้อมขึ้นข้อความ “The field xxx is not available in the table xxx”“No change” ทุกช่อง ยกเว้น [7] — เท่ากับ delta ของ object นี้ทั้งหมดอยู่ที่ 1 บรรทัด
| # | Form field | SAP field | SAP table | สถานะ |
|---|---|---|---|---|
| [1] | Tax identification number (Company Tax ID) | No change | No change | เดิม |
| [2] | Branch (สาขา) | No change | No change | เดิม |
| [3] | T-sheets in the number (แผ่นที่) | No change | No change | เดิม |
| [4] | Rank (ลำดับ) | No change | No change | เดิม |
| [5] | Company Name | No change | No change | เดิม |
| [6] | Company Address | No change | No change | เดิม |
| [7] | Tax Identification of Vendor | TAXNUM หรือ TAXNUMXL | DFKKBPTAXNUM | ← เปลี่ยน (Condition 1) |
| [7] | Name — Vendor Name1 & Name2 & Name3 | No change | No change | เดิม |
| [8] | Payee Address | No change | No change | เดิม |
| [9] | Date of payment | No change | No change | เดิม |
| [10] | Currency Exchange Document No. | No change | No change | เดิม |
| [11] | Income type (Income text) | No change | No change | เดิม |
| [12] | WHT Rate (Tax rate) | No change | No change | เดิม |
| [13] | Amount of payment (WHT base amount) | No change | No change | เดิม |
| [14] | Taxes deducted and remitted (WHT tax amount) | No change | No change | เดิม |
| [15] | Paid Condition | No change | No change | เดิม |
| [16] | Total Earnings (Total WHT Base) | No change | No change | เดิม |
| [17] | Withholding tax Amount (รวม) | No change | No change | เดิม |
| [18] | FI Document No. | No change | No change | เดิม |
65_ZTAXA_F03/undefined) เอาเอง
เวลาทำ FUT/FIT คุณจึงต้อง ตรวจครบทั้ง 18 ช่อง ไม่ใช่ตรวจแค่ช่องที่ระบุว่าเปลี่ยน (นี่คือ TC-01)| ส่วน | สถานะ |
|---|---|
| Header Section · Item Table · Summary · Footer · QR Code/Barcode | No change |
| Logos | No change |
| Page Breaks | No page break |
| Sorting | N/A |
รายละเอียดการรันจริง — ข้อมูลชุดนี้มักถูกถามใน cutover/hypercare
| Attribute | ค่า |
|---|---|
| Form Type | Adobe Form (ไม่ใช่ SAPScript / Smart Form) |
| Trigger | Manual |
| Trigger Event / Batch Program | S_P00_07000134 |
| Output Channel | |
| Output Determination | N/A — ไม่มี Output Management (ไม่ใช่ BRF+) |
| Document Type | Vendor Invoice / AP payment posting |
| Language | Thai |
| Execution Frequency | Monthly + Ad hoc |
| Processing method | On demand |
| Expected Volume | Up to 500 / เดือน |
| Printer requirement | เครื่องพิมพ์ทั่วไป · กระดาษ A4 |
| Role | Access |
|---|---|
| Accountant | สร้าง/พิมพ์ฟอร์มได้ |
| Tax Accountant | สร้าง/พิมพ์ฟอร์มได้ |
| Business Analyst | ดูได้อย่างเดียว (display) |
FD ระบุทั้ง 3 ระดับว่า “No new exceptions to be added” — คือ ใช้ข้อความ error เดิมของ standard ยกเว้นข้อความที่ปรากฏใน test conditions (profit center ไม่พบ / recovery indicator ไม่พบ / field ไม่มีในตาราง) ซึ่งเป็น expected behaviour ที่ต้องมีจริงตอนเทสต์
สังเกตว่าครึ่งหนึ่งเป็น negative test — ฟอร์มที่ดีต้อง “พังอย่างมีมารยาท”
| Test ID | Condition | Expected result |
|---|---|---|
| TC-01 | ดึงข้อมูลครบทุก field ตาม “2.3.3.6 Required data for form” | ข้อมูลถูกต้องครบทั้ง 18 ช่อง |
| TC-02 | Negative: ข้อมูลไม่มีในตารางที่อ้างถึง | ช่องนั้น เว้นว่าง + ขึ้นข้อความ “The field xxx is not available in the table xxx” ระหว่างรัน |
| TC-03 | พิมพ์ A4 · ภาษาไทย · ข้อมูลเกิน 1 หน้า | พิมพ์ครบทุกหน้า ข้อมูลไม่ตกหล่นเมื่อข้ามหน้า |
| TC-04 | เลือก Profit Center | ฟอร์มออกตาม profit center ที่เลือก |
| TC-05 | Negative: profit center ที่เลือกไม่มีอยู่ | error “profit center xxxxx is not found” |
| TC-06 | เลือก Recovery Indicator | ฟอร์มออกตาม recovery indicator |
| TC-07 | Negative: recovery indicator ที่เลือกไม่มีอยู่ | error “recovery indicator xx is not found” |
| TC-08 | พิมพ์เกิน 1 หน้าต่อฟอร์ม | พิมพ์ได้หลายหน้าถูกต้อง |
สิ่งที่ FD ไม่ได้บอก แต่เจอจริงตอนเทส — ทุกข้อเป็นของซีในฐานะเจ้าของ object
| # | อาการ | หลักฐาน |
|---|---|---|
| 1 | 17-Sep · Multiple Profit Center ใส่ 2 PCs → vendor ของบรรทัดถูก คัดลอกจากบรรทัดก่อนหน้า (root cause ยังไม่ trace) | run ด้วย PC 2 ตัว |
| 2 | 21-Sep · Alternative payee: FRM-1 พิมพ์ชื่อ / ที่อยู่ / Tax ID จาก BP master (DFKKBPTAXNUM, BP category TH1) แทนข้อมูล payee บนเอกสาร (BSEC) · certificate ZTAXA_F02 ถูกแก้ไปแล้ว (8-Jul) ให้ใช้ BSEC-STCD3 → STCD1 → blank | test vendor VTEST0001 (“payee in document” = X) · docs 2004325075 / 3641 / 3642 / 3643 |
| 3 | Header พิมพ์ “แผ่นที่ 1 ในจำนวน 0 แผ่น” | — |
| 4 | เลขลำดับไม่ตรงกัน: attachment 070002 vs certificate 070000 | doc 2004325629 |
2004327460 อาจนับซ้ำ · ใช้กฎ split ของ TKT-01 หลังได้ sign-off5A/5D ปัจจุบัน → 8084322612 หาย · ใช้คำตัดสินเดียวกับ RPT-1 TBCBUKRS และ RLDNR = '0L'ZTAXA_F03/004) และเทคโนโลยี Smart Form vs Adobe อ่านจาก FD ไม่ออก TBCWITH_ITEM ที่ไม่ถูก update ด้วยยอด GL (8084322568)2004327460 ทั้ง 2 PCs + population แบบไม่กรอง · 8084322612 เพื่อบันทึกพฤติกรรม 5G ปัจจุบัน
เพราะ Profit Center ไม่ใช่ field ของโลก WHT — WITH_ITEM ไม่มี PRCTR
PRCTR อยู่ในโลกบัญชี (ACDOCA) เท่านั้น
เมื่อ user ไม่ระบุ PC โปรแกรมจึงต้อง “ยิงกลับ” ไปถาม ACDOCA ว่าเอกสารแต่ละใบตกที่ profit center ไหน
แล้วค่อยจัดกลุ่มพิมพ์ — ต้นทุน performance และความเสี่ยงข้อมูลซ้ำอยู่ตรงนี้
RLDNR = '0L'
S/4HANA ของ Client มีหลาย ledger (leading 0L + ledger ภาษี เช่น T1)
เอกสารเดียวกันจะมีบรรทัดใน ACDOCA หลาย ledger ถ้าไม่ล็อก ledger
การหา PRCTR จะได้ record ซ้ำ → ใบแนบซ้ำ/ยอดเบิ้ล
0L = ledger หลักตามมาตรฐานบัญชี ซึ่งเป็นตัวที่สะท้อน profit center ที่แท้จริงของรายการ
| Object | Output | ใช้ WHT Type อะไร | สถานะของคุณ |
|---|---|---|---|
| TAX-RPT-1 | ALV — กระทบยอด ภ.ง.ด.54 ↔ ภ.พ.36 | ฝั่ง 54 (5A/5D) | ★ ของคุณ |
| TAX-FRM-1 (หน้านี้) | Adobe Form — ใบแนบ PDF | 3A–3F · 4A–4F · 5A/5D | ★ ของซี |
| TAX-ENH-1 | DMEEX — text file e-Filing | 1A–1E · 2A · 3A–3F · 4A–4F | ★ ของซี |
→ สังเกต: ภ.ง.ด. 54 มีใบแนบ (FRM-1) และมีรายงานกระทบยอด (RPT-1) แต่ไม่มี text file (ENH-1) เพราะ 54 ยื่นด้วยวิธีต่างจากแบบอื่น · ส่วน ภ.ง.ด. 1/1ก/2/2ก มี text file แต่ไม่มีใบแนบใน FRM-1
4 จุดที่ต้องกระทบยอดทุกครั้ง
1. ถ้า user ไม่ใส่ Profit Center เลย โปรแกรมเริ่มอ่านตารางไหนก่อน?
WITH_ITEM ด้วย BUKRS+GJAHR จาก selection screen
แล้วดึง BELNR ไปถาม ACDOCA (RLDNR='0L', KTOSL='WIT') เพื่อขอ PRCTR
จากนั้นถ้ามีหลาย PRCTR → แตกใบแนบทีละ profit center
2. WHT Type ของ ภ.ง.ด. 54 มีกี่ตัว อะไรบ้าง?
5A และ 5D คู่กับ recipient type '54' —
ต่างจาก 3 และ 53 ที่มี 6 ตัว (3A–3F / 4A–4F)
3. TAXTYPE = TH1 กับ TH3 ต่างกันยังไง?
TAXNUM หรือ TAXNUMXL ตัวที่ไม่ว่าง
4. FRM-1 เป็น Smart Form หรือ Adobe Form? แล้วต่างจาก TAX-FRM-2 อย่างไร?
5. Object นี้มี Output Determination (BRF+) ไหม?
S_P00_07000134 โดยตรงผ่าน block “Forms”
(ต่างจากฟอร์ม SD/บิลที่ใช้ BRF+ Output Management)