on 2024 Oct 22 11:36 AM
Solution for Creation of F-51 BDC
REPORT ZFIB_CUSTOMER_F51
NO STANDARD PAGE HEADING LINE-SIZE 255.
TYPE-POOLS: TRUXS.
TYPES: BEGIN OF TY_BDC,
SRNO TYPE CHAR5,
BUKRS TYPE BKPF-BUKRS,
BLDAT TYPE BKPF-BLDAT,
BUDAT TYPE BKPF-BUDAT,
BLART TYPE BKPF-BLART,
WAERS TYPE BKPF-WAERS,
XBLNR TYPE BKPF-XBLNR,
BKTXT TYPE BKPF-BKTXT,
NEWBS TYPE RF05A-NEWBS,
NEWKO TYPE RF05A-NEWKO,
WRBTR TYPE BSEG-WRBTR,
ZUONR TYPE BSEG-ZUONR,
SGTXT TYPE BSEG-SGTXT,
BUPLA TYPE BSEG-BUPLA,
KOSTL TYPE COBL-KOSTL,
PRCTR TYPE COBL-PRCTR,
REF TYPE BKPF-XBLNR,
HEAD TYPE BKPF-BKTXT,
ASSIGN TYPE BSEG-ZUONR,
TEXT TYPE BSEG-SGTXT,
END OF TY_BDC.
TYPES: BEGIN OF TY_ALV,
SRNO TYPE CHAR5,
KUNNR TYPE RF05A-NEWKO,
BELNR TYPE BKPF-BELNR,
TEXT TYPE CHAR10,
END OF TY_ALV.
DATA: IT_ALV TYPE TABLE OF TY_ALV,
IT_ALV1 TYPE TABLE OF TY_ALV,
WA_ALV TYPE TY_ALV.
DATA: IT_BDC TYPE TABLE OF TY_BDC,
WA_BDC TYPE TY_BDC.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
IT_MESSAGE TYPE TABLE OF BDCMSGCOLL,
WA_MESSAGE TYPE BDCMSGCOLL.
DATA: IT_BDC_COPY TYPE TABLE OF TY_BDC,
IT_BDC_COPY1 TYPE TABLE OF TY_BDC,
WA_BDC_COPY TYPE TY_BDC,
WA_BDC1 TYPE TY_BDC.
DATA: LV_BLDAT TYPE CHAR10,
LV_DATE TYPE CHAR10,
LV_BUDAT TYPE CHAR10.
DATA: FIRST TYPE CHAR1.
DATA: TAB TYPE SY-TABIX,
W_INDEX TYPE SY-TABIX.
DATA: LV_AMOUNT TYPE STRING,
LV_AMOUNT1 TYPE STRING.
RANGES : R_HKONT FOR RF05A-NEWKO.
DATA: LV_OPT TYPE CTU_PARAMS.
DATA : I_RAW_DATA TYPE TRUXS_T_TEXT_DATA .
DATA : IT_FCAT1 TYPE STANDARD TABLE OF SLIS_FIELDCAT_ALV,
WA_FCAT1 TYPE SLIS_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA : LV_CNT TYPE I.
DATA: CNT TYPE CHAR5.
DATA: LV_TEXT TYPE STRING.
SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME DEFAULT '',
P_MODE LIKE CTU_PARAMS-DISMODE DEFAULT 'A'.
SELECTION-SCREEN: END OF BLOCK B1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72) TEXT-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72) TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72) TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72) TEXT-006.
SELECTION-SCREEN END OF LINE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = P_FILE.
START-OF-SELECTION.
PERFORM READ_FILE.
PERFORM BDC_DATA.
PERFORM DISPLAY_ALV.
FORM READ_FILE.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = 'X'
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = I_RAW_DATA
I_FILENAME = P_FILE
TABLES
I_TAB_CONVERTED_DATA = IT_BDC[]
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE 'No Data' TYPE 'E'.
ENDIF.
ENDFORM.
FORM BDC_DATA.
IT_BDC_COPY = IT_BDC.
SORT IT_BDC BY SRNO.
DELETE IT_BDC WHERE NEWBS NE '17'.
DELETE IT_BDC_COPY WHERE NEWBS EQ '17'.
IT_BDC_COPY1 = IT_BDC_COPY.
R_HKONT-SIGN = 'I'.
R_HKONT-OPTION = 'BT'.
R_HKONT-LOW = '568200'.
R_HKONT-HIGH = '568299'.
APPEND R_HKONT.
LOOP AT IT_BDC INTO WA_BDC.
REFRESH IT_BDC_COPY.
IT_BDC_COPY = IT_BDC_COPY1.
DELETE IT_BDC_COPY WHERE SRNO NE WA_BDC-SRNO.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0122'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
CONCATENATE WA_BDC-BLDAT+6(2) WA_BDC-BLDAT+4(2) WA_BDC-BLDAT+0(4)
INTO LV_BLDAT SEPARATED BY '.' .
PERFORM BDC_FIELD USING 'BKPF-BLDAT'
* WA_BDC-BLDAT.
LV_BLDAT.
PERFORM BDC_FIELD USING 'BKPF-BLART'
WA_BDC-BLART.
PERFORM BDC_FIELD USING 'BKPF-BUKRS'
WA_BDC-BUKRS.
CONCATENATE WA_BDC-BUDAT+6(2) WA_BDC-BUDAT+4(2) WA_BDC-BUDAT+0(4)
INTO LV_BUDAT SEPARATED BY '.' .
PERFORM BDC_FIELD USING 'BKPF-BUDAT'
* WA_BDC-BUDAT.
LV_BUDAT.
PERFORM BDC_FIELD USING 'BKPF-WAERS'
WA_BDC-WAERS.
PERFORM BDC_FIELD USING 'BKPF-XBLNR'
WA_BDC-XBLNR.
PERFORM BDC_FIELD USING 'BKPF-BKTXT'
WA_BDC-BKTXT.
PERFORM BDC_FIELD USING 'FS006-DOCID'
'*'.
PERFORM BDC_FIELD USING 'RF05A-NEWBS'
WA_BDC-NEWBS.
PERFORM BDC_FIELD USING 'RF05A-NEWKO'
WA_BDC-NEWKO.
FIRST = 'X'.
LOOP AT IT_BDC_COPY INTO WA_BDC_COPY.
TAB = SY-TABIX.
IF FIRST = 'X'.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0301'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
LV_AMOUNT = WA_BDC-WRBTR.
CONDENSE LV_AMOUNT.
PERFORM BDC_FIELD USING 'BSEG-WRBTR'
LV_AMOUNT.
PERFORM BDC_FIELD USING 'BSEG-MWSKZ'
'**'.
CONCATENATE SY-DATUM+6(2) SY-DATUM+4(2) SY-DATUM+0(4)
INTO LV_DATE SEPARATED BY '.' .
PERFORM BDC_FIELD USING 'BSEG-ZFBDT'
LV_DATE.
PERFORM BDC_FIELD USING 'BSEG-ZUONR'
WA_BDC-ZUONR.
PERFORM BDC_FIELD USING 'BSEG-SGTXT'
WA_BDC-SGTXT.
PERFORM BDC_FIELD USING 'RF05A-NEWBS'
WA_BDC_COPY-NEWBS.
PERFORM BDC_FIELD USING 'RF05A-NEWKO'
WA_BDC_COPY-NEWKO.
ENDIF.
CLEAR FIRST.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
IF W_INDEX = 3.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'BSEG-SGTXT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
ELSE.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
ENDIF.
LV_AMOUNT1 = WA_BDC_COPY-WRBTR.
CONDENSE LV_AMOUNT1.
PERFORM BDC_FIELD USING 'BSEG-WRBTR'
LV_AMOUNT1.
IF W_INDEX GE 2.
PERFORM BDC_FIELD USING 'BSEG-BUPLA'
WA_BDC_COPY-BUPLA.
ENDIF.
PERFORM BDC_FIELD USING 'BSEG-ZUONR'
WA_BDC_COPY-ZUONR.
PERFORM BDC_FIELD USING 'BSEG-SGTXT'
WA_BDC_COPY-SGTXT.
W_INDEX = TAB + 1.
READ TABLE IT_BDC_COPY INTO WA_BDC1 INDEX W_INDEX.
IF SY-SUBRC = 0 .
PERFORM BDC_FIELD USING 'RF05A-NEWBS'
WA_BDC1-NEWBS.
PERFORM BDC_FIELD USING 'RF05A-NEWKO'
WA_BDC1-NEWKO.
ENDIF.
PERFORM BDC_FIELD USING 'DKACB-FMORE'
'X'.
PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'COBL-PRCTR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTE'.
IF W_INDEX LT 3.
PERFORM BDC_FIELD USING 'COBL-KOSTL'
WA_BDC_COPY-KOSTL.
ENDIF.
PERFORM BDC_FIELD USING 'COBL-PRCTR'
WA_BDC_COPY-PRCTR.
ENDLOOP.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0700'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF05A-NEWBS'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
LV_OPT-DISMODE = P_MODE.
LV_OPT-UPDMODE = 'S'.
LV_OPT-DEFSIZE = 'X'.
LV_OPT-RACOMMIT = 'X'.
CALL TRANSACTION 'F-51' USING BDCDATA
OPTIONS FROM LV_OPT
MESSAGES INTO IT_MESSAGE.
LOOP AT IT_MESSAGE INTO WA_MESSAGE.
IF WA_MESSAGE-MSGTYP = 'S' AND WA_MESSAGE-MSGNR = '312'
AND WA_MESSAGE-MSGID = 'F5'.
WA_ALV-SRNO = WA_BDC-SRNO.
WA_ALV-KUNNR = WA_BDC-NEWKO.
WA_ALV-BELNR = WA_MESSAGE-MSGV1.
WA_ALV-TEXT = 'F-51'.
APPEND WA_ALV TO IT_ALV.
APPEND WA_ALV TO IT_ALV1.
CLEAR WA_ALV.
ENDIF.
ENDLOOP.
CLEAR: LV_DATE, LV_BUDAT,LV_BLDAT.
CLEAR: TAB, W_INDEX.
REFRESH: BDCDATA[], IT_MESSAGE[].
CLEAR: WA_MESSAGE.
ENDLOOP.
ENDFORM.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
FORM DISPLAY_ALV .
PERFORM FCAT USING 'SRNO' 'Sr.No.' '15' 'X' .
PERFORM FCAT USING 'KUNNR' 'Customer' '15' 'X' .
PERFORM FCAT USING 'BELNR' 'Document No.' '15' 'X' .
PERFORM FCAT USING 'TEXT' 'Transaction Code' '15' 'X' .
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
WA_LAYOUT-ZEBRA = 'X'.
DATA: GV_VARIANT TYPE DISVARIANT VALUE SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FCAT1
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = GV_VARIANT
TABLES
T_OUTTAB = IT_ALV1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE 'NO DATA' TYPE 'E'.
ENDIF.
ENDFORM.
FORM FCAT USING VALUE(P_001)
VALUE(P_002)
VALUE(P_003)
VALUE(P_004).
LV_CNT = LV_CNT + 1.
WA_FCAT1-COL_POS = LV_CNT .
WA_FCAT1-FIELDNAME = P_001.
WA_FCAT1-SELTEXT_L = P_002.
WA_FCAT1-OUTPUTLEN = P_003.
WA_FCAT1-KEY = P_004.
APPEND WA_FCAT1 TO IT_FCAT1 .
CLEAR WA_FCAT1.
ENDFORM.
Request clarification before answering.
ok
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
41 | |
15 | |
10 | |
9 | |
6 | |
5 | |
5 | |
4 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.