REPORT ZBASICPAY_CONTROL.
TYPE-POOLS SLIS.
TABLES:PERNR,RP50G,Q0008.
INFOTYPES:0008.
SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
PARAMETERS:P_FILE TYPE RLGRAP-FILENAME.
SELECTION-SCREEN:END OF BLOCK B1.
TYPES:BEGIN OF TY_PA30,
PERNR(30) TYPE C,
BEGDA(10) TYPE C,
ENDDA(10) TYPE C,
TRFAR(2) TYPE C,
TRFGB(2) TYPE C,
TRFGR(5) TYPE C,
LGART(5) TYPE C,
BETRG(6) TYPE C,
ANZHL(5) TYPE C,
END OF TY_PA30.
DATA: WA_PA30 TYPE TY_PA30,
IT_PA30 TYPE TABLE OF TY_PA30.
DATA:WA_BDCDATA TYPE BDCDATA,
IT_BDCDATA TYPE TABLE OF BDCDATA.
DATA:WA_BDCMSGCOLL TYPE BDCMSGCOLL,
IT_BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL.
DATA: N(2) TYPE N,
CNT(2) TYPE N,
FLD(20) TYPE C,
X(2) TYPE N,
COUNT TYPE I.
DATA: V_MSG TYPE STRING.
TYPES:BEGIN OF TY_ERROR,
RECORDS TYPE I,
MESSAGE(100) TYPE C,
END OF TY_ERROR.
DATA:WA_ERROR TYPE TY_ERROR,
IT_ERROR TYPE TABLE OF TY_ERROR.
DATA:WA_FCAT TYPE SLIS_FIELDCAT_ALV,
IT_FCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA:BEGIN OF WA_LGART,
LGA01(5) TYPE C,
END OF WA_LGART.
DATA:BEGIN OF WA_BETRG,
BET01(6) TYPE C,
END OF WA_BETRG.
DATA:BEGIN OF WA_ANZHL,
ANZ01(5) TYPE C,
END OF WA_ANZHL.
DATA:IT_LGART LIKE TABLE OF WA_LGART,
IT_BETRG LIKE TABLE OF WA_BETRG,
IT_ANZHL LIKE TABLE OF WA_ANZHL.
DATA: FNAM TYPE STRING.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM OPEN_FILE.
START-OF-SELECTION.
PERFORM UPLOAD_DATA.
PERFORM PROCESS_DATA.
PERFORM DISPLAY_ERRORS.
*&---------------------------------------------------------------------*
*& Form OPEN_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------- *
FORM OPEN_FILE .
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
CHANGING
FILE_NAME = P_FILE.
ENDFORM. " OPEN_FILE
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
FNAM = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = FNAM
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = IT_PA30.
ENDFORM. " UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
LOOP AT IT_PA30 INTO WA_PA30.
REFRESH :IT_BDCDATA,IT_LGART,IT_BETRG,IT_ANZHL.
SPLIT:WA_PA30-LGART AT ',' INTO TABLE IT_LGART,
WA_PA30-BETRG AT ',' INTO TABLE IT_BETRG,
WA_PA30-ANZHL AT ',' INTO TABLE IT_ANZHL.
perform bdc_dynpro using 'SAPMP50A' '1000'.
perform bdc_field using 'BDC_OKCODE' '=INS'.
perform bdc_field using 'RP50G-PERNR' WA_PA30-PERNR.
perform bdc_field using 'RP50G-TIMR6' 'X'.
perform bdc_field using 'BDC_CURSOR' 'RP50G-CHOIC'.
perform bdc_field using 'RP50G-CHOIC' '0008'.
perform bdc_dynpro using 'MP000800' '2000'.
perform bdc_field using 'BDC_OKCODE' 'UPD'.
perform bdc_field using 'P0008-BEGDA' WA_PA30-BEGDA.
perform bdc_field using 'P0008-ENDDA' WA_PA30-ENDDA.
perform bdc_field using 'P0008-TRFAR' WA_PA30-TRFAR.
perform bdc_field using 'P0008-TRFGB' WA_PA30-TRFGB.
perform bdc_field using 'P0008-TRFGR' WA_PA30-TRFGR.
perform bdc_field using 'P0008-ANCUR' 'EUR'.
perform bdc_field using 'Q0008-IBBEG' '14.11.2014'.
perform bdc_field using 'P0008-WAERS' 'EUR'.
LOOP AT IT_LGART INTO WA_LGART.
N = N + 1.
ENDLOOP.
CNT = 01.
X = 01.
perform bdc_dynpro using 'MP000800' '2000'.
DO N TIMES.
IF CNT > 5.
CNT = 01.
perform bdc_field using 'BDC_CURSOR' 'Q0008-LGART(01)'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
perform bdc_dynpro using 'MP000800' '2000'.
perform bdc_field using 'BDC_OKCODE' '=ENTR'.
ENDIF.
LOOP AT IT_LGART INTO WA_LGART FROM X TO X.
CONCATENATE 'Q0008-LGART( ' CNT ')' INTO FLD.
PERFORM BDC_FIELD USING FLD WA_LGART-LGA01.
ENDLOOP.
LOOP AT IT_BETRG INTO WA_BETRG FROM X TO X.
CONCATENATE 'Q0008-BETRG( ' CNT ')' INTO FLD.
PERFORM BDC_FIELD USING FLD WA_BETRG-BET01.
ENDLOOP.
LOOP AT IT_ANZHL INTO WA_ANZHL FROM X TO X.
CONCATENATE 'Q0008-ANZHL( ' CNT ')' INTO FLD.
PERFORM BDC_FIELD USING FLD WA_ANZHL-ANZ01.
ENDLOOP.
X = X + 1.
CNT = CNT + 1.
ENDDO.
CALL TRANSACTION 'PA30' USING IT_BDCDATA MODE 'A' UPDATE 'A' MESSAGES INTO IT_BDCMSGCOLL.
LOOP AT IT_BDCMSGCOLL INTO WA_BDCMSGCOLL.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = WA_BDCMSGCOLL-MSGID
LANG = SY-LANGU
NO = WA_BDCMSGCOLL-MSGNR
V1 = WA_BDCMSGCOLL-MSGV1
V2 = WA_BDCMSGCOLL-MSGV2
V3 = WA_BDCMSGCOLL-MSGV3
V4 = WA_BDCMSGCOLL-MSGV4
IMPORTING
MSG = V_MSG.
IF SY-SUBRC EQ 0.
COUNT = COUNT + 1.
WA_ERROR-RECORDS = COUNT.
WA_ERROR-MESSAGE = V_MSG.
APPEND WA_ERROR TO IT_ERROR.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_ERRORS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_ERRORS .
WA_FCAT-FIELDNAME = 'RECORDS'.
WA_FCAT-SELTEXT_M = 'S.NO'.
WA_FCAT-OUTPUTLEN = '5'.
APPEND WA_FCAT TO IT_FCAT.
WA_FCAT-FIELDNAME = 'MESSAGE'.
WA_FCAT-SELTEXT_M = 'STATUS'.
WA_FCAT-OUTPUTLEN = '100'.
APPEND WA_FCAT TO IT_FCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IT_FIELDCAT = IT_FCAT
TABLES
T_OUTTAB = IT_ERROR.
ENDFORM. " DISPLAY_ERRORS
FORM BDC_DYNPRO USING PROG SCREEN.
CLEAR WA_BDCDATA.
WA_BDCDATA-PROGRAM = PROG.
WA_BDCDATA-DYNPRO = SCREEN.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FIELD VALUE.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = FIELD.
WA_BDCDATA-FVAL = VALUE.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM.