Vous êtes sur la page 1sur 16

*----------------------------------------------------------------------*

* Report Interface program for EGO-SAP:Advance payment file


* Date
26th June'02
*----------------------------------------------------------------------*
* Description
: (1) Unable to save multiple pages in background
*
processing using LIST_TO_ASCI function (refer to note
*
0101006). Only the last page is saved. Worked around
*
to save list before each new page
*----------------------------------------------------------------------*
* Date Modified : 29.08.2002
* Mod Key
: M2
* Description
: Included program name for table ZZ609
*----------------------------------------------------------------------*
* Mod Key
: M3
* Description
: If cancel indicator = Y, then the SAP posting date,
*
document date & value date = eGO return date instead
*
of payment date
*----------------------------------------------------------------------*
REPORT ZFI6IN11
NO STANDARD PAGE HEADING
LINE-SIZE 170
LINE-COUNT 58(2)
MESSAGE-ID ZR.
TABLES : CSKS,
ZZ609.

"Log table to hold all the processed files

DATA : BEGIN OF ITAB OCCURS 0,


FILE
LIKE RLGRAP-FILENAME,
TRANS(13) TYPE C,
BUDAT(10) TYPE C,
BLART(2) TYPE C,
ADVFOR(1) TYPE C,
NEWKO(17) TYPE C,
WAERS(3) TYPE C,
BKTXT(50) TYPE C,
SGTXT(50) TYPE C,
WRBTR(16) TYPE C,
PAYAC(17) TYPE C,
ZUONRP(18) TYPE C,
PAYRT(17) TYPE C,
ZUONRR(18) TYPE C,
KOSTL(10) TYPE C,
GSBER(4) TYPE C,
STORN(1) TYPE C,
*** M3
RDATE(10) TYPE C,
*** M3
ACCOUNT(17) TYPE C,
ACCREF(18) TYPE C,
AMOUNT
LIKE BSEG-WRBTR,
BELNR
LIKE BSEG-BELNR,
PDATE
LIKE BKPF-BUDAT,

"Advance purpose (B, O)


"Pay-To
"Bank
"Ref.
"Bank
"Ref.

Account for Payment


No for payment
Account for Return
No for return

"Cancel Indicator
"Reture Date
"For Output
"For Output
"For Output
"Doc no
"Payment date for sorting
"output

*** M3
ACCDATE(10) TYPE C,
*** M3

"For Output

END OF ITAB.
DATA : BEGIN OF ERRTAB OCCURS 0.
INCLUDE STRUCTURE ITAB.
DATA : MSG(60) TYPE C,
END OF ERRTAB.
DATA : BEGIN OF FLISTTAB OCCURS 0,
LINE(1023),
END OF FLISTTAB.

"<<Insert M1
"<<Insert M1
"<<Insert M1

DATA : BEGIN OF CNT_TAB OCCURS 0,


FILE LIKE RLGRAP-FILENAME,
TOTAL_RECS TYPE I,
ERR_RECS TYPE I,
OK_RECS
TYPE I,
FAIL_RECS TYPE I,
END OF CNT_TAB.
DATA : FILES LIKE EPSFILI OCCURS 0 WITH HEADER LINE,
PFILES LIKE EPSFILI OCCURS 0 WITH HEADER LINE,
BDCTAB LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
MSGTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
OKTAB LIKE ERRTAB OCCURS 0 WITH HEADER LINE,
FAILTAB LIKE ERRTAB OCCURS 0 WITH HEADER LINE,
FILENAME LIKE RLGRAP-FILENAME,
INDEX
LIKE SY-TABIX,
VALDT
LIKE SY-DATUM,
SESSION_OPEN(1) TYPE C,
POSTKEY(2) TYPE C,
GL(1)
TYPE C,
DCKEY(2)
TYPE C,
NEWKO
LIKE RF05A-NEWKO,
TEXT
LIKE BSEG-SGTXT,
REFNO_BANK LIKE BSEG-ZUONR,
REFNO_ACCT LIKE BSEG-ZUONR,
*** M3
POSTING_DATE(10) TYPE C,
*** M3
BKTXT LIKE BKPF-BKTXT,
ENTER(1) TYPE X VALUE '0D',
RECORD(1026) TYPE C,
MTEXT
TYPE TEXT.
CONSTANTS : PREFIX(7)
SUFFIX(4)
SEPARATOR
TCODE
TMODE(1)
SESSION

TYPE
TYPE
TYPE
LIKE
TYPE
LIKE

C VALUE 'advpay-',
C VALUE '.txt',
C VALUE '|',
TSTC-TCODE VALUE 'FB01',
C VALUE 'N',
APQI-GROUPID VALUE 'EGOADV'.

SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME.


PARAMETERS : P_BUKRS LIKE BKPF-BUKRS OBLIGATORY DEFAULT '4131',
P_IFILE LIKE RLGRAP-FILENAME OBLIGATORY
DEFAULT '/sapintf/ego/input/',
P_PFILE LIKE RLGRAP-FILENAME OBLIGATORY
DEFAULT '/sapintf/ego/processed/',
P_RFILE LIKE RLGRAP-FILENAME OBLIGATORY
DEFAULT '/sapintf/ego/report/'.

SELECTION-SCREEN SKIP .
PARAMETERS P_TEST AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK A.
TOP-OF-PAGE.
PERFORM PAGE_HEADER.
END-OF-PAGE.
PERFORM GET_OUTPUT_LIST.

"<<Insert M1
"<<Insert M1

START-OF-SELECTION.
PERFORM READ_FILE.
LOOP AT FILES.
PERFORM VALIDATIONS USING FILES-NAME.
PERFORM BUILD_BDC USING FILES-NAME.
PERFORM MOVE_FILE USING FILES-NAME.
ENDLOOP.
PERFORM OUTPUT.
PERFORM OUTPUT_TO_SERVER.
*&---------------------------------------------------------------------*
*&
Form READ_FILE
*&---------------------------------------------------------------------*
FORM READ_FILE.
DATA : DIRNAME LIKE EPSF-EPSDIRNAM.
DIRNAME = P_IFILE.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
DIR_NAME
= DIRNAME
TABLES
DIR_LIST
= FILES
EXCEPTIONS
INVALID_EPS_SUBDIR
= 1
SAPGPARAM_FAILED
= 2
BUILD_DIRECTORY_FAILED = 3
NO_AUTHORIZATION
= 4
READ_DIRECTORY_FAILED = 5
TOO_MANY_READ_ERRORS = 6
EMPTY_DIRECTORY_LIST = 7
OTHERS
= 8.
LOOP AT FILES.
IF FILES-NAME(7) NE PREFIX.
DELETE FILES.
ENDIF.
SELECT SINGLE * FROM ZZ609 WHERE BUKRS = P_BUKRS
AND REPID = SY-REPID
AND FILE = FILES-NAME.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING FILES TO PFILES.
APPEND PFILES. CLEAR PFILES.
DELETE FILES.
CONTINUE.
ENDIF.
ENDLOOP.
IF FILES[] IS INITIAL.
MESSAGE I037 WITH P_IFILE.
ENDIF.

"Insert M2

LOOP AT FILES.
CLEAR FILENAME.
CONCATENATE P_IFILE FILES-NAME INTO FILENAME.
CONDENSE FILENAME.
OPEN DATASET FILENAME IN TEXT MODE.
IF SY-SUBRC NE 0.
MESSAGE E034 WITH FILENAME.
ENDIF.
DO.
CLEAR RECORD.
READ DATASET FILENAME INTO RECORD.
IF SY-SUBRC EQ 0 AND RECORD NE SPACE.
CNT_TAB-TOTAL_RECS = CNT_TAB-TOTAL_RECS + 1.
SPLIT RECORD AT SEPARATOR
INTO ITAB-TRANS ITAB-BUDAT ITAB-BLART
ITAB-ADVFOR ITAB-NEWKO ITAB-WAERS
ITAB-BKTXT
ITAB-SGTXT ITAB-WRBTR ITAB-PAYAC
ITAB-ZUONRP ITAB-PAYRT ITAB-ZUONRR
ITAB-KOSTL ITAB-STORN
*** M3
ITAB-RDATE.
*** M3
ITAB-FILE = FILES-NAME.
CONCATENATE ITAB-BUDAT+6(4) ITAB-BUDAT+3(2) ITAB-BUDAT(2)
INTO ITAB-PDATE.
APPEND ITAB. CLEAR ITAB.
ELSE.
EXIT.
ENDIF.
ENDDO.
CNT_TAB-FILE = FILES-NAME.
APPEND CNT_TAB. CLEAR CNT_TAB.
CLOSE DATASET FILENAME.
ENDLOOP.

"FOR LOOP AT FILES

* Sort data for output presentation


SORT FILES BY NAME.
SORT CNT_TAB BY FILE.
SORT ITAB BY FILE PDATE TRANS.
ENDFORM.

" READ_FILE

*&---------------------------------------------------------------------*
*&
Form VALIDATIONS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM VALIDATIONS USING VALUE(FNAME).
READ TABLE CNT_TAB WITH KEY FILE = FNAME.
CLEAR INDEX.
INDEX = SY-TABIX.
LOOP AT ITAB WHERE FILE = FNAME.
ITAB-AMOUNT = ITAB-WRBTR.
IF ITAB-STORN = 'Y'.
ITAB-AMOUNT = 0 - ITAB-AMOUNT.
ENDIF.

MODIFY ITAB.
*CHECK DOCUMENT TYPE
IF ITAB-BLART NE 'CV' AND ITAB-BLART NE 'VV' AND ITAB-BLART NE 'VP'.
PERFORM ERR_REC USING CNT_TAB ITAB TEXT-001.
DELETE ITAB.
CONTINUE.
ENDIF.
*CHECK GL ACCOUNT
IF ITAB-NEWKO IS INITIAL.
PERFORM ERR_REC USING CNT_TAB ITAB TEXT-026.
DELETE ITAB.
CONTINUE.
ENDIF.
*CHECK AMOUNT
IF ITAB-AMOUNT = 0.
PERFORM ERR_REC USING CNT_TAB ITAB TEXT-027.
DELETE ITAB.
CONTINUE.
ENDIF.
*CHECK CANCEL INDICATOR
IF ITAB-STORN NE 'N' AND ITAB-STORN NE 'Y'.
PERFORM ERR_REC USING CNT_TAB ITAB TEXT-003.
DELETE ITAB.
CONTINUE.
ENDIF.
*CHECK COST CENTER
CLEAR VALDT.
IF VALDT IS INITIAL.
VALDT = SY-DATUM.
ELSE.
VALDT(4) = ITAB-BUDAT+6(4).
VALDT+4(2) = ITAB-BUDAT+3(2).
VALDT+6(2) = ITAB-BUDAT(2).
ENDIF.
SELECT SINGLE * FROM CSKS WHERE KOKRS = P_BUKRS
AND KOSTL = ITAB-KOSTL
AND DATBI GE VALDT
AND DATAB LE VALDT.
IF SY-SUBRC EQ 0.
ITAB-GSBER = CSKS-GSBER.
MODIFY ITAB.
ELSE.
CONCATENATE TEXT-002 ITAB-KOSTL INTO MTEXT SEPARATED BY SPACE.
PERFORM ERR_REC USING CNT_TAB ITAB MTEXT.
DELETE ITAB.
CONTINUE.
ENDIF.
ENDLOOP.
MODIFY CNT_TAB INDEX INDEX.
ENDFORM.

" VALIDATIONS

*&---------------------------------------------------------------------*

*&
Form BUILD_BDC
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM BUILD_BDC USING VALUE(FNAME).
CLEAR INDEX.
READ TABLE CNT_TAB WITH KEY FILE = FNAME.
INDEX = SY-TABIX.
LOOP AT ITAB WHERE FILE = FNAME.
REFRESH BDCTAB. CLEAR BDCTAB.
CLEAR: POSTKEY, REFNO_BANK, REFNO_ACCT,
*** M3
POSTING_DATE,
*** M3
GL, TEXT, DCKEY, NEWKO.
IF ITAB-STORN = 'N'.
*** M3
POSTING_DATE = ITAB-BUDAT.
*** M3
REFNO_BANK = ITAB-ZUONRP.
NEWKO
= ITAB-PAYAC.
DCKEY
= '50'.
IF ITAB-BLART = 'CV'.
IF ITAB-ADVFOR = 'B'.
"Business Trip
POSTKEY = '01'.
GL = ''.
ELSE.
POSTKEY = '09'.
GL
= 'B'.
ENDIF.
REFNO_ACCT = ITAB-TRANS.
ELSEIF ITAB-BLART = 'VV'.
POSTKEY = '29'.
GL
= 'J'.
REFNO_ACCT = ITAB-BKTXT.
ELSEIF ITAB-BLART = 'VP'.
POSTKEY = '29'.
GL
= 'A'.
REFNO_ACCT = ITAB-TRANS.
ENDIF.
ELSEIF ITAB-STORN = 'Y'.
DCKEY
= '40'.
NEWKO
= ITAB-PAYRT.
*** M3
POSTING_DATE = ITAB-RDATE.
*** M3
REFNO_BANK = ITAB-ZUONRR.
IF ITAB-BLART = 'CV'.
IF ITAB-ADVFOR = 'B'.
"Business Trip
POSTKEY = '12'.
GL = ''.
ELSE.
POSTKEY = '19'.
GL
= 'B'.
ENDIF.
REFNO_ACCT = ITAB-TRANS.
ELSEIF ITAB-BLART = 'VV'.
POSTKEY = '39'.
GL
= 'J'.

REFNO_ACCT = ITAB-BKTXT.
ELSEIF ITAB-BLART = 'VP'.
POSTKEY = '39'.
GL
= 'A'.
REFNO_ACCT = ITAB-TRANS.
ENDIF.
ENDIF.
CONCATENATE ITAB-BKTXT ITAB-SGTXT INTO: BKTXT SEPARATED BY SPACE,
TEXT SEPARATED BY SPACE.
ITAB-ACCOUNT = NEWKO.
*** M3
ITAB-ACCDATE = POSTING_DATE.
*** M3
ITAB-ACCREF = REFNO_BANK.
MODIFY ITAB.
IF P_TEST IS INITIAL.
PERFORM BDC_DYNPRO USING : 'SAPMF05A'
'0100'.
*** M3
*
PERFORM BDC_FIELD USING : 'BKPF-BLDAT' ITAB-BUDAT,
*
'BKPF-BUKRS' P_BUKRS,
*
'BKPF-BUDAT' ITAB-BUDAT,
PERFORM BDC_FIELD

USING : 'BKPF-BLDAT' POSTING_DATE,


'BKPF-BUKRS' P_BUKRS,
'BKPF-BUDAT' POSTING_DATE,

*** M3
'BKPF-BLART' ITAB-BLART,
'BKPF-WAERS' ITAB-WAERS,
'BKPF-BKTXT' BKTXT,
'BKPF-XBLNR' ITAB-TRANS,
'RF05A-NEWBS' POSTKEY,
'RF05A-NEWKO' ITAB-NEWKO,
'RF05A-NEWUM' GL,
'BDC_OKCODE' '/00'.
IF GL = 'A'.
"Down payment screen
PERFORM BDC_DYNPRO USING : 'SAPMF05A'
'0304'.
PERFORM BDC_FIELD USING : 'BSEG-WRBTR' ITAB-WRBTR,
'BSEG-MWSKZ' 'IO',
'BSEG-GSBER' ITAB-GSBER,
'BSEG-ZUONR' REFNO_ACCT,
'BSEG-SGTXT' TEXT,
'RF05A-NEWBS' DCKEY,
'RF05A-NEWKO' NEWKO,
'BDC_OKCODE' '/00'.
ELSEIF GL = ''.
PERFORM BDC_DYNPRO USING : 'SAPMF05A'
'0301'.
PERFORM BDC_FIELD USING : 'BSEG-WRBTR' ITAB-WRBTR,
'BSEG-GSBER' ITAB-GSBER,
'BSEG-ZUONR' REFNO_ACCT,
'BSEG-SGTXT' TEXT,
'RF05A-NEWBS' DCKEY,
'RF05A-NEWKO' NEWKO,
'BDC_OKCODE' '/00'.
ELSE.
PERFORM BDC_DYNPRO USING : 'SAPMF05A'
PERFORM BDC_FIELD USING : 'BSEG-WRBTR'
'BSEG-GSBER'
*** M3
*
'BSEG-ZFBDT'

'0303'.
ITAB-WRBTR,
ITAB-GSBER,
ITAB-BUDAT,

'BSEG-ZFBDT' POSTING_DATE,
*** M3
'BSEG-ZUONR'
'BSEG-SGTXT'
'RF05A-NEWBS'
'RF05A-NEWKO'
'BDC_OKCODE'

REFNO_ACCT,
TEXT,
DCKEY,
NEWKO,
'/00'.

ENDIF.
PERFORM BDC_DYNPRO USING : 'SAPMF05A'
PERFORM BDC_FIELD USING : 'BSEG-WRBTR'
*** M3
*
'BSEG-VALUT'
'BSEG-VALUT'
*** M3
'BSEG-ZUONR'
'BSEG-SGTXT'
'BDC_OKCODE'

'0300'.
ITAB-WRBTR,
ITAB-BUDAT,
POSTING_DATE,
REFNO_BANK,
TEXT,
'=BU'.

PERFORM BDC_DYNPRO USING : 'SAPLKACB'


'0002'.
PERFORM BDC_FIELD USING : 'COBL-GSBER' ITAB-GSBER,
'BDC_OKCODE' '/EENTE'.
REFRESH MSGTAB. CLEAR MSGTAB.
CALL TRANSACTION TCODE USING BDCTAB MODE TMODE UPDATE 'S'
MESSAGES INTO MSGTAB.
IF SY-SUBRC EQ 0.
CNT_TAB-OK_RECS = CNT_TAB-OK_RECS + 1.
READ TABLE MSGTAB WITH KEY MSGTYP = 'S'
MSGID = 'F5'
MSGNR = '312'.
ITAB-BELNR = MSGTAB-MSGV1.
MODIFY ITAB.
ELSE.
MOVE-CORRESPONDING ITAB TO FAILTAB.
CNT_TAB-FAIL_RECS = CNT_TAB-FAIL_RECS + 1.
DELETE ITAB.
PERFORM CREATE_BDC_SESSION TABLES BDCTAB.
READ TABLE MSGTAB WITH KEY MSGTYP = 'E'.
IF SY-SUBRC NE 0.
LOOP AT MSGTAB.
ENDLOOP.
ENDIF.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID
= MSGTAB-MSGID
MSGNR
= MSGTAB-MSGNR
MSGV1
= MSGTAB-MSGV1
MSGV2
= MSGTAB-MSGV2
MSGV3
= MSGTAB-MSGV3
MSGV4
= MSGTAB-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = FAILTAB-MSG.
APPEND FAILTAB. CLEAR FAILTAB.
ENDIF.
ENDIF.
"IF P_TEST IS INITIAL
ENDLOOP.
MODIFY CNT_TAB INDEX INDEX.
IF SESSION_OPEN = 'X'.

PERFORM CLOSE_SESSION.
ENDIF.
ENDFORM.

" BUILD_BDC

*&---------------------------------------------------------------------*
*&
Form BDC_DYNPRO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING
VALUE(PROGRAM)
VALUE(SCREEN).
CLEAR BDCTAB.
BDCTAB-PROGRAM = PROGRAM.
BDCTAB-DYNPRO = SCREEN.
BDCTAB-DYNBEGIN = 'X'.
APPEND BDCTAB.
ENDFORM.

" BDC_DYNPRO

*&---------------------------------------------------------------------*
*&
Form BDC_FIELD
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING
VALUE(FIELDNAME)
VALUE(FIELDVALUE).
CLEAR BDCTAB.
BDCTAB-FNAM = FIELDNAME.
BDCTAB-FVAL = FIELDVALUE.
APPEND BDCTAB.
ENDFORM.

" BDC_FIELD

*&---------------------------------------------------------------------*
*&
Form CREATE_BDC_SESSION
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM CREATE_BDC_SESSION TABLES P_BDCTAB STRUCTURE BDCTAB.
IF SESSION_OPEN IS INITIAL.
PERFORM OPEN_SESSION.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= TCODE
TABLES
DYNPROTAB
= P_BDCTAB.
ENDFORM.

" CREATE_BDC_SESSION

*&---------------------------------------------------------------------*
*&
Form OPEN_SESSION
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM OPEN_SESSION.
DATA GROUP LIKE APQI-GROUPID.

CONCATENATE SESSION SY-DATUM+2(2) SY-DATUM+4(2) SY-DATUM+6(2)


INTO GROUP.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT
= SY-MANDT
GROUP
= GROUP
KEEP
= 'X'
USER
= SY-UNAME.
IF SY-SUBRC EQ 0.
SESSION_OPEN = 'X'.
ENDIF.
ENDFORM.

" OPEN_SESSION

*&---------------------------------------------------------------------*
*&
Form CLOSE_SESSION
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM CLOSE_SESSION.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN
= 1
QUEUE_ERROR = 2
OTHERS
= 3.
CLEAR SESSION_OPEN.
ENDFORM.

" CLOSE_SESSION

*&---------------------------------------------------------------------*
*&
Form OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM OUTPUT.
IF NOT PFILES[] IS INITIAL.
WRITE:/1 TEXT-028.
WRITE:/1 SY-ULINE(44).
SKIP.
LOOP AT PFILES.
WRITE:/5 PFILES-NAME.
ENDLOOP.
ENDIF.
SKIP 3.
LOOP AT CNT_TAB.
IF SY-TABIX GT 1.
PERFORM GET_OUTPUT_LIST.
"<< Insert M1
NEW-PAGE.
ENDIF.
WRITE:/5 'Test Run', 45 P_TEST.
WRITE:/5 'Input File Name'(006), 45 CNT_TAB-FILE.
WRITE:/5 'Total No of Records'(007), 45 CNT_TAB-TOTAL_RECS.
WRITE:/5 'Number of Rejected Records'(008), 45 CNT_TAB-ERR_RECS.
WRITE:/5 'Number of Posting Errors'(009), 45 CNT_TAB-FAIL_RECS.
WRITE:/5 'Number of Transactions Posted'(010), 45 CNT_TAB-OK_RECS.
SKIP 3.
READ TABLE ERRTAB WITH KEY FILE = CNT_TAB-FILE.

IF SY-SUBRC EQ 0.
WRITE:/1 'Rejected Records (Data Error)'(024).
WRITE:/1 SY-ULINE(30).
SKIP.
WRITE:/119 TEXT-020.
WRITE:/1 'Trx Number'(011),
15 'Payment Dt'(012),
26 'Type'(013),
31 'Account'(014),
45 'Pay To'(015),
75 'Curr'(016),
89 'Amount'(017),
100 'BArea'(018),
106 'Bank A/c'(019),
119 TEXT-021,
134 'Error Message'(022).
WRITE:/ SY-ULINE(170).
LOOP AT ERRTAB WHERE FILE = CNT_TAB-FILE.
IF ERRTAB-GSBER IS INITIAL.
ERRTAB-GSBER = ERRTAB-KOSTL+2(4).
ENDIF.
IF ERRTAB-STORN = 'Y'.
*** M3
ERRTAB-ACCDATE = ERRTAB-RDATE.
*** M3
ERRTAB-ACCOUNT = ERRTAB-PAYRT.
ERRTAB-ACCREF = ERRTAB-ZUONRR.
ELSE.
*** M3
ERRTAB-ACCDATE = ERRTAB-BUDAT.
*** M3
ERRTAB-ACCOUNT = ERRTAB-PAYAC.
ERRTAB-ACCREF = ERRTAB-ZUONRP.
ENDIF.
WRITE:/1 ERRTAB-TRANS,
*** M3
*
15 ERRTAB-BUDAT,
15 ERRTAB-ACCDATE,
*** M3
26 ERRTAB-BLART,
31 ERRTAB-NEWKO,
45 ERRTAB-BKTXT,
75 ERRTAB-WAERS,
80 ERRTAB-AMOUNT,
100 ERRTAB-GSBER,
106 ERRTAB-ACCOUNT,
119 ERRTAB-ACCREF(14),
134 ERRTAB-MSG.
ENDLOOP.
ENDIF.
READ TABLE FAILTAB WITH KEY FILE = CNT_TAB-FILE.
IF SY-SUBRC EQ 0.
SKIP 3.
WRITE:/1 'Posting Errors (Check & Re-run BDC Session)'(030).
WRITE:/1 SY-ULINE(45).
SKIP.
WRITE:/119 TEXT-020.
WRITE:/1 'Trx Number'(011),
15 'Payment Dt'(012),

26 'Type'(013),
31 'Account'(014),
45 'Pay To'(015),
75 'Curr'(016),
89 'Amount'(017),
100 'BArea'(018),
106 'Bank A/c'(019),
119 TEXT-021,
134 'Error Message'(022).
WRITE:/ SY-ULINE(170).
LOOP AT FAILTAB WHERE FILE = CNT_TAB-FILE.
WRITE:/1 FAILTAB-TRANS,
*** M3
*
15 FAILTAB-BUDAT,
15 FAILTAB-ACCDATE,
*** M3
26 FAILTAB-BLART,
31 FAILTAB-NEWKO,
45 FAILTAB-BKTXT,
75 FAILTAB-WAERS,
80 FAILTAB-AMOUNT,
100 FAILTAB-GSBER,
106 FAILTAB-ACCOUNT,
119 FAILTAB-ACCREF(14),
134 FAILTAB-MSG.
ENDLOOP.
ENDIF.
SKIP 3.
WRITE:/1 'Transactions Posted'(023).
WRITE:/1 SY-ULINE(23).
SKIP.
WRITE:/119 TEXT-020.
WRITE:/1 'Trx Number'(011),
15 'Payment Dt'(012),
26 'Type'(013),
31 'Account'(014),
45 'Pay To'(015),
75 'Curr'(016),
89 'Amount'(017),
100 'BArea'(018),
106 'Bank A/c'(019),
119 'Ref/Bank Ref'(021),
140 'Document No'.
WRITE:/ SY-ULINE(170).
LOOP AT ITAB WHERE FILE = CNT_TAB-FILE.
WRITE:/1 ITAB-TRANS,
*** M3
*
15 ITAB-BUDAT,
15 ITAB-ACCDATE,
*** M3
26 ITAB-BLART,
31 ITAB-NEWKO,
45 ITAB-BKTXT,
75 ITAB-WAERS,
80 ITAB-AMOUNT,
100 ITAB-GSBER,
106 ITAB-ACCOUNT,
119 ITAB-ACCREF,
140 ITAB-BELNR.

ENDLOOP.
ENDLOOP.
SKIP 2.
WRITE:/ 'END OF REPORT'.
PERFORM GET_OUTPUT_LIST.
ENDFORM.

"<< Insert M1
" OUTPUT

*&---------------------------------------------------------------------*
*&
Form PAGE_HEADER
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM PAGE_HEADER.
DATA PAGENO TYPE I.
PAGENO = SY-PAGNO.
WRITE:/ 'SEP'(004), 120 SY-REPID, 129 '/', 130 SY-UNAME.
WRITE:/ 'EGO Advance Payment Interface'(005),
120 SY-DATUM ,
132 'Page: ', PAGENO LEFT-JUSTIFIED.
WRITE:/ SY-ULINE(170).
SKIP.
ENDFORM.

" PAGE_HEADER

*&---------------------------------------------------------------------*
*&
Form MOVE_FILE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM MOVE_FILE USING VALUE(FNAME).
DATA: PFILE LIKE RLGRAP-FILENAME,
IFILE LIKE RLGRAP-FILENAME.
CLEAR: PFILE, IFILE.
CHECK P_TEST IS INITIAL.
CONCATENATE P_PFILE FNAME INTO PFILE.
CONDENSE PFILE.
CONCATENATE P_IFILE FNAME INTO IFILE.
CONDENSE IFILE.
OPEN DATASET IFILE IN TEXT MODE.
OPEN DATASET PFILE FOR OUTPUT IN TEXT MODE.
IF SY-SUBRC NE 0.
MESSAGE E035 WITH PFILE.
EXIT.
ENDIF.
DO.
CLEAR RECORD.
READ DATASET IFILE INTO RECORD.
IF SY-SUBRC EQ 0.
CONCATENATE RECORD ENTER INTO RECORD.
TRANSFER RECORD TO PFILE.
IF SY-SUBRC NE 0.
MESSAGE E036 WITH PFILE.
EXIT.
ENDIF.
ELSE.
EXIT.

ENDIF.
ENDDO.
CLOSE DATASET PFILE.
CLOSE DATASET IFILE.
DELETE DATASET IFILE.
*Log To Table
CLEAR ZZ609.
ZZ609-BUKRS =
ZZ609-REPID =
ZZ609-FILE =
ZZ609-PDATE =
ZZ609-PTIME =
ZZ609-UNAME =
INSERT ZZ609.
ENDFORM.

P_BUKRS.
SY-REPID.
FNAME.
SY-DATUM.
SY-UZEIT.
SY-UNAME.

"Insert M2

" MOVE_FILE

*&---------------------------------------------------------------------*
*&
Form ERR_REC
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM ERR_REC USING
P_CNT_TAB LIKE CNT_TAB
P_ITAB
LIKE ITAB
VALUE(TEXT).
MOVE-CORRESPONDING P_ITAB TO ERRTAB.
MOVE TEXT TO ERRTAB-MSG.
APPEND ERRTAB. CLEAR ERRTAB.
P_CNT_TAB-ERR_RECS = P_CNT_TAB-ERR_RECS + 1.
ENDFORM.

" ERR_REC

*&---------------------------------------------------------------------*
*&
Form OUTPUT_TO_SERVER
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM OUTPUT_TO_SERVER.
DATA ABAP_LIST LIKE ABAPLIST OCCURS 1.
DATA: BEGIN OF LISTTAB OCCURS 1,
LINE(1023),
END OF LISTTAB.
CHECK P_TEST = ''.
"XXX
IF SY-BATCH NE 'X'.
"<< Insert M1
CLEAR FLISTTAB. REFRESH FLISTTAB.
"<< Insert M1
CALL FUNCTION 'LIST_TO_ASCI'
EXPORTING
LIST_INDEX
= SY-LSIND
TABLES
LISTASCI
= FLISTTAB
LISTOBJECT
= ABAP_LIST
EXCEPTIONS
EMPTY_LIST
= 1
LIST_INDEX_INVALID = 2
OTHERS
= 3.
ENDIF.
"<< Insert M1
CONCATENATE P_RFILE SY-REPID '-' SY-DATUM '-' SY-UZEIT INTO P_RFILE.

CONDENSE P_RFILE.
OPEN DATASET P_RFILE FOR OUTPUT IN TEXT MODE.
IF SY-SUBRC NE 0.
MESSAGE E035 WITH P_RFILE.
EXIT.
ENDIF.
LOOP AT FLISTTAB.
CONCATENATE FLISTTAB ENTER INTO FLISTTAB.
TRANSFER FLISTTAB TO P_RFILE.
IF SY-SUBRC NE 0.
MESSAGE E036 WITH P_RFILE.
EXIT.
ENDIF.
ENDLOOP.
CLOSE DATASET P_RFILE.
ENDFORM.

" OUTPUT_TO_SERVER

* << Start insert M1


*&---------------------------------------------------------------------*
*&
Form GET_OUTPUT_LIST
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM GET_OUTPUT_LIST.
DATA : ABAP_LIST LIKE ABAPLIST OCCURS 0.
DATA : BEGIN OF LISTTAB OCCURS 0,
LINE(1023),
END OF LISTTAB.
DATA : LINE_CNT TYPE I.
CHECK SY-BATCH = 'X'.
CALL FUNCTION 'LIST_TO_ASCI'
EXPORTING
LIST_INDEX
TABLES
LISTASCI
LISTOBJECT
EXCEPTIONS
EMPTY_LIST
LIST_INDEX_INVALID
OTHERS

= SY-LSIND
= LISTTAB
= ABAP_LIST
= 1
= 2
= 3.

APPEND LINES OF LISTTAB TO FLISTTAB.


DESCRIBE TABLE LISTTAB LINES LINE_CNT.
LINE_CNT = SY-LINCT - LINE_CNT.
DO LINE_CNT TIMES.
APPEND INITIAL LINE TO FLISTTAB.
ENDDO.
ENDFORM.
* << End insert

" GET_OUTPUT_LIST
M1

Vous aimerez peut-être aussi