About 194Q – PAN based Accumulation

The Indian government introduced new TDS Section 194Q effective from 01-July-2021, which says any person, being a buyer who is responsible for paying any sum to any resident (hereafter in this section referred to as the seller) for purchase of any goods of the value or aggregate of such value exceeding fifty lakh rupees in any Financial Year, shall, at the time of credit of such sum to the account of the seller or at the time of payment thereof by any mode, whichever is earlier, deduct an amount equal to 0.1 percent. of such sum exceeding fifty lakh rupees as income tax.

SAP has one summary of guided answers that help find solutions for issues pertaining to the 194Q solutions.

Check below for related Notes and Blogs related to 194Q:

Q1. While implementing Note 3035980, ABAP Dump program “SAPLJ1I_TABLE_MAINT” is observed.

Q2. While implementing Note 3035780, dump is observed in IF_WT_ACC_UNIT_PRICE~STORE_UNITPRICE.

Q3. While implementing note 3035980, error: ‘Unable to activate a Method IF_FWTC_SECTIONCODE ~GET_SECCODE’ is observed.

Q4. While implementing note 3035980, error “2554636 cannot be implemented” is observed.

Q5. While implementing note 3035980, dump ‘FIWTIN_NEW_SECOG unknown’ is observed.

Q6. While implementing note 3035980, dump is observed in method IF_FWTC_ACC_SECTIONCODE~STORE_EXEMPT_FIELDS.

Q7. While implementing note 3035980, dump “Type FIWTIN_PAN_CHECK is unknown” is observed.

Q8. While implementing note 3035980, dump is observed in FM FIWTIN_UPDATE_ACC_TO_MEMORY.

Q9. While implementing note 3035980, dump is observed in ‘IH_OPEN_ITEMS’ of type ‘OPEN_ITEMS_TAB’

Q10. While implementing note 3052910, error ‘SCWN409 – Format of correction instructions & & & &; unable to read corr,instuc.’ is observed.

Especially for the Notes 2484946 (TAN Based Exemption based on Business Partner PAN Number)

Permanent Account Number(PAN_NO) will be inserted as a key at table FIWTIN_ACC_EXEM which means different vendors could use the same PAN number.

The Key function modules ‘FIWTIN_UPDATE_ACCUMULATION’ to update key table FIWTIN_ACC_EXEM. Just show the code example here for reference may not be the latest version also depends on the system and its version.

FUNCTION FIWTIN_UPDATE_ACCUMULATION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IS_FIWTIN_ACC_EXEM) TYPE FIWTIN_ACC_EXEM
*" VALUE(IS_WITH_ITEM) TYPE WITH_ITEM
*" VALUE(IV_CALL_TIME) TYPE CHAR10
*"---------------------------------------------------------------------- Data : ls_fiwtin_acc_exem type fiwtin_acc_exem. IF iv_call_time eq 'INV-DP'. "for invoice and downpayment increase accumulation amount. IF is_fiwtin_acc_exem-koart = 'K'. is_with_item-wt_qsshh = abs( is_with_item-wt_qsshh ). is_fiwtin_acc_exem-acc_amt = abs( is_fiwtin_acc_exem-acc_amt ). SELECT single * from fiwtin_acc_exem INTO ls_fiwtin_acc_exem WHERE bukrs eq is_fiwtin_acc_exem-bukrs AND accno eq is_fiwtin_acc_exem-accno AND witht eq is_fiwtin_acc_exem-witht AND wt_withcd eq is_fiwtin_acc_exem-wt_withcd AND secco eq is_fiwtin_acc_exem-secco AND wt_date eq is_fiwtin_acc_exem-wt_date AND koart eq is_fiwtin_acc_exem-koart AND pan_no eq is_fiwtin_acc_exem-pan_no. if is_fiwtin_acc_exem-acc_amt eq 0 AND sy-subrc ne 0. "create new entry for first time acumulation. is_fiwtin_acc_exem-acc_amt = is_fiwtin_acc_exem-acc_amt + is_with_item-wt_qsshh. INSERT INTO fiwtin_acc_exem VALUES is_fiwtin_acc_exem. else. is_fiwtin_acc_exem-acc_amt = is_fiwtin_acc_exem-acc_amt + is_with_item-wt_qsshh. UPDATE fiwtin_acc_exem set acc_amt = is_fiwtin_acc_exem-acc_amt WHERE bukrs = is_fiwtin_acc_exem-bukrs AND koart = is_fiwtin_acc_exem-koart AND accno = is_fiwtin_acc_exem-accno AND witht = is_fiwtin_acc_exem-witht AND wt_withcd = is_fiwtin_acc_exem-wt_withcd AND secco = is_fiwtin_acc_exem-secco AND wt_date = is_fiwtin_acc_exem-wt_date AND pan_no = is_fiwtin_acc_exem-pan_no. Endif. ELSEIF is_fiwtin_acc_exem-koart = 'D'. "Note 1959779. is_with_item-wt_qsshh = abs( is_with_item-wt_qsshh ). is_fiwtin_acc_exem-acc_amt = abs( is_fiwtin_acc_exem-acc_amt ). is_fiwtin_acc_exem-acc_amt = is_fiwtin_acc_exem-acc_amt - is_with_item-wt_qsshh. UPDATE fiwtin_acc_exem set acc_amt = is_fiwtin_acc_exem-acc_amt WHERE bukrs = is_fiwtin_acc_exem-bukrs AND koart = is_fiwtin_acc_exem-koart AND accno = is_fiwtin_acc_exem-accno AND witht = is_fiwtin_acc_exem-witht AND wt_withcd = is_fiwtin_acc_exem-wt_withcd AND secco = is_fiwtin_acc_exem-secco AND wt_date = is_fiwtin_acc_exem-wt_date AND pan_no = is_fiwtin_acc_exem-pan_no. ENDIF. ENDIF. IF iv_call_time eq 'DPC-CM'. "for downpayment clearance/Credit memo " reduce accumulated amount IF is_fiwtin_acc_exem-koart = 'K'. is_with_item-wt_qsshh = abs( is_with_item-wt_qsshh ). is_fiwtin_acc_exem-acc_amt = abs( is_fiwtin_acc_exem-acc_amt ). is_fiwtin_acc_exem-acc_amt = is_fiwtin_acc_exem-acc_amt - is_with_item-wt_qsshh. UPDATE fiwtin_acc_exem set acc_amt = is_fiwtin_acc_exem-acc_amt WHERE bukrs = is_fiwtin_acc_exem-bukrs AND koart = is_fiwtin_acc_exem-koart AND accno = is_fiwtin_acc_exem-accno AND witht = is_fiwtin_acc_exem-witht AND wt_withcd = is_fiwtin_acc_exem-wt_withcd AND secco = is_fiwtin_acc_exem-secco AND wt_date = is_fiwtin_acc_exem-wt_date AND pan_no = is_fiwtin_acc_exem-pan_no. ELSEIF is_fiwtin_acc_exem-koart = 'D'. "Note 1959779 is_fiwtin_acc_exem-acc_amt = is_fiwtin_acc_exem-acc_amt + is_with_item-wt_qsshh. is_fiwtin_acc_exem-acc_amt = abs( is_fiwtin_acc_exem-acc_amt ). MODIFY fiwtin_acc_exem FROM is_fiwtin_acc_exem. ENDIF. ENDIF. ENDFUNCTION.

The Key method to call ‘FIWTIN_UPDATE_ACCUMULATION’ is to update the key table FIWTIN_ACC_EXEM.

  • Method: IF_WT_ACC_UNIT_PRICE~STORE_UNITPRICE of Class CL_FIWTIN_ACCUMULATION
  • Method IF_REVERSE_WTAX_AR~REVERSE_WTAX_AR of Class CL_FIWTIN_REVERSE_ACC

If the PAN number is not populated at table FIWTIN_ACC_EXEM, then check those FM/methods first and compare with the code example to verify whether corresponding notes have been implemented or not.

 DATA: lt_fiwtin_acc_exem TYPE STANDARD TABLE OF fiwtin_acc_exem, ls_fiwtin_acc_exem LIKE LINE OF lt_fiwtin_acc_exem, lv_pan_number TYPE J_1IPANNO. DATA: lt_fiwtin_tan_exem TYPE STANDARD TABLE OF fiwtin_tan_exem, ls_fiwtin_tan_exem LIKE LINE OF lt_fiwtin_tan_exem. DATA: lt_t059p type STANDARD TABLE OF t059p, ls_t059p LIKE LINE OF lt_t059p. DATA: Prev_acc type wt_bs. DATA: lt_with_item TYPE STANDARD TABLE OF with_item, ls_with_item like LINE OF lt_with_item, ls_bseg like LINE OF ar_bseg, lv_startdate TYPE wt_exdf, lv_crdt_memo TYPE C value ' ', Gv_ref TYPE REF TO FIWTIN_SECTIONCODE, i_secco TYPE bseg-secco, lv_koart TYPE bseg-koart, "Note 1959779 i_with_item TYPE with_itemx."Note 2326758 DATA: lt_accit TYPE accit_fi_tab, "2852690 lv_uname TYPE char12, "2852690 ls_accit TYPE accit_fi."2852690 DATA: lv_bkpf_budat TYPE budat, "2723415 lv_budat TYPE budat. "2723415 DATA: ls_accum_trm TYPE ty_accum_trm. "2933049
* Keep data of IT lt_fiwtin_acc_exem in below internal table
* because, if there is no entry in accumulation table then IT lt_fiwtin_acc_exem does not have any entry.
* If there is no entry in accumulation table then there should be entry in the IT with 0 amount.
* It is only applicable for transaction J1INPR with simulation mode for multiple SES. DATA: lt_fiwtin_acc_simu TYPE TABLE OF fiwtin_acc_exem. "2784486 DATA: lt_t059z TYPE TABLE OF t059z, "3035980 ls_t059z TYPE t059z. "3035980 "Exit to update section code is it is not entered at transaction screen by user IF gv_ref IS INITIAL. TRY . GET BADI gv_ref. CATCH cx_badi_not_implemented. ENDTRY. ENDIF. READ TABLE is_with_item into i_with_item INDEX 1. CALL BADI gv_ref->modify_secco exporting i_with_item = i_with_item CHANGING i_secco = i_secco. "end of user exit. lt_with_item[] = is_with_item[].
...
...