Bapi Acc Document Post With Split
Bapi Acc Document Post With Split
*&
*& DATA DECLARATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& I N T E R N A L T A B L E S
*&---------------------------------------------------------------------*
DATA: text08(255) type c.
DATA: MESS(60).
DATA: wa_string(255) type c.
class cl_abap_char_utilities definition load.
DATA :
DATA: IT_SKB1 TYPE HASHED TABLE OF TY_SKB1 WITH UNIQUE KEY BUKRS SAKNR WITH HEADER
LINE.
DATA: IT_SKA1 TYPE HASHED TABLE OF TY_SKA1 WITH UNIQUE KEY KTOPL SAKNR WITH HEADER
LINE.
*form file.
*
*
*
*CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
* EXPORTING
* DIRECTORY = '/usr/sap/'
* FILEMASK = ' '
* IMPORTING
* SERVERFILE = file1
* EXCEPTIONS
* CANCELED_BY_USER = 1
* OTHERS = 2
* .
*IF SY-SUBRC = 0.
*
*
*MESSAGE 'SUCCESSFUL' TYPE 'I'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.
*
*endform.
START-OF-SELECTION.
PERFORM UPLOAD.
FILE_COUNT1 = FILE_COUNT + 1.
* IF FILE_COUNT1 = FILE_NO.
PERFORM VALIDATIONS.
* for pre-document posting check
PERFORM FB01_CHECK.
* IT_FB01[] = INT_FB01[].
CLEAR V_TALLY.
CLEAR V_RESULT.
IF FLAG1 = 0.
*checking if debit is equal to credit.
* LOOP AT IT_FB01.
*
* IF IT_FB01-DC = '40'.
* AMT = IT_FB01-WRBTR * 1.
* V_DEBIT1 = V_DEBIT1 + AMT.
* ELSE.
** AMT = IT_FB01-WRBTR * 1.
* AMT = IT_FB01-WRBTR * -1.
* V_CREDIT1 = V_CREDIT1 + AMT.
* ENDIF.
*
* ENDLOOP.
* CLEAR AMT.
* AMT = V_DEBIT1 + V_CREDIT1.
* V_CREDIT1 = V_CREDIT1 * -1.
** IF AMT = 0.
* IF V_DEBIT1 = V_CREDIT1.
ELSE.
LOOP AT IT_RETURN_E.
FORMAT COLOR 6 INVERSE.
WRITE: / IT_RETURN_E-MSG_TYP,
IT_RETURN_E-MSG_DESC.
EXIT.
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM UPLOAD.
IF SY-SUBRC <> 0.
WRITE : / 'Error in Opening the file sy-subrc=',sy-subrc.
ENDIF.
LOOP AT IT_FILE_LIST.
ENDFORM.
FORM DATASET.
data : len1 type i.
OPEN DATASET V_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
DO.
READ DATASET V_FILE INTO WA_ITAB.
IF SY-SUBRC EQ 0.
APPEND WA_ITAB TO ITAB.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET V_FILE.
LOOP AT ITAB.
clear text1.
IF SY-TABIX EQ 1.
SPLIT ITAB AT cl_abap_char_utilities=>horizontal_tab INTO COMPANYCODE FNO
text1.
FILE_NO = FNO.
ELSE.
SPLIT ITAB AT cl_abap_char_utilities=>horizontal_tab INTO :
int_fb01-xblnr
int_fb01-bktxt
date_temp1
date_temp2
int_fb01-waers
* wa_demo-kursf
* wa_demo-wwert
int_fb01-newbs
int_fb01-newko
* wa_demo-kostl
* wa_demo-ebeln
* wa_demo-v_value_date
int_fb01-wrbtr
* wa_demo-dmbtr
* wa_demo-newum
* wa_demo-aufnr
* wa_demo-zuonr
int_fb01-sgtxt
* wa_demo-zlsch
* wa_demo-zterm
* wa_demo-gsber
cc_pc.
REPLACE ALL OCCURRENCES OF '.' IN date_temp1 WITH SPACE.
CONDENSE date_temp1 NO-GAPS.
MOVE date_temp1 TO IT_FB01-BLDAT.
IF cc_pc+0(1) = '5' .
MOVE cc_pc TO IT_FB01-KOSTL.
ELSEIF cc_pc+0(1) = '4'.
MOVE cc_pc TO IT_FB01-PRCTR.
ELSE.
rowno = sy-tabix - 1.
CONCATENATE 'ERROR :Line Item: ' rowno ' CC/PC does not exists :' cc_pc
into IT_ERR-ERTXT.
APPEND IT_ERR.
CLEAR IT_ERR.
clear rowno.
endif.
APPEND IT_ERR.
CLEAR IT_ERR.
clear rowno.
ENDIF.
ENDIF.
ENDIF.
APPEND INT_FB01.
CLEAR INT_FB01.
CLEAR : date_temp1 ,date_temp2.
CLEAR cc_pc.
ENDLOOP.
IT_FB01[] = INT_FB01[].
ENDFORM. "DATASET
*&---------------------------------------------------------------------*
*& Form FB01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FB01 .
LOOP AT IT_FB01.
IF COMPANYCODE IS NOT INITIAL.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD COMPANYCODE
ID 'ACTVT' FIELD '01'.
IF SY-SUBRC <> 0.
CONCATENATE 'YOU ARE NOT AUTHORIZED TO UPLOAD DATA OF COMPANY CODE'
COMPANYCODE
INTO MSG
SEPARATED BY SPACE.
MESSAGE MSG TYPE 'E'.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT IT_FB01.
V_COUNT1 = SY-TABIX.
PERFORM FILL_TABLES.
V_LINES = V_LINES - 1.
IF V_LINES EQ 0.
IF V_DEBIT <> V_CREDIT.
PERFORM DOC_SPLIT_POST.
ELSEIF V_DEBIT NE 0 AND V_CREDIT NE 0.
PERFORM BAPI_ACC_POST_DOCUMENT.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. "FB01
*&---------------------------------------------------------------------*
*& Form FILL_TABLES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_TABLES .
* PERFORM FILL_HEADER.
IF SY-TABIX EQ 1.
PERFORM FILL_HEADER.
ENDIF.
PERFORM FILL_ACCOUNTGL.
PERFORM FILL_CURRENCYAMOUNT.
FORM FILL_HEADER .
IF V_LENGTH < 8.
CONCATENATE '0' IT_FB01-BLDAT INTO IT_FB01-BLDAT.
ENDIF.
CLEAR V_LENGTH.
IF V_LENGTH < 8.
CONCATENATE '0' IT_FB01-BUDAT INTO IT_FB01-BUDAT.
ENDIF.
DOC_HEADER-BUS_ACT = 'RFBU'.
DOC_HEADER-USERNAME = SY-UNAME.
DOC_HEADER-REF_DOC_NO = IT_FB01-XBLNR.
DOC_HEADER-HEADER_TXT = IT_FB01-BKTXT.
DOC_HEADER-COMP_CODE = COMPANYCODE."IT_FB01-BUKRS.
CONCATENATE IT_FB01-BLDAT+4(4) IT_FB01-BLDAT+2(2) IT_FB01-BLDAT(2) INTO
DOC_HEADER-DOC_DATE.
CONCATENATE IT_FB01-BUDAT+4(4) IT_FB01-BUDAT+2(2) IT_FB01-BUDAT(2) INTO
DOC_HEADER-PSTNG_DATE.
DOC_HEADER-DOC_TYPE = 'SA'."IT_FB01-BLART.
ENDIF.
ENDFORM. "FILL_HEADER
*&---------------------------------------------------------------------*
*& Form FILL_CURRENCYAMOUNT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_CURRENCYAMOUNT .
IT_CURRENCYAMT-ITEMNO_ACC = V_COUNT.
IT_CURRENCYAMT-CURRENCY = IT_FB01-WAERS.
IF IT_FB01-newbs = '40'.
IT_CURRENCYAMT-AMT_DOCCUR = IT_FB01-WRBTR * 1.
V_DEBIT = V_DEBIT + IT_FB01-WRBTR.
ELSE.
IT_CURRENCYAMT-AMT_DOCCUR = IT_FB01-WRBTR * -1.
V_CREDIT = V_CREDIT + IT_FB01-WRBTR.
ENDIF.
IT_CURRENCYAMT-AMT_BASE = IT_FB01-WRBTR.
APPEND IT_CURRENCYAMT.
V_TALLY = V_TALLY + IT_CURRENCYAMT-AMT_DOCCUR.
FORM FILL_ACCOUNTGL .
ELSE.
FORMAT COLOR 6 INVERSE.
WRITE:/ 'GL ACCOUNT IS NOT AVAILABLE'.
FORMAT COLOR 2 INVERSE.
EXIT.
ENDIF.
IT_ACCOUNTGL-DOC_TYPE = 'SA'."IT_FB01-BLART.
else.
IT_ACCOUNTGL-COSTCENTER = IT_FB01-PRCTR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = IT_ACCOUNTGL-COSTCENTER
IMPORTING
OUTPUT = IT_ACCOUNTGL-COSTCENTER.
endif.
*it_accountgl-pstng_date = it_fb01-budat.
* IT_ACCOUNTGL-TAX_CODE = IT_FB01-MWSKZ.
* IT_ACCOUNTGL-TAXJURCODE = IT_FB01-TXJCD.
* IT_ACCOUNTGL-ALLOC_NMBR = IT_FB01-ZUONR.
IT_ACCOUNTGL-ITEM_TEXT = IT_FB01-SGTXT.
* IT_ACCOUNTGL-ORDERID = IT_FB01-aufnr.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* INPUT = IT_ACCOUNTGL-ORDERID
* IMPORTING
* OUTPUT = IT_ACCOUNTGL-ORDERID.
.
*IT_ACCOUNTGL-COMP_CODE = companycode.
* IT_ACCOUNTGL-ORDERID = IT_FB01-AUFNR.
APPEND IT_ACCOUNTGL.
CLEAR IT_ACCOUNTGL.
*&---------------------------------------------------------------------*
*& Form BAPI_ACC_POST_DOCUMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BAPI_ACC_POST_DOCUMENT .
* CHECKING WHETHER THE DOCUMENT IS SUITABLE FOR POSTING
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = DOC_HEADER
TABLES
ACCOUNTGL = IT_ACCOUNTGL
CURRENCYAMOUNT = IT_CURRENCYAMT
RETURN = IT_RETURN.
IF IT_RETURN-TYPE = 'E'.
FORMAT COLOR 6 INVERSE.
WRITE: / 'FOR REFERENCE NO : ', DOC_HEADER-REF_DOC_NO,
IT_RETURN-TYPE,
IT_RETURN-ID ,
IT_RETURN-NUMBER,
IT_RETURN-MESSAGE.
perform file_trans.
else.
CLEAR V_COUNT.
CLEAR IT_ACCOUNTGL.
CLEAR IT_CURRENCYAMT.
REFRESH IT_ACCOUNTGL.
REFRESH IT_CURRENCYAMT.
ENDFORM. "BAPI_ACC_POST_DOCUMENT
*&---------------------------------------------------------------------*
*& Form DOC_SPLIT_POST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DOC_SPLIT_POST .
V_COUNT = 1 + V_COUNT.
IT_ACCOUNTGL-ITEMNO_ACC = V_COUNT.
* IT_ACCOUNTGL-GL_ACCOUNT = '0000999900'."IT_FB01-NEWKO.
IT_ACCOUNTGL-GL_ACCOUNT = '0000165028'.
IT_ACCOUNTGL-DOC_TYPE = 'SA'.
IT_ACCOUNTGL-PROFIT_CTR = '0004350004'."IT_FB01-PRCTR.
APPEND IT_ACCOUNTGL.
IT_CURRENCYAMT-ITEMNO_ACC = V_COUNT.
IT_CURRENCYAMT-CURRENCY = 'INR'.
IT_CURRENCYAMT-AMT_DOCCUR = V_DIFF.
APPEND IT_CURRENCYAMT.
ClEAR IT_CURRENCYAMT.
V_RESULT = V_TALLY + V_DIFF.
IF V_RESULT = 0.
DELETE IT_FB01 FROM 1 TO 500.
PERFORM BAPI_ACC_POST_DOCUMENT_SPLIT.
ENDIF.
CLEAR SY-TABIX.
CLEAR V_DIFF.
ENDFORM. "DOC_SPLIT_POST
*&---------------------------------------------------------------------*
*& Form BAPI_ACC_POST_DOCUMENT_SPLIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BAPI_ACC_POST_DOCUMENT_SPLIT .
LOOP AT IT_RETURN.
IF IT_RETURN-TYPE = 'E'.
FORMAT COLOR 6 INVERSE.
WRITE: / 'FOR REFERENCE NO : ', DOC_HEADER-REF_DOC_NO,
IT_RETURN-TYPE,
IT_RETURN-ID ,
IT_RETURN-NUMBER,
IT_RETURN-MESSAGE.
FORMAT COLOR INVERSE OFF.
else.
* ELSE.
SKIP 2.
CLEAR V_TALLY.
CLEAR V_COUNT.
CLEAR V_KOSTL.
CLEAR V_DEBIT.
CLEAR V_CREDIT.
CLEAR IT_ACCOUNTGL.
CLEAR IT_CURRENCYAMT.
REFRESH IT_ACCOUNTGL.
REFRESH IT_CURRENCYAMT.
ENDFORM. " BAPI_ACC_POST_DOCUMENT_SPLIT
*&---------------------------------------------------------------------*
*& FORM BAPI_ACC_DOCUMENT_CHECK
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM BAPI_ACC_DOCUMENT_CHECK .
IF V_ERROR = 1.
FLAG = 1.
ENDIF.
CLEAR V_COUNT.
CLEAR V_KOSTL.
CLEAR V_DEBIT.
CLEAR V_CREDIT.
CLEAR IT_ACCOUNTGL.
CLEAR IT_CURRENCYAMT.
REFRESH IT_ACCOUNTGL.
REFRESH IT_CURRENCYAMT.
ENDFORM. " BAPI_ACC_DOCUMENT_CHECK
*&---------------------------------------------------------------------*
*& FORM FB01_CHECK
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM FB01_CHECK .
DESCRIBE TABLE IT_FB01 LINES V_LINES.
LOOP AT IT_FB01.
V_COUNT1 = SY-TABIX.
* IF FLAG = 1.
* FLAG1 = 1.
* EXIT.
* ENDIF.
PERFORM FILL_TABLES.
V_LINES = V_LINES - 1.
IF V_LINES EQ 0.
IF V_DEBIT <> V_CREDIT.
PERFORM DOC_SPLIT.
ELSEIF V_DEBIT NE 0 AND V_CREDIT NE 0.
PERFORM BAPI_ACC_DOCUMENT_CHECK.
ENDIF.
ENDIF.
ENDLOOP.
IT_ACCOUNTGL-ITEMNO_ACC = V_COUNT.
* IT_ACCOUNTGL-GL_ACCOUNT = '0000165028'."IT_FB01-NEWKO.
IT_ACCOUNTGL-GL_ACCOUNT = '0000165028'."IT_FB01-NEWKO.
IT_ACCOUNTGL-DOC_TYPE = 'SA'."'ZA'.
IT_ACCOUNTGL-PROFIT_CTR = '0004350004'."IT_FB01-PRCTR.
APPEND IT_ACCOUNTGL.
IT_CURRENCYAMT-ITEMNO_ACC = V_COUNT.
IT_CURRENCYAMT-CURRENCY = 'INR'.
IT_CURRENCYAMT-AMT_DOCCUR = V_DIFF.
APPEND IT_CURRENCYAMT.
CLEAR IT_CURRENCYAMT.
PERFORM BAPI_ACC_DOCUMENT_CHECK.
CLEAR SY-TABIX.
CLEAR V_DIFF.
ENDIF.
LOOP AT IT_FB01.
TABIX1 = SY-TABIX.
*Checking for Posting-Key Validation
IF IT_FB01-NEWBS <> '40' AND IT_FB01-NEWBS <> '50'.
CONCATENATE 'LINE ITEM ' TABIX1 'POSTING KEY' IT_FB01-NEWBS 'INVALID POSTING
KEY' INTO IT_ERR-ERTXT.
APPEND IT_ERR.
CLEAR IT_ERR.
ENDIF.
ENDIF.
CLEAR IT_CC.
IF IT_FB01-KOSTL IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = IT_FB01-KOSTL
IMPORTING
OUTPUT = IT_FB01-KOSTL.
IF SY-SUBRC <> 0.
CONCATENATE 'LINE ITEM :' TABIX1 'CC-' IT_FB01-KOSTL ' INVALID CC' INTO
IT_ERR-ERTXT.
APPEND IT_ERR.
CLEAR IT_ERR.
ELSEIF IT_CC-BKZKP NE SPACE.
CONCATENATE 'LINE ITEM :' TABIX1 'CC-' IT_FB01-KOSTL '-COSTCENTER BLOCKED
FOR POSTING' INTO IT_ERR-ERTXT.
APPEND IT_ERR.
CLEAR IT_ERR.
* ENDIF.
ENDIF.
ENDIF.
CLEAR IT_PC.
IF IT_FB01-PRCTR IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = IT_FB01-PRCTR
IMPORTING
OUTPUT = IT_FB01-PRCTR.
SELECT BUKRS PRCTR FROM CEPC INTO TABLE IT_PC
WHERE PRCTR = IT_FB01-PRCTR. "AND BUKRS = COMPANYCODE
IF SY-SUBRC <> 0.
CONCATENATE 'LINE ITEM :' TABIX1 'PC-' IT_FB01-PRCTR ' INVALID PC' INTO
IT_ERR-ERTXT.
APPEND IT_ERR.
CLEAR IT_ERR.
** ELSEIF IT_PC-BKZKP NE SPACE.
** CONCATENATE 'LINE ITEM :' TABIX1 'PC-' IT_FB01-PRCTR '-PROFITCENTER
BLOCKED FOR POSTING' INTO IT_ERR-ERTXT.
** APPEND IT_ERR.
** CLEAR IT_ERR.
* ENDIF.
ENDIF.
ENDIF.
IF IT_FB01-NEWBS = '40'.
AMT = IT_FB01-WRBTR * 1.
V_DEBIT1 = V_DEBIT1 + AMT.
ELSE.
* AMT = IT_FB01-WRBTR * 1.
ENDLOOP.
CLEAR AMT.
AMT = V_DEBIT1 + V_CREDIT1.
V_CREDIT1 = V_CREDIT1 * -1.
IF V_DEBIT1 <> V_CREDIT1.
CONCATENATE 'ERROR : DEBIT AMOUNT IS NOT EQUAL TO CREDIT AMOUNT WITH DIFFERENCE
: ' AMT INTO IT_ERR1-ERTXT.
* IT_ERR1-ERTXT = 'ERROR : DEBIT AMOUNT IS NOT EQUAL TO CREDIT AMOUNT WITH
DIFFERENCE : ', amt.
APPEND IT_ERR1.
CLEAR IT_ERR1.
ENDIF.
if sy-subrc = 0.
*message 'File transfered succesfully from work to archive'(002) type 'S'.
loop at itab.
TRANSFER Itab TO W_FILE2.
endloop.
Else.
WRITE:/'Cannot open -> usr/sap/Leasewave/archive/ error = ', sy-subrc.
endif.
close dataset W_FILE2.
* TRANSFER ITAB2 TO PATH1.
* CLOSE DATASET PATH1.
endform.