Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI for fb65

Former Member
0 Likes
2,502

Hi ,

I want to call transaction FB65 for the company code , vendor , amount and GL_account.

Is there any BAPI which i can use for this purpose.

Thanks in advance.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,694

Hi Asit,

Use BAPI_ACC_DOCUMENT_POST for posting .The fields need to be filled are as specified below:

Headerdata

BUS_ACT

USERNAME

HEADER_TXT

COMP_CODE

DOC_DATE

PSTNG_DATE

DOC_TYPE

REF_DOC_NO

Item Data

ACCOUNTGL

ITEMNO_ACC

GL_ACCOUNT

ITEM_TEXT

TAX_CODE

ACCOUNTPAYABLE

ITEMNO_ACC

VENDOR_NO

ITEM_TEXT

TAX_CODE

CURRENCYAMOUNT

ITEMNO_ACC

CURRENCY

AMT_DOCCUR

AMT_BASE

u can also use or submit RFBIBLOO

9 REPLIES 9
Read only

Former Member
0 Likes
1,694

Asit,

There is a standard program for FB01, which can be used to post any related FI documents(even for FB65).

Try exploring the standard program RFBIBL00 for this.

Myself had used the above program for FB50/FB60 transactions.

Hope it helps.

Ravi.

Read only

0 Likes
1,694

Hi Ravi ,

Thanks.

Could you please send me some sample code , which you have used for FB50/60?

Thanks again.

Read only

0 Likes
1,694

Look the bapi BAPI_ACC_GL_POSTING_POST

Take care is little bit dangerous.

Regards

Frédéric

look the

Message was edited by: Frédéric Girod

Read only

0 Likes
1,694

Hi ,

there's a complete documentation for report RFBIBL00 in SE38

regards Andreas

Read only

0 Likes
1,694

Asit,

I used LSMW to do the upload both. Create project in LSMW and use this program for upload.

Ravi.

Read only

Former Member
0 Likes
1,695

Hi Asit,

Use BAPI_ACC_DOCUMENT_POST for posting .The fields need to be filled are as specified below:

Headerdata

BUS_ACT

USERNAME

HEADER_TXT

COMP_CODE

DOC_DATE

PSTNG_DATE

DOC_TYPE

REF_DOC_NO

Item Data

ACCOUNTGL

ITEMNO_ACC

GL_ACCOUNT

ITEM_TEXT

TAX_CODE

ACCOUNTPAYABLE

ITEMNO_ACC

VENDOR_NO

ITEM_TEXT

TAX_CODE

CURRENCYAMOUNT

ITEMNO_ACC

CURRENCY

AMT_DOCCUR

AMT_BASE

u can also use or submit RFBIBLOO

Read only

0 Likes
1,694

sample code using RFBIBL00

TABLES : BGR00, " Batch Input Structure for Session Data

BBKPF, " Doc Hdr for Accntng Doc (Batch Input Structure)

BBSEG, " Accounting Document Segment (Batch Input Structure)

USR01.

----


  • Internal Table and structure Declarations *

----


  • Internal table to hold input file data

DATA:BEGIN OF IT_INFILE OCCURS 0.

INCLUDE STRUCTURE Z0FI_AP_FADS_TO_SAP. "Input file format

DATA:ERROR(1) TYPE C, "error indicator

END OF IT_INFILE.

  • Internal table to hold input file data

DATA:BEGIN OF IT_ERRORS OCCURS 0.

INCLUDE STRUCTURE Z0FI_AP_FADS_TO_SAP. "Input file format

DATA: MSG(200) TYPE C, "message

END OF IT_ERRORS.

  • Internal table to hold GL data

DATA:BEGIN OF IT_GL OCCURS 0,

SAP_GL_ACCOUNT LIKE ZFGLT_GL_PRI_SUB-SAP_GL_ACCOUNT, "G/L Account

LGCY_SYSTEM LIKE ZFGLT_GL_PRI_SUB-LGCY_SYSTEM, "Legacy System

LGCY_PRIME_ACCT LIKE ZFGLT_GL_PRI_SUB-LGCY_PRIME_ACCT,"Legacy Account

LGCY_SUB_ACCT LIKE ZFGLT_GL_PRI_SUB-LGCY_SUB_ACCT, "Legacy Sub Acct

END OF IT_GL.

  • Internal table to hold cost center data

DATA:BEGIN OF IT_COSTCTR OCCURS 0,

COST_OBJECT LIKE ZFCFT_CTR_DPT_LG-COST_OBJECT, "Cost center

LGCY_LDGR LIKE ZFCFT_CTR_DPT_LG-LGCY_LDGR, "Legacy ledger

LGCY_DEPT LIKE ZFCFT_CTR_DPT_LG-LGCY_DEPT, "Legacy Department

END OF IT_COSTCTR.

  • Internal table to hold vendor data

DATA:BEGIN OF IT_LFA1 OCCURS 0,

LIFNR TYPE LIFNR, "Vendor no

BUKRS TYPE BUKRS, "Company code

STCD1 TYPE STCD1, "Tax ID1

STCD2 TYPE STCD2, "Tax ID2

END OF IT_LFA1.

  • Internal table to hold Primary Sub Acct data

DATA:BEGIN OF IT_SUBACCT OCCURS 0,

PRYACT1(10) TYPE C, "Pry sub Acct1

PRYACT2(10) TYPE C, "Pry sub Acct2

END OF IT_SUBACCT.

  • Internal table to hold ledger data

DATA:BEGIN OF IT_LEDGER OCCURS 0,

LGR_ID(4) TYPE C, "Ledger ID

DEPT(4) TYPE C, "Department

END OF IT_LEDGER.

  • Internal table to hold tax id

DATA:BEGIN OF IT_TAXID OCCURS 0,

TAXID1(16) TYPE C, "Tax ID1

TAXID2(11) TYPE C, "Tax ID2

END OF IT_TAXID.

  • Internal table to hold line amounts sum data

DATA:BEGIN OF IT_SUM OCCURS 0,

TAX_ID_NO(10) TYPE C, "Tax Id No

INVOICE_NO(12) TYPE C, "Invoice No

SUM2(11) TYPE P DECIMALS 2, "Sum

END OF IT_SUM.

  • Internal table to hold Error records

DATA:BEGIN OF IT_ERROR OCCURS 0,

TAX_ID_NO(10) TYPE C, "Tax Id No

INVOICE_NO(12) TYPE C, "Invoice No

MSG(200) TYPE C, "Message

END OF IT_ERROR .

  • Internal table to hold success records

DATA : BEGIN OF IT_SUCCESS OCCURS 0,

DOCNUM(10) TYPE C, "Document No

BUKRS(4) TYPE C, "Company code

FISYR(4) TYPE C, "Fiscal year

MSG(100) TYPE C, "Message

END OF IT_SUCCESS.

  • Internal table to hold invoice no

DATA:BEGIN OF IT_INVNO OCCURS 0,

XBLNR(16) TYPE C, "Ref Doc No

END OF IT_INVNO.

  • Internal table to hold Invoice Document no's

DATA:BEGIN OF IT_BKPF OCCURS 0,

BUKRS LIKE BKPF-BUKRS,

BELNR LIKE BKPF-BELNR,

XBLNR LIKE BKPF-XBLNR,

END OF IT_BKPF.

  • Internal table to initialise structures

DATA: BEGIN OF IT_NAMETAB OCCURS 120.

INCLUDE STRUCTURE DNTAB.

DATA: END OF IT_NAMETAB.

  • Internal table to hold sessions data

DATA:BEGIN OF IT_LIST OCCURS 0.

INCLUDE STRUCTURE ABAPLIST.

DATA:END OF IT_LIST.

  • Structure to hold input file

DATA:X_INFILE LIKE IT_INFILE.

  • Structure to hold company code & currency data

DATA:BEGIN OF X_T001,

BUKRS LIKE T001-BUKRS, "Company code

WAERS LIKE T001-WAERS, "Currency

END OF X_T001.

----


  • Global Variables *

----


DATA: V_PGM_ID LIKE SY-REPID, "Program id

V_COUNT_INFILE TYPE I, "Counter

V_TEXT(100) TYPE C, "Text

V_CHAR(61) TYPE C, "Field name

V_FILE LIKE RLGRAP-FILENAME. "File name

DATA:

V_ERR TYPE I, "Counter

V_OBJKEY LIKE BAPIACHE09-OBJ_KEY, "object key

V_ERR_REC TYPE I, "Error Records

V_SUC_REC TYPE I, "Success Records

V_SESS LIKE APQI-GROUPID. "Session name

  • Field symbols

FIELD-SYMBOLS: <F1> .

----


  • Constants. *

----


DATA:

C_ITEMNO(6) TYPE C VALUE '000001', "Item no

C_DOCTYPE(2) TYPE C VALUE 'KU', "Doc type

C_BUSACT(4) TYPE C VALUE 'RMRP', "Business Account

C_FADS(7) TYPE C VALUE 'FADS', "Legacy system

C_COMMA(1) TYPE C VALUE ',' , "Comma

C_NODATA(1) TYPE C VALUE '/', "NODATA

C_SESS LIKE APQI-GROUPID VALUE 'FADS2SAP'."Session

----


  • Selection Screen

----


SELECTION-SCREEN: BEGIN OF BLOCK NO1 WITH FRAME TITLE TEXT-001.

*Input file name

PARAMETERS:P_BUKRS LIKE T001-BUKRS OBLIGATORY,

P_INFILE LIKE RLGRAP-FILENAME LOWER CASE DEFAULT

'C:\FB60.txt' OBLIGATORY,

*Filename for Error records

P_ERR LIKE RLGRAP-FILENAME LOWER CASE DEFAULT

'/int/D01/030/in/REQ853err.txt' OBLIGATORY.

*For selecting either a sequential file or local file.

PARAMETERS:

R_PSERV RADIOBUTTON GROUP GR1 DEFAULT 'X',

R_ASERV RADIOBUTTON GROUP GR1.

SELECTION-SCREEN: END OF BLOCK NO1.

----


  • INITIALIZATION

----


INITIALIZATION.

V_PGM_ID = SY-REPID.

----


  • AT SELECTION-SCREEN *

----


AT SELECTION-SCREEN.

  • Validating company code

SELECT SINGLE BUKRS

WAERS INTO (X_T001-BUKRS, X_T001-WAERS)

FROM T001 WHERE BUKRS = P_BUKRS.

IF SY-SUBRC <> 0.

MESSAGE E014 WITH 'Invalid Company code'(E01).

ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_INFILE.

  • Getting help for presentation server files

IF R_PSERV = 'X'.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

PROGRAM_NAME = V_PGM_ID

DYNPRO_NUMBER = SY-DYNNR

FIELD_NAME = ' '

IMPORTING

FILE_NAME = P_INFILE.

ENDIF.

----


  • START-OF-SELECTION *

----


START-OF-SELECTION.

  • If sequential file is selected

IF R_ASERV = 'X'.

  • Form to get data for apllication server

PERFORM F_GET_INPUT_DATA.

  • if local file

ELSE.

  • If sequential file is selected

PERFORM F_GET_LOCAL_DATA.

ENDIF.

  • Selecting GL, Costcenter, vendor data

PERFORM F_SELECT_DATA.

  • Validate the the input file data

PERFORM F_VALIDATE_DATA.

  • Populate data to fill structures

PERFORM F_POPULATE_DATA.

  • Populate the error data

PERFORM F_ERROR_DATA.

----


  • END-OF-SELECTION

----


END-OF-SELECTION.

IF NOT IT_INFILE[] IS INITIAL.

  • For submitting the program to rfbibloo

PERFORM F_SUBMIT_RFBIBLOO.

ENDIF.

  • WRITE : / 'Number of success records '(003),

  • v_suc_rec LEFT-JUSTIFIED.

  • WRITE : / 'Number of error records '(004),

  • v_err_rec LEFT-JUSTIFIED.

IF NOT IT_ERRORS[] IS INITIAL.

  • Form to display the error report

PERFORM F_DISPLAY_REPORT.

ENDIF.

IF NOT IT_SUCCESS[] IS INITIAL.

  • Form to display the success report

PERFORM F_DISPLAY_SUC_REPORT.

ENDIF.

*--Standard footer

PERFORM STD_END_OF_REPORT.

----


  • TOP OF PAGE *

----


TOP-OF-PAGE.

*---Standard header

PERFORM STD_TOP_OF_PAGE CHANGING SY-TITLE.

&----


*& Form f_get_local_data

&----


  • Getting the data from presentation server

----


FORM F_GET_LOCAL_DATA.

DATA:LV_FILNAM TYPE STRING. "File name

LV_FILNAM = P_INFILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = LV_FILNAM

FILETYPE = 'ASC'

  • has_field_separator = ' '

TABLES

DATA_TAB = IT_INFILE

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_READ_ERROR = 2

NO_BATCH = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE = 5

NO_AUTHORITY = 6

UNKNOWN_ERROR = 7

BAD_DATA_FORMAT = 8

HEADER_NOT_ALLOWED = 9

SEPARATOR_NOT_ALLOWED = 10

HEADER_TOO_LONG = 11

UNKNOWN_DP_ERROR = 12

ACCESS_DENIED = 13

DP_OUT_OF_MEMORY = 14

DISK_FULL = 15

DP_TIMEOUT = 16

OTHERS = 17.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CLEAR V_COUNT_INFILE.

DESCRIBE TABLE IT_INFILE LINES V_COUNT_INFILE.

  • Determine if input file has data

IF V_COUNT_INFILE EQ 0.

MESSAGE A001(ZFI).

EXIT.

ELSE.

CONCATENATE 'Number of records read from input file '(002)

P_INFILE

': ' INTO V_TEXT.

WRITE: / V_TEXT, V_COUNT_INFILE LEFT-JUSTIFIED.

ENDIF.

ENDFORM. " f_get_local_data

&----


*& Form F_GET_INPUT_DATA

&----


  • Getting the data from apllication server

----


FORM F_GET_INPUT_DATA.

DATA: LV_FILNAM LIKE FILENAME-FILEEXTERN."File name

LV_FILNAM = P_INFILE.

  • Opening Dataset

OPEN DATASET LV_FILNAM FOR INPUT IN TEXT MODE.

  • Read legacy input file into internal table for furthing processing

DO.

CLEAR IT_INFILE.

READ DATASET P_INFILE INTO IT_INFILE.

IF SY-SUBRC NE 0.

EXIT.

ENDIF.

ADD 1 TO V_COUNT_INFILE.

ENDDO.

  • Determine if input file has data

IF V_COUNT_INFILE EQ 0.

MESSAGE A001(ZFI).

EXIT.

ELSE.

CONCATENATE 'Number of records read from input file '(002)

P_INFILE

': ' INTO V_TEXT.

WRITE: / V_TEXT, V_COUNT_INFILE LEFT-JUSTIFIED.

EXIT.

ENDIF.

  • closing dataset

CLOSE DATASET LV_FILNAM.

ENDFORM.

*&----


*& Form f_populate_data

*&----


  • Populate data

*----


FORM F_POPULATE_DATA.

CLEAR: X_INFILE,IT_SUCCESS,V_SUC_REC.

REFRESH IT_SUCCESS.

SORT IT_INFILE BY TAX_ID_NO INVOICE_NO.

CONCATENATE '/int/' SY-SYSID '/' SY-MANDT '/in/IR853_FB01.dat'

INTO V_FILE.

CONDENSE V_FILE NO-GAPS.

  • Open the dataset

OPEN DATASET V_FILE FOR OUTPUT IN TEXT MODE.

IF SY-SUBRC EQ 0.

LOOP AT IT_INFILE.

X_INFILE = IT_INFILE.

AT FIRST.

  • To populate BGR00 structure

PERFORM F_POPULATE_BGR00.

TRANSFER BGR00 TO V_FILE.

ENDAT.

AT NEW INVOICE_NO.

  • To populate BBKPF structure

PERFORM F_POPULATE_BBKPF.

TRANSFER BBKPF TO V_FILE.

  • To populate BBSEG structure Credit

PERFORM POPULATE_BBSEG_C.

TRANSFER BBSEG TO V_FILE.

ENDAT.

  • To populate BBKPF structure Debit

PERFORM POPULATE_BBSEG_D.

TRANSFER BBSEG TO V_FILE.

CLEAR:X_INFILE.

ENDLOOP.

ENDIF.

ENDFORM. " f_populate_data

*&----


*& Form f_display_report

*&----


  • Display error report

*----


FORM F_DISPLAY_REPORT.

  • Open the dataset

OPEN DATASET P_ERR FOR OUTPUT IN TEXT MODE.

IF SY-SUBRC EQ 0.

LOOP AT IT_ERRORS.

  • Transfer the error records to error file on application server

TRANSFER IT_ERRORS TO P_ERR.

ENDLOOP.

ENDIF.

  • Closing the dataset

CLOSE DATASET P_ERR.

IF NOT IT_ERRORS[] IS INITIAL.

FORMAT COLOR 1 INTENSIFIED OFF.

SKIP 2.

WRITE:/1(673) 'ERROR REPORT'(H01) CENTERED.

ULINE /1(673).

WRITE:/(4)'S.No'(005),

SY-VLINE,

(10) 'Tax Id No'(006),

SY-VLINE,

(12) 'Invoice No'(007),

SY-VLINE,

(8) 'Rec Type'(008),

SY-VLINE,

(6) 'Seq No'(009),

SY-VLINE,

(8) 'Batch No'(010),

SY-VLINE,

(8) 'UserID'(011),

SY-VLINE,

(8) 'NU1'(012),

SY-VLINE,

(11) 'Inv Amt'(013),

SY-VLINE,

(8) 'Inv Date'(014),

SY-VLINE,

(10) 'G/L Org ID'(015),

SY-VLINE,

(4) 'NU4'(012),

SY-VLINE,

(4) 'NU5'(012),

SY-VLINE,

(4) 'NU6'(012),

SY-VLINE,

(4) 'NU7'(012),

SY-VLINE,

(11) 'NU8'(012),

SY-VLINE,

(4) 'NU9'(012),

SY-VLINE,

(10) 'PO No'(016),

SY-VLINE,

(30) 'Inv Desc'(017),

SY-VLINE,

(10) 'Voucher No'(018),

SY-VLINE,

(10) 'Inv LinNo'(019),

SY-VLINE,

(11) 'Inv Lin Amt'(020),

SY-VLINE,

(9) 'Led ID-1'(021),

SY-VLINE,

(9) 'Led ID-2'(022),

SY-VLINE,

(15) 'Pri Sub Acc-1'(023),

SY-VLINE,

(15) 'Pri Sub Acc-2'(024),

SY-VLINE,

(15) 'Dept Win Lgr'(025),

SY-VLINE,

(5) 'NU2'(012),

SY-VLINE,

(6) 'NU3'(012),

SY-VLINE,

(11) 'Dist Amt'(026),

SY-VLINE,

(8) 'Inv Type'(027),

SY-VLINE,

(12) 'PO Line No'(028),

SY-VLINE,

(15) 'Inv Line Amt'(029),

SY-VLINE,

(5) 'NU10'(012),

SY-VLINE,

(13) 'NU11'(012),

SY-VLINE,

(5) 'NU12'(012),

SY-VLINE,

(6) 'NU13'(012),

SY-VLINE,

(5) 'NU14'(012),

SY-VLINE,

(5) 'NU15'(012),

SY-VLINE,

(200) 'Message'(030),

SY-VLINE.

FORMAT COLOR 6 INTENSIFIED OFF.

LOOP AT IT_ERRORS.

WRITE:/(4) SY-TABIX,

SY-VLINE,

(10) IT_ERRORS-TAX_ID_NO,

SY-VLINE,

(12) IT_ERRORS-INVOICE_NO,

SY-VLINE,

(8) IT_ERRORS-RECORD_TYPE,

SY-VLINE,

(6) IT_ERRORS-SEQ_NO,

SY-VLINE,

(8) IT_ERRORS-BATCH_NO,

SY-VLINE,

(8) IT_ERRORS-USERID,

SY-VLINE,

(8) IT_ERRORS-NU1,

SY-VLINE,

(11) IT_ERRORS-INV_HEADER_AMT,

SY-VLINE,

(8) IT_ERRORS-INVOICE_DATE,

SY-VLINE,

(10) IT_ERRORS-GL_ORG_ID,

SY-VLINE,

(4) IT_ERRORS-NU4,

SY-VLINE,

(4) IT_ERRORS-NU5,

SY-VLINE,

(4) IT_ERRORS-NU6,

SY-VLINE,

(4) IT_ERRORS-NU7,

SY-VLINE,

(11) IT_ERRORS-NU8,

SY-VLINE,

(4) IT_ERRORS-NU9,

SY-VLINE,

(10) IT_ERRORS-PONUMBER,

SY-VLINE,

(30) IT_ERRORS-INV_DESC,

SY-VLINE,

(10) IT_ERRORS-VOUCHER_NO,

SY-VLINE,

(10) IT_ERRORS-INV_LINE_NO,

SY-VLINE,

(11) IT_ERRORS-INV_LINE_AMT,

SY-VLINE,

(9) IT_ERRORS-LEDGER_ID1,

SY-VLINE,

(9) IT_ERRORS-LEDGER_ID2,

SY-VLINE,

(15) IT_ERRORS-PRI_SUBACCT1,

SY-VLINE,

(15) IT_ERRORS-PRI_SUBACCT2,

SY-VLINE,

(15) IT_ERRORS-DEPT_WIN_LDGR,

SY-VLINE,

(5) IT_ERRORS-NU2,

SY-VLINE,

(6) IT_ERRORS-NU3,

SY-VLINE,

(11) IT_ERRORS-DIST_AMT,

SY-VLINE,

(8) IT_ERRORS-INV_TYPE,

SY-VLINE,

(12) IT_ERRORS-PO_LINE_NO,

SY-VLINE,

(15) IT_ERRORS-INV_LINE_AMT_D,

SY-VLINE,

(5) IT_ERRORS-NU10,

SY-VLINE,

(13) IT_ERRORS-NU11,

SY-VLINE,

(5) IT_ERRORS-NU12,

SY-VLINE,

(6) IT_ERRORS-NU13,

SY-VLINE,

(5) IT_ERRORS-NU14,

SY-VLINE,

(5) IT_ERRORS-NU15,

SY-VLINE,

(200) IT_ERRORS-MSG,

SY-VLINE.

ENDLOOP.

ULINE /1(673).

ENDIF.

ENDFORM. " f_display_report

&----


*& Form f_select_data

----


  • Selection of GL, Costcenter, vendor data

----


FORM F_SELECT_DATA.

DATA:L_DEPT(4) TYPE N. "Legacy department

CLEAR:IT_GL, IT_COSTCTR, IT_LFA1, IT_SUBACCT, IT_TAXID , IT_SUM.

REFRESH:IT_GL, IT_COSTCTR, IT_LFA1, IT_SUBACCT, IT_TAXID,IT_SUM.

SORT IT_INFILE BY TAX_ID_NO INVOICE_NO.

*Looping at input file

LOOP AT IT_INFILE.

X_INFILE = IT_INFILE.

*Summing the invoice line items amount and moving the sum to it_sum

IT_SUM-TAX_ID_NO = IT_INFILE-TAX_ID_NO.

IT_SUM-INVOICE_NO = IT_INFILE-INVOICE_NO.

IT_SUM-SUM2 = IT_INFILE-INV_LINE_AMT.

COLLECT IT_SUM.

CLEAR IT_SUM.

*Storing Primary Sub Account data

IT_SUBACCT-PRYACT1 = IT_INFILE-PRI_SUBACCT1.

IT_SUBACCT-PRYACT2 = IT_INFILE-PRI_SUBACCT2.

APPEND IT_SUBACCT.

CLEAR IT_SUBACCT.

*Storing Ledger ID data

CONCATENATE IT_INFILE-LEDGER_ID1 IT_INFILE-LEDGER_ID2 INTO

IT_LEDGER-LGR_ID.

L_DEPT = IT_INFILE-DEPT_WIN_LDGR.

IT_LEDGER-DEPT = L_DEPT.

APPEND IT_LEDGER.

CLEAR IT_LEDGER.

*Storing Tax ID data

IT_TAXID-TAXID1 = IT_INFILE-TAX_ID_NO.

IT_TAXID-TAXID2 = IT_INFILE-TAX_ID_NO.

APPEND IT_TAXID.

CLEAR IT_TAXID.

CONDENSE IT_INFILE-INVOICE_NO.

IT_INVNO-XBLNR = IT_INFILE-INVOICE_NO.

APPEND IT_INVNO.

CLEAR IT_INVNO.

ENDLOOP.

SORT IT_SUBACCT BY PRYACT1 PRYACT2.

SORT IT_LEDGER BY LGR_ID DEPT.

SORT IT_TAXID BY TAXID1 TAXID2.

SORT IT_SUM BY TAX_ID_NO INVOICE_NO.

SORT IT_INVNO BY XBLNR.

DELETE ADJACENT DUPLICATES FROM IT_SUBACCT COMPARING PRYACT1 PRYACT2.

DELETE ADJACENT DUPLICATES FROM IT_LEDGER COMPARING LGR_ID DEPT.

DELETE ADJACENT DUPLICATES FROM IT_TAXID COMPARING TAXID1 TAXID2.

IF NOT IT_INVNO[] IS INITIAL.

SELECT BUKRS

BELNR

XBLNR

INTO TABLE IT_BKPF

FROM BKPF

FOR ALL ENTRIES IN IT_INVNO

WHERE BUKRS = P_BUKRS AND

GJAHR = SY-DATUM+0(4) AND

BLART = C_DOCTYPE AND

XBLNR = IT_INVNO-XBLNR.

.

ENDIF.

IF NOT IT_SUBACCT[] IS INITIAL.

*Selecting G/L Account from General Ledger Z Table

SELECT SAP_GL_ACCOUNT

LGCY_SYSTEM

LGCY_PRIME_ACCT

LGCY_SUB_ACCT FROM ZFGLT_GL_PRI_SUB

INTO TABLE IT_GL

FOR ALL ENTRIES IN IT_SUBACCT

WHERE LGCY_SYSTEM = C_FADS AND

LGCY_PRIME_ACCT = IT_SUBACCT-PRYACT1 AND

LGCY_SUB_ACCT = IT_SUBACCT-PRYACT2.

IF SY-SUBRC = 0.

SORT IT_GL BY SAP_GL_ACCOUNT

LGCY_SYSTEM

LGCY_PRIME_ACCT

LGCY_SUB_ACCT.

ENDIF.

IF NOT IT_LEDGER[] IS INITIAL.

*Selecting cost center from Cost Center Z Table

SELECT COST_OBJECT

LGCY_LDGR

LGCY_DEPT FROM ZFCFT_CTR_DPT_LG

INTO TABLE IT_COSTCTR

FOR ALL ENTRIES IN IT_LEDGER

WHERE LGCY_LDGR = IT_LEDGER-LGR_ID AND

LGCY_DEPT = IT_LEDGER-DEPT.

IF SY-SUBRC = 0.

SORT IT_COSTCTR BY COST_OBJECT

LGCY_LDGR

LGCY_DEPT.

ENDIF.

ENDIF.

IF NOT IT_TAXID[] IS INITIAL.

*Selecting vendor no from vendor master data

SELECT A~LIFNR

B~BUKRS

A~STCD1

A~STCD2

FROM LFA1 AS A JOIN LFB1 AS B

ON ALIFNR = BLIFNR

INTO TABLE IT_LFA1

FOR ALL ENTRIES IN IT_TAXID

WHERE BUKRS = P_BUKRS AND

( STCD1 = IT_TAXID-TAXID1 OR

STCD2 = IT_TAXID-TAXID2 ).

ENDIF.

ENDIF.

ENDFORM. " f_select_data

&----


*& Form f_validate_data

&----


  • Validation of input file data

----


FORM F_VALIDATE_DATA.

DATA:L_ERRFLAG TYPE C, "Error flag

L_DEPT(4) TYPE N, "Department

L_LGR_ID(4) TYPE C, "Ledger ID

LV_NO_OF_VENDORS TYPE I, "No of vendors

L_SUM(11) TYPE P DECIMALS 2, "Sum

LV_MSG1(30) TYPE C, "Message

LV_MSG2(25) TYPE C, "Message

LV_MSG3(6) TYPE C, "Message

LV_MSG4(31) TYPE C, "Message

LV_MSG5(53) TYPE C, "Message

LV_MSG6(30) TYPE C, "Message

LV_MSG7(50) TYPE C. "Message

LOOP AT IT_INFILE.

CLEAR:LV_MSG1,LV_MSG2, LV_MSG3,LV_MSG4,LV_MSG5, LV_MSG6, LV_MSG7.

CLEAR L_ERRFLAG.

SORT IT_SUM BY TAX_ID_NO

INVOICE_NO.

CLEAR IT_SUBACCT.

  • Validating Primary Sub Acct1 and Acct2.

READ TABLE IT_GL WITH KEY LGCY_SYSTEM = C_FADS

LGCY_PRIME_ACCT = IT_INFILE-PRI_SUBACCT1

LGCY_SUB_ACCT = IT_INFILE-PRI_SUBACCT2 .

IF SY-SUBRC <> 0.

LV_MSG1 = 'Primary Sub Acct1 and Acct2'(035).

L_ERRFLAG = 'X'.

ENDIF.

MOVE IT_INFILE-DEPT_WIN_LDGR TO L_DEPT.

MOVE L_DEPT TO IT_INFILE-DEPT_WIN_LDGR.

CONCATENATE IT_INFILE-LEDGER_ID1 IT_INFILE-LEDGER_ID2 INTO

L_LGR_ID.

CLEAR: IT_COSTCTR.

  • Validating Ledger id & department

READ TABLE IT_COSTCTR WITH KEY LGCY_LDGR = L_LGR_ID

LGCY_DEPT = IT_INFILE-DEPT_WIN_LDGR.

IF SY-SUBRC <> 0.

LV_MSG2 = 'Ledger id & department'(036).

L_ERRFLAG = 'X'.

ENDIF.

  • Validating Tax ID

CLEAR:IT_LFA1.

READ TABLE IT_LFA1 WITH KEY STCD2 = IT_INFILE-TAX_ID_NO..

IF SY-SUBRC <> 0.

READ TABLE IT_LFA1 WITH KEY STCD1 = IT_INFILE-TAX_ID_NO..

IF SY-SUBRC <> 0.

LV_MSG3 = 'Tax ID'(041).

L_ERRFLAG = 'X'.

ENDIF.

ENDIF.

  • Checking for no of vendors selected based on tax id. If no of vendors

  • selected are more than 1 or 0 then error out the record

LV_NO_OF_VENDORS = 0.

LOOP AT IT_LFA1 WHERE STCD1 = IT_INFILE-TAX_ID_NO OR

STCD2 = IT_INFILE-TAX_ID_NO.

LV_NO_OF_VENDORS = LV_NO_OF_VENDORS + 1.

ENDLOOP.

IF LV_NO_OF_VENDORS = 0.

LV_MSG6 = 'No vendor found for TAXID'(037).

L_ERRFLAG = 'X'.

ELSEIF LV_NO_OF_VENDORS > 1.

LV_MSG4 = 'More than one vendor for Tax id'(038).

L_ERRFLAG = 'X'.

ENDIF.

  • Checking whether KU Document already exists for this Invoice No

CLEAR IT_INVNO.

READ TABLE IT_BKPF WITH KEY XBLNR = IT_INFILE-INVOICE_NO.

IF SY-SUBRC = 0.

LV_MSG7 = 'KU Document already exists for this Invoice No '(042).

L_ERRFLAG = 'X'.

ENDIF.

  • Checking whether the invoice header amt is equal to the line items amt

CLEAR IT_SUM.

READ TABLE IT_SUM WITH KEY TAX_ID_NO = IT_INFILE-TAX_ID_NO

INVOICE_NO = IT_INFILE-INVOICE_NO BINARY SEARCH.

CLEAR L_SUM.

L_SUM = IT_INFILE-INV_HEADER_AMT.

IF L_SUM <> IT_SUM-SUM2.

LV_MSG5 = 'Header amt is not equal to the sum of all line items'(039).

L_ERRFLAG = 'X'.

ENDIF.

  • Moving error records to error internal table

IF L_ERRFLAG = 'X'.

MOVE IT_INFILE TO IT_ERRORS.

CONCATENATE 'Invalid:'(040) LV_MSG1 LV_MSG2 LV_MSG3 LV_MSG4 LV_MSG5

LV_MSG6 LV_MSG7 INTO IT_ERRORS-MSG SEPARATED BY SPACE.

APPEND IT_ERRORS.

CLEAR : IT_ERRORS.

  • Deleting all the errors records from the processing internal table

  • and moving them to error table

V_ERR = V_ERR + 1.

IT_INFILE-ERROR = 'X'.

MODIFY IT_INFILE TRANSPORTING ERROR.

CLEAR IT_INFILE.

ENDIF.

ENDLOOP.

DELETE IT_INFILE WHERE ERROR = 'X'.

  • Deleting all the line items from the processing internal table where

  • atleast one line item is error one

SORT IT_ERRORS BY TAX_ID_NO

INVOICE_NO.

CLEAR V_ERR_REC.

LOOP AT IT_ERRORS.

DELETE IT_INFILE WHERE TAX_ID_NO = IT_ERRORS-TAX_ID_NO AND

INVOICE_NO = IT_ERRORS-INVOICE_NO.

AT NEW INVOICE_NO.

V_ERR_REC = V_ERR_REC + 1.

ENDAT.

ENDLOOP.

ENDFORM. " f_validate_data

&----


*& Form f_error_data

&----


  • Processing error data

----


FORM F_ERROR_DATA.

DELETE IT_ERROR WHERE MSG = 'Error in document: BKPFF $ D01030'(E02).

SORT IT_ERROR BY TAX_ID_NO INVOICE_NO.

LOOP AT IT_INFILE.

X_INFILE = IT_INFILE.

READ TABLE IT_ERROR WITH KEY TAX_ID_NO = IT_INFILE-TAX_ID_NO

INVOICE_NO = IT_INFILE-INVOICE_NO BINARY SEARCH.

IF SY-SUBRC = 0.

AT NEW INVOICE_NO.

V_ERR_REC = V_ERR_REC + 1.

ENDAT.

MOVE X_INFILE TO IT_ERRORS.

IT_ERRORS-MSG = IT_ERROR-MSG.

APPEND IT_ERRORS.

CLEAR IT_ERRORS.

ENDIF.

ENDLOOP.

ENDFORM. " f_error_data

&----


*& Form f_display_suc_report

&----


  • Display success report

----


FORM F_DISPLAY_SUC_REPORT.

FORMAT COLOR OFF.

FORMAT COLOR 1 INTENSIFIED OFF.

SKIP 2.

WRITE:/1(150) 'SUCCESS REPORT'(S01) CENTERED.

ULINE /1(150).

WRITE:/1 SY-VLINE,

2 'Doc No'(031),

13 SY-VLINE,

14 'Company code'(032),

26 SY-VLINE,

27 'Fiscal Year'(033),

40 SY-VLINE,

41 'Message'(034),

150 SY-VLINE.

FORMAT COLOR OFF.

FORMAT COLOR 5 INTENSIFIED OFF.

LOOP AT IT_SUCCESS.

WRITE:/1 SY-VLINE,

2 IT_SUCCESS-DOCNUM,

13 SY-VLINE,

14 IT_SUCCESS-BUKRS,

26 SY-VLINE,

27 IT_SUCCESS-FISYR,

40 SY-VLINE,

41 IT_SUCCESS-MSG,

150 SY-VLINE.

ENDLOOP.

ULINE /1(150).

ENDFORM. " f_display_suc_report

&----


*& Form F_populate_bgr00

&----


  • To populate BGR00 structure

----


FORM F_POPULATE_BGR00.

PERFORM F_INIT_STRUCTURES USING 'BGR00' C_NODATA.

CLEAR V_SESS.

CONCATENATE C_SESS SY-DATUM+4(4) INTO V_SESS SEPARATED BY '-'.

BGR00-STYPE = '0'.

BGR00-GROUP = V_SESS.

BGR00-MANDT = SY-MANDT.

BGR00-USNAM = SY-UNAME.

BGR00-START = SPACE.

BGR00-XKEEP = 'X'.

ENDFORM. " F_populate_bgr00

&----


*& Form F_init_structures

&----


  • Form to initialise structures

----


FORM F_INIT_STRUCTURES USING TABNAME LIKE DNTAB-TABNAME

I_NODATA LIKE C_NODATA.

REFRESH IT_NAMETAB.

CLEAR IT_NAMETAB.

CALL FUNCTION 'NAMETAB_GET'

EXPORTING

LANGU = SY-LANGU

TABNAME = TABNAME

TABLES

NAMETAB = IT_NAMETAB

EXCEPTIONS

NO_TEXTS_FOUND = 1.

IF SY-SUBRC = 0.

LOOP AT IT_NAMETAB.

CLEAR V_CHAR.

CONCATENATE IT_NAMETAB-TABNAME '-' IT_NAMETAB-FIELDNAME INTO V_CHAR.

ASSIGN (V_CHAR) TO <F1>.

<F1> = I_NODATA.

ENDLOOP.

ENDIF.

ENDFORM. " INIT_STRUCTURES

&----


*& Form f_populate_bbkpf

&----


  • To populate BBKPF structure

----


FORM F_POPULATE_BBKPF.

DATA:LV_DAT LIKE BKPF-BUDAT.

PERFORM F_INIT_STRUCTURES USING 'BBKPF' C_NODATA.

  • To post Header record.

BBKPF-STYPE = '1'.

BBKPF-TCODE = 'FB01'.

CLEAR LV_DAT.

LV_DAT = SY-DATUM.

WRITE LV_DAT TO BBKPF-BUDAT.

CLEAR LV_DAT.

LV_DAT = X_INFILE-INVOICE_DATE.

WRITE LV_DAT TO BBKPF-BLDAT.

BBKPF-BLART = C_DOCTYPE.

BBKPF-BUKRS = P_BUKRS..

BBKPF-WAERS = X_T001-WAERS.

BBKPF-XBLNR = X_INFILE-INVOICE_NO.

ENDFORM. " f_populate_bbkpf

&----


*& Form populate_bbseg_c

&----


  • To populate BBSEG structure Credit

----


FORM POPULATE_BBSEG_C.

PERFORM F_INIT_STRUCTURES USING 'BBSEG' C_NODATA.

BBSEG-STYPE = '2'.

BBSEG-TBNAM = 'BBSEG'.

BBSEG-NEWBS = '31'.

READ TABLE IT_LFA1 WITH KEY STCD2 = X_INFILE-TAX_ID_NO .

IF SY-SUBRC = 0.

BBSEG-NEWKO = IT_LFA1-LIFNR.

ELSE.

READ TABLE IT_LFA1 WITH KEY STCD1 = X_INFILE-TAX_ID_NO .

IF SY-SUBRC = 0.

BBSEG-NEWKO = IT_LFA1-LIFNR.

ENDIF.

ENDIF.

BBSEG-WRBTR = X_INFILE-INV_HEADER_AMT.

BBSEG-SGTXT = X_INFILE-INV_DESC.

ENDFORM. " populate_bbseg_c

&----


*& Form POPULATE_BBSEG_D

&----


  • To populate BBSEG structure Debit

----


FORM POPULATE_BBSEG_D.

DATA:L_LGR_ID(4) TYPE C. "ledger id

CLEAR L_LGR_ID.

PERFORM F_INIT_STRUCTURES USING 'BBSEG' C_NODATA.

BBSEG-STYPE = '2'.

BBSEG-TBNAM = 'BBSEG'.

BBSEG-NEWBS = '40'.

*Fetching G/L account

READ TABLE IT_GL WITH KEY LGCY_SYSTEM = C_FADS

LGCY_PRIME_ACCT = X_INFILE-PRI_SUBACCT1

LGCY_SUB_ACCT = X_INFILE-PRI_SUBACCT2.

IF SY-SUBRC = 0.

BBSEG-NEWKO = IT_GL-SAP_GL_ACCOUNT.

ENDIF.

BBSEG-WRBTR = X_INFILE-INV_LINE_AMT.

CONCATENATE X_INFILE-LEDGER_ID1 X_INFILE-LEDGER_ID2 INTO

L_LGR_ID.

*Fetching costcenter

READ TABLE IT_COSTCTR WITH KEY LGCY_LDGR = L_LGR_ID

LGCY_DEPT = X_INFILE-DEPT_WIN_LDGR.

IF SY-SUBRC = 0.

BBSEG-KOSTL = IT_COSTCTR-COST_OBJECT.

ENDIF.

BBSEG-SGTXT = X_INFILE-INV_DESC.

ENDFORM. " POPULATE_BBSEG_D

&----


*& Form f_submit_rfbibloo

&----


  • Submit the program to rfbibloo

----


FORM F_SUBMIT_RFBIBLOO.

  • Submitting the file for RFBIBL00

SUBMIT RFBIBL00 WITH DS_NAME = V_FILE

WITH CALLMODE = 'B'

WITH MAX_COMM = '9999'

WITH XINF = 'X'

AND RETURN.

  • Process the session if created successfully

IF SY-SUBRC = 0.

SUBMIT RSBDCSUB WITH MAPPE = V_SESS

WITH Z_VERARB = 'X'

WITH FEHLER = ''

EXPORTING LIST TO MEMORY

AND RETURN.

IF SY-SUBRC = 0.

  • Displaying the sessions data

PERFORM F_SESSION_LIST.

ENDIF.

ENDIF.

ENDFORM. " f_submit_rfbibloo

&----


*& Form f_session_list

&----


  • Displaying the sessions data

----


FORM F_SESSION_LIST.

DATA:LV_UCOMM LIKE SY-UCOMM. "usercommand

CALL FUNCTION 'LIST_FROM_MEMORY'

TABLES

LISTOBJECT = IT_LIST

EXCEPTIONS

NOT_FOUND = 1

OTHERS = 2.

IF NOT IT_LIST[] IS INITIAL.

CALL FUNCTION 'DISPLAY_LIST'

  • EXPORTING

  • FULLSCREEN = 'X'

  • CALLER_HANDLES_EVENTS =

IMPORTING

USER_COMMAND = LV_UCOMM

TABLES

LISTOBJECT = IT_LIST

EXCEPTIONS

EMPTY_LIST = 1

OTHERS = 2

.

ENDIF.

ENDFORM. " f_session_list

Read only

0 Likes
1,694

sample code using BAPI

----


  • Internal Table and structure Declarations *

----


  • Structure to hold header data

DATA: x_docheader LIKE bapiache09. "Header.

  • Internal table to hold account GL data

DATA: BEGIN OF it_accgl OCCURS 0.

INCLUDE STRUCTURE bapiacgl09. "G/L account item.

DATA: END OF it_accgl.

  • Internal table to hold account payee data

DATA: BEGIN OF it_accpy OCCURS 0.

INCLUDE STRUCTURE bapiacap09. "Vendor Item.

DATA: END OF it_accpy.

  • Internal table to hold currency amount data

DATA: BEGIN OF it_curramt OCCURS 0.

INCLUDE STRUCTURE bapiaccr09. "Currency Items.

DATA: END OF it_curramt.

  • Internal table to hold return data

DATA: BEGIN OF it_return OCCURS 0.

INCLUDE STRUCTURE bapiret2. "Return Parameter.

DATA: END OF it_return.

  • Internal table to hold input file data

DATA:BEGIN OF it_infile OCCURS 0.

INCLUDE STRUCTURE z0fi_ap_fads_to_sap. "Input file format

DATA:error(1) TYPE c, "error indicator

END OF it_infile.

  • Internal table to hold input file data

DATA:BEGIN OF it_errors OCCURS 0.

INCLUDE STRUCTURE z0fi_ap_fads_to_sap. "Input file format

DATA: msg(200) TYPE c, "message

END OF it_errors.

  • Internal table to hold GL data

DATA:BEGIN OF it_gl OCCURS 0,

sap_gl_account LIKE zfglt_gl_pri_sub-sap_gl_account, "G/L Account

lgcy_system LIKE zfglt_gl_pri_sub-lgcy_system, "Legacy System

lgcy_prime_acct LIKE zfglt_gl_pri_sub-lgcy_prime_acct,"Legacy Account

lgcy_sub_acct LIKE zfglt_gl_pri_sub-lgcy_sub_acct, "Legacy Sub Acct

END OF it_gl.

  • Internal table to hold cost center data

DATA:BEGIN OF it_costctr OCCURS 0,

cost_object LIKE zfcft_ctr_dpt_lg-cost_object, "Cost center

lgcy_ldgr LIKE zfcft_ctr_dpt_lg-lgcy_ldgr, "Legacy ledger

lgcy_dept LIKE zfcft_ctr_dpt_lg-lgcy_dept, "Legacy Department

END OF it_costctr.

  • Internal table to hold vendor data

DATA:BEGIN OF it_lfa1 OCCURS 0,

lifnr TYPE lifnr, "Vendor no

BUKRS TYPE BUKRS, "Company code

stcd1 TYPE stcd1, "Tax ID1

stcd2 TYPE stcd2, "Tax ID2

END OF it_lfa1.

  • Internal table to hold Primary Sub Acct data

DATA:BEGIN OF it_subacct OCCURS 0,

pryact1(10) TYPE c, "Pry sub Acct1

pryact2(10) TYPE c, "Pry sub Acct2

END OF it_subacct.

  • Internal table to hold ledger data

DATA:BEGIN OF it_ledger OCCURS 0,

lgr_id(4) TYPE C, "Ledger ID

dept(4) TYPE c, "Department

END OF it_ledger.

  • Internal table to hold tax id

DATA:BEGIN OF it_taxid OCCURS 0,

taxid1(16) TYPE c, "Tax ID1

taxid2(11) TYPE c, "Tax ID2

END OF it_taxid.

  • Internal table to hold line amounts sum data

DATA:BEGIN OF it_sum OCCURS 0,

tax_id_no(10) TYPE c, "Tax Id No

invoice_no(12) TYPE c, "Invoice No

sum2(11) TYPE p DECIMALS 2, "Sum

END OF it_sum.

  • Internal table to hold Error records

data:BEGIN OF IT_ERROR OCCURS 0,

tax_id_no(10) TYPE c, "Tax Id No

invoice_no(12) TYPE c, "Invoice No

MSG(200) TYPE C, "Message

END OF IT_eRROR .

  • Internal table to hold success records

DATA : BEGIN OF it_success OCCURS 0,

docnum(10) TYPE c, "Document No

bukrs(4) TYPE c, "Company code

fisyr(4) TYPE c, "Fiscal year

msg(100) TYPE c, "Message

END OF it_success.

data:begin of it_invno occurs 0,

xblnr(16) type c,

end of it_invno.

  • Internal table to hold Invoice Document no's

DATA:BEGIN OF IT_BKPF OCCURS 0,

bukrs LIKE BKPF-BUKRS,

belnr LIKE BKPF-BELNR,

xblnr like bkpf-xblnr,

END OF IT_BKPF.

  • Structure to hold input file

DATA:x_infile LIKE it_infile.

  • Structure to hold company code & currency data

DATA:BEGIN OF x_t001,

bukrs LIKE t001-bukrs, "Company code

waers LIKE t001-waers, "Currency

END OF x_t001.

----


  • Global Variables *

----


DATA: v_pgm_id LIKE sy-repid, "Program id

v_count_infile TYPE i, "Counter

v_text(100) TYPE c. "Text

DATA:

v_err TYPE i, "Counter

v_objkey LIKE bapiache09-obj_key, "object key

v_err_rec type i, "Error Records

v_suc_rec type i. "Success Records

----


  • Constants. *

----


DATA:

c_itemno(6) TYPE c VALUE '000001', "Item no

c_doctype(2) TYPE c VALUE 'KU', "Doc type

c_busact(4) TYPE c VALUE 'RMRP', "Business Account

c_fads(7) TYPE c VALUE 'FADS'. "Legacy system

----


  • Selection Screen

----


SELECTION-SCREEN: BEGIN OF BLOCK no1 WITH FRAME TITLE text-001.

*Input file name

PARAMETERS:p_bukrs LIKE t001-bukrs OBLIGATORY,

p_infile LIKE rlgrap-filename LOWER CASE DEFAULT

'C:\FB60.txt' OBLIGATORY,

*Filename for Error records

p_err LIKE rlgrap-filename LOWER CASE DEFAULT

'/int/D01/030/in/REQ853err.txt' OBLIGATORY.

*For selecting either a sequential file or local file.

PARAMETERS:

r_pserv RADIOBUTTON GROUP gr1 DEFAULT 'X',

r_aserv RADIOBUTTON GROUP gr1.

SELECTION-SCREEN: END OF BLOCK no1.

----


  • INITIALIZATION

----


INITIALIZATION.

v_pgm_id = sy-repid.

----


  • AT SELECTION-SCREEN *

----


AT SELECTION-SCREEN.

  • Validating company code

SELECT SINGLE bukrs

waers INTO (x_t001-bukrs, x_t001-waers)

FROM t001 WHERE bukrs = p_bukrs.

IF sy-subrc <> 0.

MESSAGE e014 WITH 'Invalid Company code'(e01).

ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.

  • Getting help for presentation server files

IF r_pserv = 'X'.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = v_pgm_id

dynpro_number = sy-dynnr

field_name = ' '

IMPORTING

file_name = p_infile.

ENDIF.

----


  • START-OF-SELECTION *

----


START-OF-SELECTION.

  • If sequential file is selected

IF r_aserv = 'X'.

  • Form to get data for apllication server

PERFORM f_get_input_data.

  • if local file

ELSE.

  • If sequential file is selected

PERFORM f_get_local_data.

ENDIF.

  • Selecting GL, Costcenter, vendor data

PERFORM f_select_data.

  • Validate the the input file data

PERFORM f_validate_data.

  • Populate data to be passed to BAPI

PERFORM f_populate_data.

  • Populate the error data

PERFORM f_error_data.

----


  • END-OF-SELECTION

----


END-OF-SELECTION.

write : / 'Number of success records '(003),

v_suc_rec LEFT-JUSTIFIED.

write : / 'Number of error records '(004),

v_err_rec LEFT-JUSTIFIED.

IF NOT it_errors[] IS INITIAL.

  • Form to display the error report

PERFORM f_display_report.

ENDIF.

if not it_success[] is initial.

  • Form to display the success report

perform f_display_suc_report.

endif.

*--Standard footer

PERFORM std_end_of_report.

----


  • TOP OF PAGE *

----


TOP-OF-PAGE.

*---Standard header

PERFORM std_top_of_page CHANGING sy-title.

&----


*& Form f_get_local_data

&----


  • Getting the data from presentation server

----


FORM f_get_local_data.

DATA:lv_filnam TYPE string. "File name

lv_filnam = p_infile.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = lv_filnam

filetype = 'ASC'

  • has_field_separator = ' '

TABLES

data_tab = it_infile

EXCEPTIONS

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

OTHERS = 17.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

CLEAR v_count_infile.

DESCRIBE TABLE it_infile LINES v_count_infile.

  • Determine if input file has data

IF v_count_infile EQ 0.

MESSAGE a001(zfi).

EXIT.

ELSE.

CONCATENATE 'Number of records read from input file '(002)

p_infile

': ' INTO v_text.

WRITE: / v_text, v_count_infile LEFT-JUSTIFIED.

ENDIF.

ENDFORM. " f_get_local_data

&----


*& Form F_GET_INPUT_DATA

&----


  • Getting the data from apllication server

----


FORM f_get_input_data.

DATA: lv_filnam LIKE filename-fileextern."File name

lv_filnam = p_infile.

  • Opening Dataset

OPEN DATASET lv_filnam FOR INPUT IN TEXT MODE.

  • Read legacy input file into internal table for furthing processing

DO.

CLEAR it_infile.

READ DATASET p_infile INTO it_infile.

IF sy-subrc NE 0.

EXIT.

ENDIF.

ADD 1 TO v_count_infile.

ENDDO.

  • Determine if input file has data

IF v_count_infile EQ 0.

MESSAGE a001(zfi).

EXIT.

ELSE.

CONCATENATE 'Number of records read from input file '(002)

p_infile

': ' INTO v_text.

WRITE: / v_text, v_count_infile LEFT-JUSTIFIED.

EXIT.

ENDIF.

  • closing dataset

CLOSE DATASET lv_filnam.

ENDFORM.

*&----


*& Form f_populate_data

*&----


  • Populate data

*----


FORM f_populate_data.

CLEAR: x_infile,it_success,v_suc_rec.

refresh it_success.

SORT it_infile BY tax_id_no invoice_no.

LOOP AT it_infile.

x_infile = it_infile.

AT NEW invoice_no.

  • Populate header data

PERFORM f_populate_head_data.

  • Populate vendor header data

PERFORM f_acctpayee_data.

it_curramt-itemno_acc = c_itemno.

it_curramt-amt_doccur = x_infile-inv_header_amt * -1.

it_curramt-currency = x_t001-waers.

APPEND it_curramt.

CLEAR it_curramt.

ENDAT.

  • Populate Account G/L data

PERFORM f_acctgl_data.

  • Populate Currency Amount data

PERFORM f_curramt_data.

AT END OF invoice_no.

  • Call the BAPI to post the document

PERFORM f_call_bapi.

ENDAT.

CLEAR:x_infile.

ENDLOOP.

ENDFORM. " f_populate_data

*&----


*& Form f_populate_head_data

*&----


  • Populate header data

*----


FORM f_populate_head_data.

x_docheader-bus_act = c_busact.

x_docheader-username = sy-uname.

x_docheader-comp_code = p_bukrs.

x_docheader-doc_date = x_infile-invoice_date.

x_docheader-pstng_date = sy-datum.

x_docheader-doc_type = c_doctype.

x_docheader-ref_doc_no = x_infile-invoice_no.

ENDFORM. " f_populate_head_data

*&----


*& Form f_acctpayee_data

*&----


  • Populate vendor data

*----


FORM f_acctpayee_data.

READ TABLE it_lfa1 WITH KEY stcd2 = x_infile-tax_id_no .

IF sy-subrc = 0.

it_accpy-vendor_no = it_lfa1-lifnr.

ELSE.

READ TABLE it_lfa1 WITH KEY stcd1 = x_infile-tax_id_no .

IF sy-subrc = 0.

it_accpy-vendor_no = it_lfa1-lifnr.

ENDIF.

ENDIF.

it_accpy-itemno_acc = c_itemno.

  • it_Accpy-item_text = X_infile-INV_DESC.

APPEND it_accpy.

CLEAR it_accpy.

ENDFORM. " f_populate_item_data

*&----


*& Form f_acctgl_data

*&----


  • Populate Account G/L data

*----


FORM f_acctgl_data.

DATA:l_lgr_id(4) TYPE c. "ledger id

CLEAR l_lgr_id.

it_accgl-itemno_acc = x_infile-inv_line_no + 1.

*Fetching G/L account

READ TABLE it_gl WITH KEY lgcy_system = c_fads

lgcy_prime_acct = x_infile-pri_subacct1

lgcy_sub_acct = x_infile-pri_subacct2.

IF sy-subrc = 0.

it_accgl-gl_account = it_gl-sap_gl_account.

ENDIF.

it_accgl-item_text = x_infile-inv_desc.

CONCATENATE x_infile-ledger_id1 x_infile-ledger_id2 INTO

l_lgr_id.

*Fetching costcenter

READ TABLE it_costctr WITH KEY lgcy_ldgr = l_lgr_id

lgcy_dept = x_infile-dept_win_ldgr.

IF sy-subrc = 0.

it_accgl-costcenter = it_costctr-cost_object.

ENDIF.

  • it_accgl-tax_code = c_tax_code.

APPEND it_accgl.

CLEAR it_accgl.

ENDFORM. " f_acctgl_data

*&----


*& Form f_curramt_Data

*&----


  • Populate Currency Amount data

*----


FORM f_curramt_data.

it_curramt-itemno_acc = x_infile-inv_line_no + 1.

it_curramt-amt_doccur = x_infile-inv_line_amt.

it_curramt-currency = x_t001-waers.

APPEND it_curramt.

CLEAR it_curramt.

ENDFORM. " f_curramt_Data

*&----


*& Form F_CALL_BAPI

*&----


  • Calling BAPI

*----


FORM f_call_bapi.

CLEAR: it_return."it_success

REFRESH: it_return. "it_success

*Creating a posting in Accounting.

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'

EXPORTING

documentheader = x_docheader

IMPORTING

obj_key = v_objkey

TABLES

accountgl = it_accgl

accountpayable = it_accpy

currencyamount = it_curramt

return = it_return.

IF NOT v_objkey IS INITIAL AND v_objkey NE '$'.

  • Commit work

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

it_success-docnum = v_objkey+0(10).

it_success-bukrs = v_objkey+10(4).

it_success-fisyr = v_objkey+14(4).

READ TABLE it_return INDEX 1.

IF sy-subrc = 0.

it_success-msg = it_return-message.

ENDIF.

v_suc_rec = v_suc_rec + 1.

APPEND it_success.

CLEAR it_success.

ELSE.

LOOP AT it_return.

IT_ERROR-TAX_ID_NO = X_infile-TAX_ID_NO.

IT_ERROR-INVOICE_NO = X_infile-INVOICE_NO.

it_error-msg = it_return-message.

APPEND it_error.

CLEAR it_error.

  • Roll back

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDLOOP.

ENDIF.

REFRESH : it_accgl,it_curramt,it_return,it_accpy.

CLEAR : x_docheader,it_accgl, it_curramt,it_return,it_accpy.

ENDFORM. " f_CALL_BAPI

*&----


*& Form f_display_report

*&----


  • Display error report

*----


FORM f_display_report.

  • Open the dataset

OPEN DATASET p_err FOR OUTPUT IN TEXT MODE.

IF sy-subrc EQ 0.

LOOP AT it_errors.

  • Transfer the error records to error file on application server

TRANSFER it_errors TO p_err.

ENDLOOP.

ENDIF.

  • Closing the dataset

CLOSE DATASET p_err.

IF NOT it_errors[] IS INITIAL.

FORMAT COLOR 1 INTENSIFIED OFF.

SKIP 2.

WRITE:/1(673) 'ERROR REPORT'(H01) CENTERED.

ULINE /1(673).

WRITE:/(4)'S.No'(005),

sy-vline,

(10) 'Tax Id No'(006),

sy-vline,

(12) 'Invoice No'(007),

sy-vline,

(8) 'Rec Type'(008),

sy-vline,

(6) 'Seq No'(009),

sy-vline,

(8) 'Batch No'(010),

sy-vline,

(8) 'UserID'(011),

sy-vline,

(8) 'NU1'(012),

sy-vline,

(11) 'Inv Amt'(013),

sy-vline,

(8) 'Inv Date'(014),

sy-vline,

(10) 'G/L Org ID'(015),

sy-vline,

(4) 'NU4'(012),

sy-vline,

(4) 'NU5'(012),

sy-vline,

(4) 'NU6'(012),

sy-vline,

(4) 'NU7'(012),

sy-vline,

(11) 'NU8'(012),

sy-vline,

(4) 'NU9'(012),

sy-vline,

(10) 'PO No'(016),

sy-vline,

(30) 'Inv Desc'(017),

sy-vline,

(10) 'Voucher No'(018),

sy-vline,

(10) 'Inv LinNo'(019),

sy-vline,

(11) 'Inv Lin Amt'(020),

sy-vline,

(9) 'Led ID-1'(021),

sy-vline,

(9) 'Led ID-2'(022),

sy-vline,

(15) 'Pri Sub Acc-1'(023),

sy-vline,

(15) 'Pri Sub Acc-2'(024),

sy-vline,

(15) 'Dept Win Lgr'(025),

sy-vline,

(5) 'NU2'(012),

sy-vline,

(6) 'NU3'(012),

sy-vline,

(11) 'Dist Amt'(026),

sy-vline,

(8) 'Inv Type'(027),

sy-vline,

(12) 'PO Line No'(028),

sy-vline,

(15) 'Inv Line Amt'(029),

sy-vline,

(5) 'NU10'(012),

sy-vline,

(13) 'NU11'(012),

sy-vline,

(5) 'NU12'(012),

sy-vline,

(6) 'NU13'(012),

sy-vline,

(5) 'NU14'(012),

sy-vline,

(5) 'NU15'(012),

sy-vline,

(200) 'Message'(030),

sy-vline.

FORMAT COLOR 6 INTENSIFIED OFF.

LOOP AT it_errors.

WRITE:/(4) sy-tabix,

sy-vline,

(10) it_errors-TAX_ID_NO,

sy-vline,

(12) it_errors-INVOICE_NO,

sy-vline,

(8) it_errors-RECORD_TYPE,

sy-vline,

(6) it_errors-SEQ_NO,

sy-vline,

(8) it_errors-BATCH_NO,

sy-vline,

(8) it_errors-USERID,

sy-vline,

(8) it_errors-NU1,

sy-vline,

(11) it_errors-INV_HEADER_AMT,

sy-vline,

(8) it_errors-INVOICE_DATE,

sy-vline,

(10) it_errors-GL_ORG_ID,

sy-vline,

(4) it_errors-NU4,

sy-vline,

(4) it_errors-NU5,

sy-vline,

(4) it_errors-NU6,

sy-vline,

(4) it_errors-NU7,

sy-vline,

(11) it_errors-NU8,

sy-vline,

(4) it_errors-NU9,

sy-vline,

(10) it_errors-PONUMBER,

sy-vline,

(30) it_errors-INV_DESC,

sy-vline,

(10) it_errors-VOUCHER_NO,

sy-vline,

(10) it_errors-INV_LINE_NO,

sy-vline,

(11) it_errors-INV_LINE_AMT,

sy-vline,

(9) it_errors-LEDGER_ID1,

sy-vline,

(9) it_errors-LEDGER_ID2,

sy-vline,

(15) it_errors-PRI_SUBACCT1,

sy-vline,

(15) it_errors-PRI_SUBACCT2,

sy-vline,

(15) it_errors-DEPT_WIN_LDGR,

sy-vline,

(5) it_errors-NU2,

sy-vline,

(6) it_errors-NU3,

sy-vline,

(11) it_errors-DIST_AMT,

sy-vline,

(8) it_errors-INV_TYPE,

sy-vline,

(12) it_errors-PO_LINE_NO,

sy-vline,

(15) it_errors-INV_LINE_AMT_D,

sy-vline,

(5) it_errors-NU10,

sy-vline,

(13) it_errors-NU11,

sy-vline,

(5) it_errors-NU12,

sy-vline,

(6) it_errors-NU13,

sy-vline,

(5) it_errors-NU14,

sy-vline,

(5) it_errors-NU15,

sy-vline,

(200) it_errors-msg,

sy-vline.

ENDLOOP.

ULINE /1(673).

ENDIF.

ENDFORM. " f_display_report

&----


*& Form f_select_data

----


  • Selection of GL, Costcenter, vendor data

----


FORM f_select_data.

DATA:L_dEPT(4) TYPE N. "Legacy department

CLEAR:it_gl, it_costctr, it_lfa1, it_subacct, it_taxid , it_sum.

REFRESH:it_gl, it_costctr, it_lfa1, it_subacct, it_taxid,it_sum.

SORT it_infile BY tax_id_no invoice_no.

*Looping at input file

LOOP AT it_infile.

x_infile = it_infile.

*Summing the invoice line items amount and moving the sum to it_sum

it_sum-tax_id_no = it_infile-tax_id_no.

it_sum-invoice_no = it_infile-invoice_no.

it_sum-sum2 = it_infile-inv_line_amt.

COLLECT it_sum.

CLEAR it_sum.

*Storing Primary Sub Account data

it_subacct-pryact1 = it_infile-pri_subacct1.

it_subacct-pryact2 = it_infile-pri_subacct2.

APPEND it_subacct.

CLEAR it_subacct.

*Storing Ledger ID data

CONCATENATE it_infile-ledger_id1 it_infile-ledger_id2 INTO

it_ledger-lgr_id.

l_dept = it_infile-dept_win_ldgr.

it_ledger-dept = l_dept.

APPEND it_ledger.

CLEAR it_ledger.

*Storing Tax ID data

it_taxid-taxid1 = it_infile-tax_id_no.

it_taxid-taxid2 = it_infile-tax_id_no.

APPEND it_taxid.

CLEAR it_taxid.

condense it_infile-invoice_no.

it_invno-xblnr = it_infile-invoice_no.

append it_invno.

clear it_invno.

ENDLOOP.

SORT it_subacct BY pryact1 pryact2.

SORT it_ledger BY lgr_id dept.

SORT it_taxid BY taxid1 taxid2.

SORT it_sum BY tax_id_no invoice_no.

sort it_invno by xblnr.

DELETE ADJACENT DUPLICATES FROM it_subacct COMPARING pryact1 pryact2.

DELETE ADJACENT DUPLICATES FROM it_ledger COMPARING lgr_id dept.

DELETE ADJACENT DUPLICATES FROM it_taxid COMPARING taxid1 taxid2.

if not it_invno is initial.

select bukrs

belnr

xblnr

into table it_bkpf

from bkpf

for all entries in it_invno

where bukrs = p_bukrs and

gjahr = sy-datum+0(4) and

blart = c_doctype and

xblnr = it_invno-xblnr.

.

endif.

IF NOT it_subacct[] IS INITIAL.

*Selecting G/L Account from General Ledger Z Table

SELECT sap_gl_account

lgcy_system

lgcy_prime_acct

lgcy_sub_acct FROM zfglt_gl_pri_sub

INTO TABLE it_gl

FOR ALL ENTRIES IN it_subacct

WHERE lgcy_system = c_fads AND

lgcy_prime_acct = it_subacct-pryact1 AND

lgcy_sub_acct = it_subacct-pryact2.

IF sy-subrc = 0.

SORT it_gl BY sap_gl_account

lgcy_system

lgcy_prime_acct

lgcy_sub_acct.

ENDIF.

IF NOT it_ledger[] IS INITIAL.

*Selecting cost center from Cost Center Z Table

SELECT cost_object

lgcy_ldgr

lgcy_dept FROM zfcft_ctr_dpt_lg

INTO TABLE it_costctr

FOR ALL ENTRIES IN it_ledger

WHERE lgcy_ldgr = it_ledger-lgr_id AND

lgcy_dept = it_ledger-dept.

IF sy-subrc = 0.

SORT it_costctr BY cost_object

lgcy_ldgr

lgcy_dept.

ENDIF.

ENDIF.

IF NOT it_taxid[] IS INITIAL.

*Selecting vendor no from vendor master data

SELECT a~lifnr

b~bukrs

a~stcd1

a~stcd2

FROM lfa1 as A join lfb1 as B

on alifnr = blifnr

INTO TABLE it_lfa1

FOR ALL ENTRIES IN it_taxid

wHERE bukrs = p_bukrs and

( stcd1 = it_taxid-taxid1 OR

stcd2 = it_taxid-taxid2 ).

ENDIF.

ENDIF.

ENDFORM. " f_select_data

&----


*& Form f_validate_data

&----


  • Validation of input file data

----


FORM f_validate_data.

DATA:l_errflag TYPE c, "Error flag

l_dept(4) TYPE n, "Department

l_lgr_id(4) TYPE c, "Ledger ID

lv_no_of_vendors TYPE i, "No of vendors

l_sum(11) TYPE p DECIMALS 2, "Sum

lv_msg1(30) TYPE c, "Message

lv_msg2(25) TYPE c, "Message

lv_msg3(6) TYPE c, "Message

lv_msg4(31) TYPE c, "Message

lv_msg5(53) TYPE c, "Message

lv_msg6(30) TYPE c, "Message

lv_msg7(50) TYPE c. "Message

LOOP AT it_infile.

CLEAR:lv_msg1,lv_msg2, lv_msg3,lv_msg4,lv_msg5, lv_msg6, lv_msg7.

CLEAR l_errflag.

SORT it_sum BY tax_id_no

invoice_no.

CLEAR it_subacct.

  • Validating Primary Sub Acct1 and Acct2.

READ TABLE it_gl WITH KEY lgcy_system = c_fads

lgcy_prime_acct = it_infile-pri_subacct1

lgcy_sub_acct = it_infile-pri_subacct2 .

IF sy-subrc <> 0.

lv_msg1 = 'Primary Sub Acct1 and Acct2'(035).

l_errflag = 'X'.

ENDIF.

MOVE it_infile-dept_win_ldgr TO l_dept.

MOVE l_dept TO it_infile-dept_win_ldgr.

CONCATENATE it_infile-ledger_id1 it_infile-ledger_id2 INTO

l_lgr_id.

CLEAR: it_costctr.

  • Validating Ledger id & department

READ TABLE it_costctr WITH KEY lgcy_ldgr = l_lgr_id

lgcy_dept = it_infile-dept_win_ldgr.

IF sy-subrc <> 0.

lv_msg2 = 'Ledger id & department'(036).

l_errflag = 'X'.

ENDIF.

  • Validating Tax ID

CLEAR:it_lfa1.

READ TABLE it_lfa1 WITH KEY stcd2 = it_infile-tax_id_no..

IF sy-subrc <> 0.

READ TABLE it_lfa1 WITH KEY stcd1 = it_infile-tax_id_no..

IF sy-subrc <> 0.

lv_msg3 = 'Tax ID'(041).

l_errflag = 'X'.

ENDIF.

ENDIF.

  • Checking for no of vendors selected based on tax id. If no of vendors

  • selected are more than 1 or 0 then error out the record

lv_no_of_vendors = 0.

LOOP AT it_lfa1 WHERE stcd1 = it_infile-tax_id_no OR

stcd2 = it_infile-tax_id_no.

lv_no_of_vendors = lv_no_of_vendors + 1.

ENDLOOP.

IF lv_no_of_vendors = 0.

lv_msg6 = 'No vendor found for TAXID'(037).

l_errflag = 'X'.

ELSEIF lv_no_of_vendors > 1.

lv_msg4 = 'More than one vendor for Tax id'(038).

l_errflag = 'X'.

ENDIF.

  • Checking whether KU Document already exists for this Invoice No

clear it_invno.

read table it_invno with key xblnr = it_infile-invoice_no.

IF sy-subrc <> 0.

lv_msg7 = 'KU Document already exists for this Invoice No '(042).

l_errflag = 'X'.

ENDIF.

  • Checking whether the invoice header amt is equal to the line items amt

CLEAR it_sum.

READ TABLE it_sum WITH KEY tax_id_no = it_infile-tax_id_no

invoice_no = it_infile-invoice_no BINARY SEARCH.

CLEAR l_sum.

l_sum = it_infile-inv_header_amt.

IF l_sum <> it_sum-sum2.

lv_msg5 = 'Header amt is not equal to the sum of all line items'(039).

l_errflag = 'X'.

ENDIF.

  • Moving error records to error internal table

IF l_errflag = 'X'.

MOVE it_infile TO it_errors.

CONCATENATE 'Invalid:'(040) lv_msg1 lv_msg2 lv_msg3 lv_msg4 lv_msg5

lv_msg6 lv_msg7 INTO it_errors-msg SEPARATED BY space.

APPEND it_errors.

CLEAR : it_errors.

  • Deleting all the errors records from the processing internal table

  • and moving them to error table

v_err = v_err + 1.

it_infile-error = 'X'.

MODIFY it_infile TRANSPORTING error.

CLEAR it_infile.

ENDIF.

ENDLOOP.

DELETE it_infile WHERE error = 'X'.

  • Deleting all the line items from the processing internal table where

  • atleast one line item is error one

sort it_errors by tax_id_no

invoice_no.

clear v_err_rec.

LOOP AT it_errors.

DELETE it_infile WHERE tax_id_no = it_errors-tax_id_no AND

invoice_no = it_errors-invoice_no.

at new invoice_no.

v_err_rec = v_err_rec + 1.

endat.

ENDLOOP.

ENDFORM. " f_validate_data

&----


*& Form f_error_data

&----


  • Processing error data

----


form f_error_data.

DELETE it_error WHERE msg = 'Error in document: BKPFF $ D01030'(E02).

sort it_error by tax_id_no invoice_no.

loop at it_infile.

x_infile = it_infile.

READ TABLE IT_ERROR WITH KEY TAX_ID_NO = it_INFILE-TAX_ID_NO

INVOICE_NO = it_INFILE-INVOICE_NO binary search.

if sy-subrc = 0.

at new invoice_no.

v_err_rec = v_err_rec + 1.

endat.

MOVE x_INFILE TO IT_ERRORS.

IT_ERRORS-MSG = IT_eRROR-MSG.

APPEND IT_ERRORS.

CLEAR IT_ERRORS.

endif.

endloop.

endform. " f_error_data

&----


*& Form f_display_suc_report

&----


  • Display success report

----


form f_display_suc_report.

FORMAT COLOR OFF.

FORMAT COLOR 1 INTENSIFIED OFF.

SKIP 2.

WRITE:/1(150) 'SUCCESS REPORT'(S01) CENTERED.

ULINE /1(150).

WRITE:/1 sy-vline,

2 'Doc No'(031),

13 sy-vline,

14 'Company code'(032),

26 sy-vline,

27 'Fiscal Year'(033),

40 sy-vline,

41 'Message'(034),

150 sy-vline.

FORMAT COLOR OFF.

FORMAT COLOR 5 INTENSIFIED OFF.

LOOP AT it_success.

WRITE:/1 sy-vline,

2 it_success-docnum,

13 sy-vline,

14 it_success-bukrs,

26 sy-vline,

27 it_success-fisyr,

40 sy-vline,

41 it_success-msg,

150 sy-vline.

ENDLOOP.

ULINE /1(150).

endform. " f_display_suc_report

Read only

0 Likes
1,694

Thanks Savitha for sharing your code.