Program: Reclassify GL Accounts for Balance Carryforwards
Tower: FPR
Author: Niharika Majhi
Total Lines: 1,047
IAO Program · R1 – R5
Generated: April 2026
Sajiv Francis
IAO Architecture Pipeline — Intel Confidential
This ABAP Code Assessment evaluates the ZEFPR_CFIN_RECLASSIFY RICEFW object (Reclassify GL Accounts for Balance Carryforwards) for the FPR tower as part of the IDM 2.0 S/4HANA transformation.
Purpose: : To transfer balances to another GL account during adjustment while carry forwarding balances
82% Overall Score |
1,047 Source Lines |
4 Source Files |
14 Methods |
| Dimension | Score | Status |
|---|---|---|
| Clean Core Alignment | 83% | 83% — Good |
| Code Quality | 80% | 80% — Good |
| Security & Authorization | 70% | 70% — Needs Work |
| Documentation & Handover | 96% | 96% — Good |
Findings Summary: 1 High · 5 Medium · 1 Low
| # | File | Type | Lines | Author | Transport |
|---|---|---|---|---|---|
| 1 | ZEFPR_CFIN_RECLASSIFY_GL_ACC |
Main Report Program | 63 | Niharika Majhi | DI0K900936 |
| 2 | ZEFPR_CFIN_RECLASSIFY_MAIN |
Include — Class Implementation | 738 | Niharika Majhi | BI0K901023 |
| 3 | ZEFPR_CFIN_RECLASSIFY_SEL |
Include — Selection Screen & Validations | 89 | Niharika Majhi | BI0K901023 |
| 4 | ZEFPR_CFIN_RECLASSIFY_TOP |
Include — Data Declarations & Class Definition | 157 | Niharika Majhi | DI0K900936 |
Total source lines: 1,047
OOP Classes: lcl_gl_account
Evaluates the program’s readiness for SAP S/4HANA Clean Core principles: use of released APIs, modern ABAP syntax, and avoidance of deprecated patterns.
Clean Core Score: 83% (52 clean patterns, 10 deprecated patterns detected)
| Pattern | Occurrences |
|---|---|
| ALPHA conversion in string template | 4 |
| APPEND VALUE # (functional style) | 4 |
| Inline DATA declaration | 7 |
| Inline FIELD-SYMBOL | 4 |
| Inline field-symbol with ASSIGNING | 4 |
| NEW constructor expression | 2 |
| OOP class definition | 1 |
| OOP class implementation | 2 |
| Object reference / interface typing | 6 |
| String template expression | 7 |
| TRY-CATCH exception handling | 7 |
| VALUE expression | 4 |
| Pattern | Occurrences | Risk |
|---|---|---|
| Function Module call (review for released API) | 6 | Medium |
| SET UPDATE TASK LOCAL (commit scope) | 1 | Medium |
| TABLES declaration (legacy interface) | 1 | Medium |
| Unconditional DO loop (needs EXIT) | 2 | Medium |
| Table | Description | Access Count |
|---|---|---|
| /PF1/I_T001 (Custom Company View) | Standard SAP table | 1 |
| FAGLFLEXT (GL Account Totals) | Standard SAP table | 3 |
| T001 (Company Codes) | Standard SAP table | 1 |
| T003 (Document Types) | Standard SAP table | 1 |
| TVARVC (Variable Table) | Standard SAP table | 1 |
All tables accessed: /PF1, FAGLFLEXT, PERIOD, T001, T003, T882, TVARVC
Code Quality Score: 80%
The class lcl_gl_account contains 14 methods:
| # | Method | Purpose |
|---|---|---|
| 1 | validate_period |
Validate fiscal period range on selection screen |
| 2 | validate_comp_code |
Validate company code against T001 |
| 3 | validate_doc_type |
Validate document type against T003 |
| 4 | validate_account |
Validate GL account against TVARVC whitelist |
| 5 | get_data |
Fetch FAGLFLEXT records and local currency |
| 6 | post_entries |
Prepare and post GL reclassification entries via BAPI |
| 7 | call_bapi |
Execute BAPI_ACC_DOCUMENT_POST/CHECK with commit/rollback |
| 8 | display_report |
Display ALV report with posting results |
| 9 | build_top_of_page |
Build ALV header grid with report metadata |
| 10 | sum_amounts |
Sum period amounts per company code using field symbols |
| 11 | pop_field_string |
Build dynamic field name string for period range |
| 12 | pop_curr_amt |
Calculate and assign currency amounts for posting |
| 13 | populate_curr_details |
Populate BAPI currency amount table |
| 14 | calc_amount |
Sum period fields dynamically via field symbol assignment |
| Value | Context | Risk |
|---|---|---|
0L |
CONSTANTS: lc_rldnr(2) |
Low |
RBUKRS RYEAR RACCT RTCUR DRCRK KSLVT HSLVT |
lc_select TYPE string |
Medium |
KSL |
lc_ksl TYPE string |
Low |
HSL |
lc_hsl TYPE string |
Low |
BKPFF |
CONSTANTS: lc_bkpf TYPE bkpf-awtyp |
Medium |
IC |
lc_periv TYPE t009b-periv |
Low |
RFBU |
lc_bus TYPE glvor |
Medium |
9999 |
lc_pc TYPE prctr |
Medium |
to |
CONSTANTS: lc_to TYPE string |
Medium |
gs_faglflext-hsl |
CONSTANTS: lc_hsl TYPE string |
Medium |
ONLI |
gc_ucomm(4) |
Medium |
ZFPR_CFIN_RECLASSIFY_GL |
gc_tvarv(23) |
Medium |
gs_faglflext-ksl |
gc_ksl TYPE string |
Medium |
USD |
gc_grp_curr TYPE waers |
Low |
| API | Type | Released | Purpose |
|---|---|---|---|
BAPI_ACC_DOCUMENT_CHECK |
BAPI | ✅ Yes | Validate accounting document without posting |
BAPI_ACC_DOCUMENT_POST |
BAPI | ✅ Yes | Post accounting document (GL journal entry) |
BAPI_TRANSACTION_COMMIT |
BAPI | ✅ Yes | Commit BAPI transaction |
BAPI_TRANSACTION_ROLLBACK |
BAPI | ✅ Yes | Rollback failed BAPI transaction |
LAST_DAY_IN_PERIOD_GET |
FM | ⚠️ Verify | Get last calendar day of a fiscal period |
ZEFPR_CFIN_RECLASSIFY
├── Tables: /PF1, FAGLFLEXT, PERIOD, T001, T003, T882, TVARVC
├── BAPIs: BAPI_ACC_DOCUMENT_CHECK, BAPI_ACC_DOCUMENT_POST, BAPI_TRANSACTION_COMMIT, BAPI_TRANSACTION_ROLLBACK
├── FMs: LAST_DAY_IN_PERIOD_GET
├── Message Class: ZFPR
└── Config Table: TVARVC (key: N/A)
Security Score: 70%
| Check | Status | Detail |
|---|---|---|
| AUTHORITY-CHECK | ❌ Missing | No explicit authority checks — relies on BAPI internal checks |
| BAPI Commit/Rollback | ✅ Proper | Both COMMIT and ROLLBACK are implemented |
| User Stamp | ✅ SY-UNAME | User ID recorded in document header |
| Test Mode | ✅ Supported | p_test checkbox switches to CHECK-only mode |
| Update Task | ⚠️ SET UPDATE TASK LOCAL | Local update task — all work in single LUW |
⚠️ Recommendation: Add explicit
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'with activity 01 (Create) and for the relevant company codes before permitting GL postings. While BAPIs perform their own checks, a pre-check gives better UX and audit trail.
1. User enters selection screen parameters
├── Source GL account, company code(s), fiscal period range, year
├── Target GL account, posting company code, posting period
└── JV fields: document date, type, reference, header text
2. Validations execute (AT SELECTION-SCREEN events)
├── Period range: 0–17
├── Company code: exists in T001
├── GL accounts: whitelisted in TVARVC
└── Document type: exists in T003
3. GET_DATA: Read FAGLFLEXT for source account + get local currency
4. SUM_AMOUNTS: Aggregate period amounts per company code
└── Dynamic field symbol access for KSL01–16 and HSL01–16
5. POST_ENTRIES: Build BAPI structures + call BAPI
├── Line 1: Credit target account (receiving)
├── Line 2: Debit source account (sending)
├── Currency: Local (from T001) + Group (USD)
└── Test mode → BAPI_ACC_DOCUMENT_CHECK only
6. DISPLAY_REPORT: Show ALV with company, amount, currency, status
| Parameter | Description | Type | Required |
|---|---|---|---|
p_test |
Test/simulation mode | Checkbox |
No (default=X) |
p_racct |
Source GL account | ACDOCA-RACCT |
Yes |
s_bukrs |
Company code(s) | Select-Options |
Yes |
s_poper |
Fiscal period range | Select-Options |
Yes |
p_year |
Fiscal year | ACDOCA-GJAHR |
Yes |
p_post |
Target GL account | ACDOCA-RACCT |
Yes |
p_pbukrs |
Posting company code | ACDOCA-RBUKRS |
No |
p_period |
Posting period | BAPIACHE09 |
Yes |
p_bldat |
Document date | BKPF-BLDAT |
Yes |
p_blart |
Document type | BKPF-BLART |
Yes |
p_ref |
Reference number | BKPF-XBLNR |
Yes |
p_bktxt |
Header text | BKPF-BKTXT |
Yes |
| Transport | Files | Notes |
|---|---|---|
BI0K901023 |
ZEFPR_CFIN_RECLASSIFY_MAIN, ZEFPR_CFIN_RECLASSIFY_SEL |
— |
DI0K900936 |
ZEFPR_CFIN_RECLASSIFY_GL_ACC, ZEFPR_CFIN_RECLASSIFY_TOP |
— |
Note: Verify that all transports have been released and imported into the target system (QA/Production). Check transport logs for any RC > 0 warnings.
Pre-deployment checklist:
ZFPR with messages e008–e012 included in transportZFPR_CFIN_RECLASSIFY_GL maintained with allowed GL accountsp_test = X (simulation mode)Documentation Score: 96%
| Criterion | Status |
|---|---|
| Program header block | ✅ Present |
| Author attribution | ✅ Niharika Majhi |
| Modification history | ⚠️ Template present but empty |
| Method-level comments | ✅ Present |
| Inline comments | ✅ Present throughout |
| Naming conventions | ✅ Consistent (g/l prefix for globals/locals) |
| Error handling | ✅ TRY-CATCH + BAPI return check |
Handover recommendations:
IC) assumption| Dimension | Value |
|---|---|
| Tower | FPR (Finance Plan to Report) |
| Domain | Central Finance (CFIN) — GL Reclassification |
| RICEFW Type | Report (R) |
| RICEFW Object | ZEFPR_CFIN_RECLASSIFY |
| SAP Module | FI-GL (General Ledger) |
| Key Table | FAGLFLEXT (New GL Totals) |
| Posting Method | BAPI_ACC_DOCUMENT_POST |
| Output | ALV List (CL_SALV_TABLE) |
| S/4HANA Relevance | High — FAGLFLEXT is the primary GL totals table in S/4HANA |
Architecture context:
This program supports the balance carryforward process during GL account reclassification, a common requirement in Central Finance (CFIN) scenarios where companies need to transfer accumulated balances from one GL account structure to another. The reclassification is performed via standard BAPI posting, ensuring proper document flow and audit trail.
Security — No explicit AUTHORITY-CHECK found
The program posts financial documents (GL journal entries) via BAPI but does not contain explicit AUTHORITY-CHECK statements. While BAPIs perform their own authorization checks, the program should validate the user’s authorization before allowing execution.
Recommendation: Add
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'(or appropriate object) at START-OF-SELECTION to enforce company-code-level authorization.
Clean Core — Legacy TABLES declaration
The program uses TABLES: declarations which are deprecated in S/4HANA. These create implicit work areas and header lines.
Recommendation: Replace with explicit TYPE declarations and use inline
DATA()orFIELD-SYMBOL().
Clean Core — Non-BAPI function modules: LAST_DAY_IN_PERIOD_GET
Some function modules called are not BAPIs and may not be released for S/4HANA cloud.
Recommendation: Verify each FM against the S/4HANA released API list (transaction SAAB / app ‘Custom Code Migration’).
Clean Core — SET UPDATE TASK LOCAL usage
Using SET UPDATE TASK LOCAL changes the commit behavior so updates occur in the same work process. This can cause locking issues in production.
Recommendation: Evaluate if asynchronous update task is acceptable for the BAPI posting pattern.
Code Quality — Hardcoded values in business logic
Found 6 hardcoded values including: RBUKRS RYEAR RACCT RTCUR DRCRK KSLVT HSLVT; KSL; HSL; IC; RFBU. Hardcoded values reduce maintainability and may cause issues when system landscape changes.
Recommendation: Move business-critical values to configuration tables (TVARVC, Z-config) or constants.
Impact Analysis — Custom/namespaced table access: /PF1
The program reads from custom or partner-namespaced tables that may not exist in all system landscapes.
Recommendation: Ensure these tables are part of the transport scope and verify availability in the target S/4HANA system.
Code Quality — Large methods may benefit from decomposition
Methods exceeding 80 lines: post_entries (98 lines), display_report (90 lines), build_top_of_page (114 lines).
Recommendation: Consider extracting sub-methods to improve readability and testability.
Security — User ID captured in document
SY-UNAME is used to stamp the posting document header. This is good practice for audit trail.
Impact Analysis — BAPI integration points: BAPI_ACC_DOCUMENT_CHECK, BAPI_ACC_DOCUMENT_POST, BAPI_TRANSACTION_COMMIT, BAPI_TRANSACTION_ROLLBACK
The program relies on standard SAP BAPIs for posting. These are released APIs and should survive S/4HANA upgrades. Verify compatibility with any BTP extension scenarios.
ZEFPR_CFIN_RECLASSIFY_GL_ACCDI0K900936ZEFPR_CFIN_RECLASSIFY_MAINBI0K901023ZEFPR_CFIN_RECLASSIFY_SELBI0K901023ZEFPR_CFIN_RECLASSIFY_TOPDI0K900936