← หน้ารวม (Hub) My 5 WRICEFs →
TAX-RPT-2 ANONYMIZED · PUBLIC EDITION ★ my object · Report

TAX-RPT-2 — Oman VAT Report
“OMAN Tax Report – Cash Call Included” · สอง data path ในโปรแกรมเดียว

Program · ZTAXA_R04 (copy of RFUMSV00) CoCd · OM01 OM · OMR 3 dp L4 · 01.01.07.02 Indirect Status · FUT exit → SIT

Source: FD TAX-RPT-2 v1.0 · FUT notes (content v2, 7-Sep) · knowledge base 20-role-wricef-owner §2 (16-Oct) · ABAP = RPT-2 developer (SI)

รายงาน VAT ของ Oman ที่ต้อง “เห็น” ธุรกรรม JVA cash call ด้วย — แต่ cash call ไม่มีบรรทัดภาษีใน BSET (tax code I0 = 0%) โปรแกรมจึงมี สองทางเดิน: ทางปกติอ่าน BSET · ทาง cash call อ่าน BSEG บรรทัด vendor · กุญแจของ object นี้คือ ทุกครั้งที่อ่าน defect ให้ถามก่อนว่าเป็น path ไหน — แก้ path เดียวแล้วอีก path จะกลับมาพังเสมอ
Key takeaways
1

Object overview

TitleOMAN Tax Report – Cash Call Included
Type / natureReport · Retrofit (Change) · P1 · Medium
ProgramZTAXA_R04 — สร้างปี 2021 · HANA fix TR DEVK900001 (Sep 2025) · includes ZTAXA_R04_TOP / _PARAM / _F01 SYS
JVA splitCL_JVA_ENRICH_TAX_LINES=>split ทำงานเมื่อ par_xjvs (Activate JVA Splitting) SYS
Company codeOM01 Oman · LC1 OMR (3 dp) · LC2 USD · ไม่มี LC3
Tax GLA149X017 input · A212X020 output
Oman tax codes (11)I0 · I1 5% · IX · IY · O0 · O1 5% · OX · OY · R3 RC service · R4 RC goods · U1 unclaimable
Geography“overseas” (เดิม Oman-specific · อาจขยาย UAE)
KUTไม่อยู่ในคอร์สใด — เสนอ segment สั้นใน TAX-402 / TAX-408
Sister objectTAX-RPT-6 (Thai VAT report + net VAT clearing) — bug multi-PC Total ตัวเดียวกัน

Six key changes (FD) FD

  1. PC + RI filter
  2. PC + RI ใน output
  3. ดึงธุรกรรม JVA cash call
  4. Output columns ตาม S/4 design (รวม 36 คอลัมน์ · เพิ่ม Alternative Reference)
  5. อัปเดต exchange-rate type (ZOM ผ่าน T005-KURST) — ZOM vs mid ยังเปิด (G10 / C18)
  6. คอลัมน์ใหม่ Tax Invoice Received Date จาก VIM /OPT/VIM_1HEAD-SCAN_DATE
2

Two data paths — master key ของ object นี้

Cash call ไม่ได้ใช้ standard SAP cash call — มาจาก Excel upload JVA-ENH-1 + workflow JVA-WFL-1 · เอกสาร JD/JK ไม่มีบรรทัดภาษี → Oman ต้องได้ tax code I0 ผ่าน substitution (user exit EJVA017) BP

Standard path
BKPF → BSET → (JVA split) → ALV
  • เอกสาร series 2xxx / 3xxx · Trs VST / MWS
  • venture VEN_C1 · PC C_PC29 · RI CP / NN
  • ค่าภาษีจาก BSET · LC2 = ค่าที่ post แล้ว
  • Acceptance variant ZVAR_FULL
Cash-call path
END-OF-SELECTION → get_tax_data_from_bseg
BKPF → BSEG vendor line → ALV
  • JD / JK 708xxxxxxx · GL A213X025 / A213X026 · tax code I0
  • venture VEN_N2 · PC N_PC39 · RI NN · Trs ว่าง · พิมพ์ Curr USD 2 dp
  • LC2 base = BSEG-DMBE2 · tax LC2 = 0.00 (ไม่มี BSET)
  • Acceptance variant ZVAR_CC
Golden thread E — negative test: เอกสาร F-02 ที่ clear offset ของ cash call กับ suspense (doc type SA) ต้องไม่ ได้ tax code I0 · และ G1: SET ใน EJVA017 อ่าน GL 8 หลักแต่ S/4 ใช้ 10 → I0 อาจไม่ถูกเติม — เช็ก BSEG-MWSKZ ของ JD/JK บน A213X025 + GGB1
3

JVA lookup — three layers (finalised)

  1. Tax row: KTOSL ใน MWS / VST / ESA / ESE / NVV + MWSKZ ตรง + venture PC ตรง — ห้ามใช้ “KTOSL ไม่ว่าง” เพราะจะติด special GL key เช่น AGD
  2. Fallback base row: PRCTR + MWSKZ, KTOSL ว่าง, ตัด LINETYPE 02* / 03*
  3. Cash-call direct link: ACDOCA-DOCLN = BSEG-BUZEI
กฎเหล็ก: copy VNAME, EGRUP, RECID, PRCTR, KSL จาก แถวเดียวกัน ที่ match · ทุก read ต้องมี key เต็ม BUKRS + BELNR + GJAHR, RLDNR = '0L'

Selection screen

Safety: ห้ามติ๊ก Update run ตอนเทส · SE16N แสดง OMR โดยไม่ shift 3 ทศนิยม — “1,000.00” ใน SE16N = 100.000 OMR · อย่าอ่าน screenshot ผิด
4

ดึงจากตารางไหน

ข้อมูลตารางfield / เหตุผล
ฐาน / ยอดภาษี, tax code (standard)BSETtax segment ของเอกสาร (ฐานของ RFUMSV00)
Cash call baseBSEGบรรทัด vendor · DMBE2 = LC2
HeaderBKPFวันที่ · เลขเอกสาร · สกุล
Venture / equity / RI / PC / KSLACDOCA (0L)three-layer lookup ด้านบน
Tax ID คู่ค้าLFA1 / KNA1STCD3 (นิติบุคคล) / STCD1 (บุคคล)
Exchange rateT005 → TCURRrate type KURST = ZOM
Tax Invoice Received Date/OPT/VIM_1HEADSCAN_DATE (ส่ง BELNR / BUKRS / GJAHR)
5

ECC → S/4 delta

รายการECCS/4HANA
GL cash call21500020A213X025 RCN-JVA-Vendor Cash Call
GL21500030A213X026
Document typeCCJD & JK
Tax codeI0I0 (ไม่เปลี่ยน) — substitute ด้วย EJVA017
Selection—+ PC (CEPC) · RI ย้ายไป Further selections
Output—+ Alternative Reference · + VIM scan date → 36 คอลัมน์ (ที่เหลือ “Same as ECC”)
Sourceclassic tablesPC / segment / JVA attributes จาก ACDOCA
6

Run step-by-step

  1. ธุรกรรมภาษีในงวดถูก post — รวม JVA cash call (JD/JK, A213X025, I0) · VIM จับ tax invoice + scan date
  2. รัน ZTAXA_R04 → Company Code OM01 + งวด
  3. Further Selections → Profit Center และ/หรือ Recovery Indicator · ติ๊ก Activate JVA Splitting ถ้าจะกรอง venture
  4. เลือก Output / Input tax → Execute (ไม่ติ๊ก Update run)
  5. ตรวจ line items, Balance per company code, Balance of all company codes · export
  6. กระทบกับ GL ภาษี (A149X017 / A212X020) → ใช้เป็นฐาน Oman VAT return

Cash call ที่เทสจริงมี RI 2 ค่า: บรรทัด customer = NN · บรรทัด revenue = CP · segment CIT_OM — ตรวจทั้งคู่

6.5

FUT evidence — เห็นภาพจากงานจริง (Jul 2026)

จาก UT scripts (21-Jul), FUT verification workbook (24-Jul), test evidence + findings pack (27-Jul) และ KT sheet · ชื่อคนแทนด้วย role · ตัวเลขทั้งหมดเป็น OMR ยกเว้นระบุ

Timeline ของ object นี้

  1. 20–21 Julสำรวจ UT client → test-data inventory (708x cash call, 30xx O1, KY 807x non-tax control set)
  2. 23 JulKT: blocker ที่บันทึกไว้ = “PC and RI-JVA splitting”
  3. 24 JulFUT plan 16 TCs · TC-004 blocked TKT-05
  4. 27 JulTest run: TC-004 pass · D1 proven (High) · D2 (Medium) — สรุปว่า blocker เดิม “ไม่ตรงกับผลเทส”
  5. 14 AugFUT exit target met · Bug 1 / Bug 2 ปิด
  6. 17 SepMulti-PC Total (เจอบน RPT-6 ก่อน)
  7. OctSIT next · ยังเปิด: multi-PC Total, cash call ใน “all company codes”

Amount bridge — CoCd OM01, 01.01–27.07.2026, ledger 0L

Output tax total482,428.571-O0 200.000- · O1 481,028.571- · OX 1,000.000- · OY 200.000- · tax 24,076.429-
−
Input tax (standard path)3,311.619I0 100.000 · I1 2,211.619 · IX 1,000.000 · tax 110.581
=
Balance of all company codes479,116.952-page 6 · OMR เท่านั้น
Cash-call block (path B) — D16,930.00 USD15 lines 7084321988–7084322041 · I0 · Trs ว่าง · Curr USD 2 ทศนิยม แทน OMR 3 · ไม่เข้า page 6 (≈ 2,668.050 OMR ที่ 0.38500 — คำนวณเอง)

PC / RI แสดงถูกทุก run: standard = C_PC29 / CP · cash call = N_PC39 / NN · ข้อสังเกตของเรา: 5% × 481,028.571 = 24,051.429 แต่รายงานแสดง tax O1 24,076.429 (ต่าง 25.000) — ยังไม่ได้ตรวจ INFER

Tax-code coverage (11 codes ของ ZTXP_OM)

I0I1IXIYO0O1OXOYR3R4U1

7 / 11 มีข้อมูลทดสอบ · IY, R3, R4, U1 ยังไม่มีเอกสาร · R3/R4 (reverse charge) ควรลงทั้ง ESA ในฝั่ง output และ ESE ในฝั่ง input → run ครบควรเห็น 13 บรรทัดภาษี ไม่ใช่ 11 · U1 ควรมี account key NVV (ลงคอลัมน์ non-deductible)

JVA flag run matrix

RunPeriodJVA splitJV filterผล
A01.01–27.07No—ครบ: output 482,428.571- · input 3,311.619 · cash call 6,930.00
B01.01–27.07YesVEN_C1เหมือน A ทุกตัว (equity 100% ของ VEN_C1) — ไม่ error
C18.05NoVEN_C1output ว่าง · cash call 15 บรรทัด 6,930.00
D18.05YesVEN_C1เหมือน C — cash call ยังโชว์ venture VEN_N2 ทั้งที่กรอง VEN_C1 → D2: path B ไม่อ่าน selection screen

Trace เอกสาร cash call 7084321988 — ทำไมต้องมี path B

BSET
0 rows
ไม่มีบรรทัดภาษี → RFUMSV00 logic มองไม่เห็น
BKPF
1 row
doc type JK · period 5 / 2026 · T-code FB01
BSEG
2 vendor lines (K)
Dr partner L key 2J A213X026 · Cr partner K key 3J A213X025 · ทั้งคู่ I0
ACDOCA
6 rows
DOCLN 1–2 × ledger 0L / S1 / S2 · join RLDNR '0L' ไม่ทำให้หาย
Link
BUZEI = DOCLN
1 → 000001 · 2 → 000002 (ใช้ได้ทั้ง 0% และ 5%)

Root cause ของ TKT-05 (TC-004 เคย blocked)

SETLEAF ของ set JV_CC_AP_MWSKZ / JV_CC_AR_MWSKZ ต้องมีค่า S/4 JD_A213X025_I0 / JK_A213X025_I0 — ถ้ายังเป็นค่า ECC CC_21500020_I0 แปลว่า substitution (ECC: exit ZJV_EXIT, substitution ZSUB_L step 257) ไม่เติม I0 · เชื่อมกับ G1: SET อ่าน GL 8 หลักแต่ S/4 ใช้ 10 หลัก · ตรวจ: นับ JD/JK จาก dynamic selection เทียบจำนวนแถว cash call ในรายงาน

FUT plan 16 TCs (24-Jul) — จัดตาม objective

OBJ1 · PC / RI filter001 PC002 RI · re-test005 mixed-RI doc006 Σ buckets = total007 S-lines vs D/K
OBJ2 · PC / RI display008 doc 3104321987009 split ON vs OFF
OBJ3 · cash call004 JD/JK + I0010 SETLEAF S4 values011 count JD/JK vs rows
OBJ4 · columns003 fields + period012 Alt Ref (col 35)013 Tax ID STCD3/STCD1
OBJ5 · rate type014 col 23 = ZOM @ translation date
OBJ6 · VIM015 SCAN_DATE · no VIM → blank
Gap016 reversal pair same period excluded

สีเขียว = passed · น้ำตาล = in progress / re-test · แดง = blocked · ขาว = not started (ณ 24-Jul) · key risk ของ OBJ1: “mixed-RI document อาจหายจากทุก bucket ของ RI filter = compliance risk” — ดูด้วย Σ(buckets) = unfiltered total

7

Defects & decisions

ปิดแล้วใน FUT (target 14-Aug met)

ItemRoot cause / outcomeStatus
F2 / D1สกุลและ transaction key ของ cash call ไม่ถูก assignfixed
F4 / F5 / F8 / F9equity group หาย · scope JD/JK · tax reporting date · L-linedelivered
Bug 1LC2 ของภาษีถูก คำนวณ (5%) แทนที่จะ อ่าน → ภาษีผีบนบรรทัด 0% + เศษปัดเพี้ยน · ลบสูตรทิ้งclosed
Bug 2ACDOCA lookup ไม่มี BELNR → สะสมหลายเอกสาร cash call (7084321991 โชว์ 3,000.00- แทน 1,500.00) · เปลี่ยนเป็น BSEG-DMBE2 + sign handlingclosed
TKT-04RTF header — ECC เหมือนกันและ WordPad อ่านได้ → reclassify เป็น improvement: compact layouts /RTFOUT, /RTFIN (≤132 chars) + plain WRITE headerimprovement

ยังเปิด (16-Oct)

#ItemNext
1Cash call (6,930.00) เข้า “Balance per company code” แต่ ไม่เข้า “Balance of all company codes” — reproduce ด้วย run 18.05.2026 ทั้งเปิด/ปิด JVA splittingopen RPT-2 ABAP
2Multi-PC Total (17-Sep, พบครั้งแรกบน RPT-6): กรอง PC แล้ว line items ถูกกรองต่อ tax line แต่ Total/Balance รวมทั้งเอกสารเมื่อมีบรรทัดใดตรง · repro doc 3004322020 (O1; C_PC29 952.379-/47.619- + N_PC38 1,142.859-/57.143-; ทั้งใบ 2,095.238-/104.762-)open fix ต้องเหมือน RPT-6 (ที่ Total ขับ clearing posting) · ถามทีม RPT-6
3TKT-06 — PC filter บนเอกสาร JVA splitSIT
4Tab “Tax payable posting” error เพราะ GL net VAT clearing A212X023 ไม่ได้ extend ไป OM01D5: ซ่อน vs negative test
5PC ของเอกสาร multi-PC (tax line vs document) · total แบบไม่กรอง PC อิง BSET หรือ Σ ACDOCA splitD4 (ผูกกับ TKT-01)
6Rate type ZOM vs midG10 / C18
Report only ไม่ post · venture/equity filter มีผลเมื่อติ๊ก Activate JVA Splitting · รันว่างเพราะ placeholder “SEL_VN” / “SEL” = test-setup error · ชื่อชน: JVA-RPT-1 (Statement of account) ≠ TAX-RPT-2 — ใช้ prefix เสมอ
8

Tests

TestRail TC-001..004

TCPurposeStatus
TC-001Standard input/output VAT runpassed
TC-002Currency และ LC2 columnspassed after Bug 1/2
TC-003Balance per company code และ all companiespassed in FUT · residual open #1
TC-004JVA cash call I0 ทั้ง JD และ JKpassed · JD evidence TBC
RegressionPC/RI filters · JVA split · RTF exportSIT

FD test conditions (4) FD

Discriminating pairs ที่ใช้กับ RPT-2: zero-tax vs 5% document → แยก “คำนวณ” vs “อ่าน” (Bug 1) · PC เดียวกันข้ามหลายเอกสาร → ตรวจความครบของ key (Bug 2)
✓

Self-check

1. ทำไม cash call ไม่เคยอยู่ใน BSET?

ดูเฉลย
EJVA017 substitute I0 (0%) และไม่มีบรรทัดภาษีถูก post — ต้องใช้ custom BSEG path

2. อะไรทำให้ 7084321991 โชว์ 3,000.00- แทน 1,500.00?

ดูเฉลย
ACDOCA lookup ที่ key แค่ profit center (ไม่มี BELNR) สะสมแถวข้ามเอกสาร

3. Variant ไหนใช้ตัดสินแต่ละ path?

ดูเฉลย
ZVAR_CC = cash call (18,000.00 USD = 6,930.000 OMR) · ZVAR_FULL = standard / split

4. Bug multi-PC Total ของ RPT-2 ต้องแก้ร่วมกับ object ไหน และทำไม?

ดูเฉลย
TAX-RPT-6 — root cause เดียวกัน และบน RPT-6 ยอด Total ขับ clearing posting จึงต้องแก้แบบเดียวกัน

5. KTOSL ห้าตัวที่ระบุว่าเป็นแถวภาษีคืออะไร?

ดูเฉลย
MWS, VST, ESA, ESE, NVV