Functional Specification in S/4 HANA: Write it in a manner that Technical Consultant (ABAPer) likes it (FS Based on ACDOCA Table)
Why this Blog?
First it has been noticed that Technical Consultants are never happy with the quality of the Functional Specification (FS). The way I make an FS will be explained in this blog.
I have taken an example of complex customised which is for detailed ‘Customer Account Statement’ report. I had developed this form/report for one of the clients in India during S/4 HANA Implementation.
Secondly I remember early 2009 I had asked someone to share one FS so that I can learn how it is written. I just want to give back the same to someone else. If it helps to one my purpose is achieved. Cheers!
FS Template
One must make a standard FS Template which shall be used throughout the project for RICEFW (Report, Interfaces, Conversion, Enhancement, Forms, Workflow).
Key Sections in FS
Introduction Section: Project Name, FS Name and ID, Date of Creation
Change History Section: All the versions are maintained here by date
Author Section: Author name and signature are covered here
Reviewer Section: Approver name and signature are covered
Object Details: It covers module, Alternative Option, Program Type (Report, Form, Interface etc.), Priority of the customization
Report Input & Output Format Attachment Section:
(Here attachment can not be given so giving the screen shots). This is very detailed output for Customer Account Statement.
Business Requirement Section: Customer account statement is sent to customers periodically for reconciliation purposes.
FS Logic Section:
Object Logic for Input and Output is written in this section. This is the most important section of the FS.
Input Screen Logic (These fields will be available on the input screen of the custom program)
Column B = Copied all the field name in the input screen so that logic can be written field wise
Column C = Logic for each field in column B
Column D = Remarks which tells about whether field will be with Range, Extension and F4 help
Column E = It take care where authorization object need to be taken care.
Sl. No. (A) | Field name (B) | Logic (C ) | Remarks (D) | Authorization Object (E ) |
1 | Customer No. | KNA1-KUNNR | Range, Extension, F4 Help | |
2 | Company Code | T001-BUKRS | Range, Extension, F4 Help | Yes |
Default Value = 1000 | ||||
3 | Business Area | TGSB-GSBER | Range, Extension, F4 Help | Yes |
4 | Profit Center | CEPC-PRCTR | Range, Extension, F4 Help | Yes |
5 | Posting Date | BKPF-BUDAT | Range, F4 Help, Mandatory | |
6 | Sales Office | TVBUR-VKBUR | Range, Extension, F4 Help | Yes |
7 | Customer Group (M) | T151-KDGRP | Range, Extension, F4 Help | |
8 | Sales District | T171-BZIRK | Range, Extension, F4 Help | |
9 | Statement Date & Time | SYST-DATUM & Time | Default Date as system date and time. |
Logic for Output
Column B = Copied all the field name in the output so that logic can be written field wise
Column C = Logic for each field in column B. There are 129 fields in the output for which logic to be built.
Column D = Any special remark that need to be given field wise to technical consultant
Sl. No. (A) |
Field (B) | Logic (C ) | Remarks (D) |
1 | Statement Date | SYST-DATUM | System Date and Time |
2 | XYZ Limited | BUKRS (Input) pass into T001-BUKRS and fetch ADRNR Pass T001-ADRNR into ADRC-ADDRNUMBER and fetch ADRC-NAME1 + ADRC-NAME2 |
Company Name |
3 | Address: 93, ABC Tower, Sarojini Nagar, Delhi 11029, India | Pass KUNNR into KNVV-KUNNR Fetch KNVV-VKBUR, pass into TVBUR-VKBUR and need to fetch ADRNR and pass it into ADRC-ADDRNUMBER then fetch ADRC-MC_STREET ADRC-STR_SUPPL1 ADRC-STR_SUPPL2 ADRC-STR_SUPPL3 ADRC-MC_CITY1 ADRC-POST_CODE1 ADRC-TIME_ZONE |
Sales office address |
4 | Statement of Accounts for the period | BKPF-BUDAT (input screen) | Input value |
5 | Customer Name & Code : | Pass KUNNR into KNA1-KUNNR and fetch KNA1-NAME1 +KNA1-NAME2 (KUNNR) | |
5a | Customer Address : | Pass KUNNR, into KNA1-KUNNR, and fetch KNA1-ADRNR pass this into ADRC-ADDRNUMBER and fetch MC_STREET, str_suppl1, str_suppl2, CITY1, CITY2, POST_CODE1, REGION (Description- T005U- SPRAS =E, T005U- LAND1 = IN, T005U- BLAND = REGION and fetch T005U- BEZEI), COUNTRY (description – T005- LAND1 = COUNTRY and fetch T005- LANDX) | |
6 | Security Deposit : | Function module: BAPI_AR_ACC_GETKEYDATEBALANCE (How to get customers: . KNA1-KUNNR (from Input), T001-BUKRS (from input) pass into KNB1-KUNNR, KNB1-BUKRS and fetch KNB1-KUNNRKNB1-KUNNR, TVBUR-VKBUR (Input), T151-KDGRP (Input), T171-BZIRK (Input) pass into KNVV-KUNNR, KNVV-VKBUR, KNVV-KDGRP, KNVV-BZIRK and Fetch KNVV-KUNNR Please note: this logic will be used everywhere in this development)COMPANYCODE 1000 CUSTOMER 100004 KEYDATE 21.11.2016 BALANCESPGLI Yfetch BAPIDMBTR where SP_GL_IND = Y, total of all BAPIDMBTR |
Amount as on To Date in input (SPL GL Y) = 21.11.2016 |
7 | Additional Deposit |
Function module: BAPI_AR_ACC_GETKEYDATEBALANCE COMPANYCODE 1000 fetch BAPIDMBTR where SP_GL_IND = D, total of all BAPIDMBTR |
Amount as on To Date in input (SPL GL D) = 21.11.2016 |
8 | Contact No. : | Pass KUNNR in KNA1-KUNNR and fetch KNA1-TELF1/KNA1-TELF2 | Mobile and Landline |
9 | TIN No. : | Pass KUNNR in KNA1-KUNNR and fetch KNA1-J_1ILSTNO | |
9a | CST No.: | Pass KUNNR in KNA1-KUNNR and fetch KNA1-J_1ICSTNO | |
10 | PAN No.: | Pass KUNNR in KNA1-KUNNR and fetch KNA1-J_1IPANNO | |
11 | Email : | Pass KUNNR into KNA1-KUNNR and fetch KNA1-ADRNR pass this into ADR6-ADDRNUMBER, where ADR6-FLG_NOUSE =’BLANK’ and fetch SMTP_ADDR (if you get multiple records, please pick the first record only) |
|
12 | This statement is for <Division> only | CEPC-PRCTR (input field)= Pass CEPC-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT (if input field is filled with PC, PC description need to fetch and to be shown with , separation. If no PC is selected in the input field it should be “All Division” | If PC Description and if PC blank then ‘All Division’ |
13 | Summary of transaction for the month | hard Code | |
14 | Particulars | Hard Code | |
15 | Dr | hard Code | |
16 | Cr | Hard Code | |
17 | Opening Balances | Opening Balances Logic FM: BAPI_AR_ACC_GETOPENITEMS COMPANYCODE 1000 CUSTOMER 100006 KEYDATE 31.10.2016 (From Date of input – (minus) one day. E.g. From 01.11.2016 to 30.11.2016, 31.10.2016)fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and ‘A’pass BELNR_D, GJAHR, BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA where ACDOCA-KOART = ‘D’, ACDOCA-RLDNR = ‘0L’ fetch ACDOCA-HSL (multiple records will be there, please total and show)(if ACDOCA-DRCRK = S show value under Debit, If ACDOCA-DRCRK = H show value under Credit ) |
Balance From date (of the input)-1day |
18 | Invoices Raised | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘RV’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS where BKPF-XREVERSING = ‘Blank’, BKPF-XREVERSED = ‘Blank’fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’ fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
All sales Document Type RV (without Cancellation) |
19 | Sales return | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘Z0’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS where BKPF-XREVERSING = ‘Blank’, BKPF-XREVERSED = ‘Blank’fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’ fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document Type Z0 |
20 | Debit notes | Hard Code | |
21 | C form Debit notes | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘Z2’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document type Z2, reversal also |
22 | Interest Debit note | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘Z1’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document type Z1 , reversal also |
23 | Cheque bounce charges | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘Z3’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document type Z3 , reversal also |
24 | Other Debit notes | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’and ‘A’, and Where BLART NE ‘Z0, Z1, Z2, Z3, Z4,RV,DZ, and where SHKZG = ‘S’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, where BKPF-XREVERSAL = ‘Blank’ fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document Type = Other than Z1, Z2, Z3, Z4, DZ(Party Debit only) |
25 | Payments Received | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and ‘A’, and Where BLART = ‘DZ’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = S, ACDOCA-RLDNR = ‘0L’, where ACDOCA-KTOSL = ‘Blank’, ACDOCA-RACCT = Set value (ZBANK_COLLECTION)fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document type DZ |
26 | Credit notes | Hard Code | |
27 | Cash Discount | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and ‘A’, and Where BLART = ‘DZ’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = S, ACDOCA-RLDNR = ‘0L’, where ACDOCA-KTOSL = ‘SKT’ fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
DZ, Transaction SKT |
28 | Schemes Credit notes | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’ and Where BLART = ‘Z4’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS where BKPF-XREVERSING = ‘Blank’, BKPF-XREVERSED = ‘Blank’fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’ fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document type Z4 |
29 | Other Credit notes | FM:BAPI_AR_ACC_GETSTATEMENT COMPANYCODE 1000 CUSTOMER 100006 DATE_FROM 01.10.2016 DATE_TO 22.11.2016 _____ fetch all BELNR_D, GJAHR, BUKRS, KUNNR, where UMSKZ = ‘Blank’and ‘A’, and Where BLART NE ‘Z0, Z1, Z2, Z3, Z4,RV,DZ, and where SHKZG = ‘H’Pass BELNR_D, GJAHR, BUKRS into BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, where BKPF-XREVERSAL = ‘Blank’ fetch BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRSpass BKPF-BELNR, BKPF-GJAHR, BKPF-BUKRS, KUNNR into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS, ACDOCA-KUNNR, CEPC-PRCTR (from Input) into ACDOCA-PRCTR, TGSB-GSBER (from input) into ACDOCA-RBUSA, ACDOCA-KOART = D, ACDOCA-RLDNR = ‘0L’fetch ACDOCA-HSL (if multiple line, total value need to be shown) |
Document Type = Other than Z1, Z2, Z3, Z4, DZ(Party Credit only) |
30 | Total | Do total of amounts | Total |
31 | Closing balances |
Closing Balance = (Dr. Column) – (Cr. Column) (If Value in Plus show under Debit if in Negative show under Credit) |
Balance ‘To Date’ |
32 | Note: 1. Request you to pay outstanding before due Date to avoid late payment charges |
Hard Code | |
33 | Request you to pay outstanding before due date to avoid late payment charges | Hard Code | |
34 | Part B | Hard Code | |
35 | Opening Balance | Hard Code | |
36 | Document No. | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 17) |
37 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 17) |
38 | Doc Date | ACDOCA-BLDAT | From Opening Balances Logic (Raw No. 17) |
39 | Location |
a. If BKPF-BLART is RV & Z0 : ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS where ACDOCA-KOART = S, ACDOCA_KDAUF NE ‘BLANK’ fetch pass ACDOCA_WERKS into T001W-WERKS and fetch T001W-NAME1 b. for rest of the BLART (except RV and Z0) Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 17) |
40 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 17) |
41 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 17) |
42 | Posting Date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 17) |
43 | Total | Total of Debit and Credit | |
44 | Invoices | Hard Code | |
45 | Document / Invoice No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 18) |
46 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 18) |
47 | Invoice Date | ACDOCA-BLDAT | From Opening Balances Logic (Raw No. 18) |
48 | Due Date | ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into BSEG-BELNR, BSEG-GJAHR, BSEG-BUKRS where BSEG-KOART = ‘D’ fetch BSEG-NETDT |
From Opening Balances Logic (Raw No. 18) |
49 | Reference/PO No. |
ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS where ACDOCA-KOART = S, ACDOCA_KDAUF NE ‘BLANK’ fetch |
From Opening Balances Logic (Raw No. 18) |
50 | Location |
ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS where ACDOCA-KOART = S, ACDOCA_KDAUF NE ‘BLANK’ fetch pass ACDOCA_WERKS into T001W-WERKS and fetch T001W-NAME1 |
From Opening Balances Logic (Raw No. 18) |
51 | Debit | ACDOCA-HSL | From Opening Balances Logic (Raw No. 18) |
52 | Sales return | Hard Code | |
53 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 19) |
54 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 19) |
55 | Invoice Date | ACDOCA-BLDAT | From Opening Balances Logic (Raw No. 19) |
56 | Due Date | ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into BSEG-BELNR, BSEG-GJAHR, BSEG-BUKRS where BSEG-KOART = ‘D’ fetch BSEG-NETDT |
From Opening Balances Logic (Raw No. 19) |
57 | Reference/PO No. |
ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS where ACDOCA-KOART = D fetch ACDOCA-ZUONR |
From Opening Balances Logic (Raw No. 19) |
58 | Location |
ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS Pass into ACDOCA-BELNR, ACDOCA-GJAHR, ACDOCA-RBUKRS where ACDOCA-KOART = S, ACDOCA_KDAUF NE ‘BLANK’ fetch pass ACDOCA_WERKS into T001W-WERKS and fetch T001W-NAME1 |
From Opening Balances Logic (Raw No. 19) |
59 | Credit | ACDOCA-HSL | From Opening Balances Logic (Raw No. 19) |
60 | Debit notes | Hard Code | |
61 | a) C form Debit notes | Hard Code | |
62 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 21) |
63 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 21) |
64 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 21) |
65 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 21) |
66 | Text | ACDOCA-SGTXT | From Opening Balances Logic (Raw No. 21) |
67 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 21) |
68 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 21) |
69 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 21) |
70 | b) Interest Debit note | Hard Code | |
71 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 22) |
72 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 22) |
73 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 22) |
74 | Text | ACDOCA-SGTXT | From Opening Balances Logic (Raw No. 22) |
75 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 22) |
76 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 22) |
77 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 22) |
78 | c) Cheque bounce charges | ||
79 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 23) |
80 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 23) |
81 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 23) |
82 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 23) |
83 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 23) |
84 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 23) |
85 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 23) |
86 | d) Other Debit notes | ||
87 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 24) |
88 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 24) |
89 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 24) |
90 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 24) |
91 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 24) |
92 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 24) |
93 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 24) |
94 | Collections | Hard Code | |
95 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 25) |
96 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 25) |
97 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 25) |
98 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 25) |
99 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 25) |
100 | Text | ACDOCA-ZUONR (pick last 6 characters what seen in the field) | From Opening Balances Logic (Raw No. 25) |
101 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 25) |
102 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 25) |
103 | Cash Discount | Hard Code | |
104 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 27) |
105 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 27) |
106 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 27) |
107 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 27) |
108 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 27) |
109 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 27) |
110 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 27) |
111 | Schemes credit notes | Hard Code | |
112 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 28) |
113 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 28) |
114 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 28) |
115 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 28) |
116 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 28) |
117 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 28) |
118 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 28) |
119 | Other Credit notes | Hard Code | |
120 | Document No | ACDOCA-BELNR | From Opening Balances Logic (Raw No. 29) |
121 | Division | Pass ACDOCA-PRCTR into CEPCT-PRCTR and fetch CEPCT-LTEXT | From Opening Balances Logic (Raw No. 29) |
122 | Posting date | ACDOCA-BUDAT | From Opening Balances Logic (Raw No. 29) |
123 | Reference | BKPF-XBLNR | From Opening Balances Logic (Raw No. 29) |
124 | Location |
Pass KUNNR into KNVV-KUNNR and fetch KNVV-VKBUR KNVV-VKBUR pass into TVKBT-VKBUR, where TVKBT-BEZEI |
From Opening Balances Logic (Raw No. 29) |
125 | Debit | ACDOCA-HSL if ACDOCA-DRCRK = S | From Opening Balances Logic (Raw No. 29) |
126 | Credit | ACDOCA-HSL if ACDOCA-DRCRK = H | From Opening Balances Logic (Raw No. 29) |
127 | Registered address:- | Pass T001-BUKRS (from Input) into T001-BUKRS and fetch T001-ADRNR pass T001-ADRNR into ADRC-ADDRNUMBER and fetch ADRC-NAME1 +NAME2, ADRC-STREET, ADRC-STR_SUPPL3, ADRC-CITY2, ADRC-CITY1, ADRC-POST_CODE1, ADRC-REGION (BEZEI from T005U against ADRC-REGION), ADRC-EXTENSION2 |
XXXXX, Delhi |
128 | This is computer generated statement hence no signature required. | hard Code | |
129 | Please inform for any discrepancies within 7 days of receipt of this statement otherwise it is deemed to be correct. | Hard Code |
General Notes:
- It is to be developed in PDF and exportable in Excel as well.
- All outer cells shall be aligned irrespective of no. of columns in every box.
Section Test Data: Couple of test data shall be given in the FS so that technical consultant can check the preliminary testing/output
Business Approval Section: FS must be signed off by business before releasing to technical consultant.
_______________________________________________________________________________
Well I disagree with the technical information on a functional specification. Of course I do it all FS, Unit test, Integration testing, and customer testing. I have however been just a functional person and just a technical person. "JUST" <smile>. Both jobs do a lot of work, and have to know a lot.
I did agree with your sections. I also would like the end user sign off. They can't do that with the way this is written. One of my favorite tools for interactive programs is build. I haven't had much time to explore it. But the tool is amazing.
BTW - if this is written for the technical people as well as the functional people, you might want to add them in the tag. It would be interesting to hear from them all.
Interesting blog - it made me think! (and rant a bit)
Michelle
Well, I am a FICO consultant and it took me one and half hour to prepare this FS.
You are welcome anyways. Cheers!
Regards
Shakeel
This is the story of my life on writing FSs, the only problem is that I spend time and effort giving the Abapers all the details, all tables, links, fields that I need and the majority of them never care to read the FS.
Instead they start asking you questions right away that shows you that they did not read it because the answer is in the FS. Then they start freelancing and taking decisions on their own in the code without not really understanding what are the consequences.
This is like a plan or blueprint giving to a builder by an architect or an engineer, you just have to execute it.
Once I designed an extraction program / interface that had not less that 6 or 8 tables to extract data from. From the 1st table to the last I gave them all the links and how to jump from one to the other as you needed to follow that path to get what we needed. Instead the guy started by the last table because he said it was more efficient. What happened ?? he broke the logic and was never able to retrieve the data properly. When I saw the code, I was furious. Sent him back to re-do the code and respect the FS.
If you do not know the module, scenario and the data behind it. Don't try to improvise, that is why you have a Functional Consultant giving you an FS; otherwise I will just give you a napkin and ask you do this end result, figure it out ..... Like this, I have many horror stories.
The old Abapers that used to know the modules inside out are not around anymore or moved on to superior positions. Now we have generalists and we can't tell them do that. We need to give them all the details.