cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

F-51 BDC

Akash35
Discoverer
0 Kudos
397

Solution for Creation of F-51 BDC

REPORT ZFIB_CUSTOMER_F51
       NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPE-POOLSTRUXS.

TYPESBEGIN 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.

TYPESBEGIN OF TY_ALV,
         SRNO  TYPE CHAR5,
         KUNNR TYPE RF05A-NEWKO,
         BELNR TYPE BKPF-BELNR,
         TEXT  TYPE CHAR10,
       END OF TY_ALV.

DATAIT_ALV  TYPE TABLE OF TY_ALV,
      IT_ALV1 TYPE TABLE OF TY_ALV,
      WA_ALV  TYPE TY_ALV.

DATAIT_BDC TYPE TABLE OF TY_BDC,
      WA_BDC TYPE TY_BDC.
DATABDCDATA    LIKE BDCDATA    OCCURS WITH HEADER LINE,
      IT_MESSAGE TYPE TABLE OF BDCMSGCOLL,
      WA_MESSAGE TYPE BDCMSGCOLL.

DATAIT_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.

DATALV_BLDAT TYPE CHAR10,
      LV_DATE  TYPE CHAR10,
      LV_BUDAT TYPE CHAR10.
DATAFIRST TYPE CHAR1.
DATATAB     TYPE SY-TABIX,
      W_INDEX TYPE SY-TABIX.
DATALV_AMOUNT  TYPE STRING,
      LV_AMOUNT1 TYPE STRING.

RANGES R_HKONT FOR RF05A-NEWKO.

DATALV_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.

DATACNT TYPE CHAR5.
DATALV_TEXT TYPE STRING.

SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
PARAMETERSP_FILE LIKE RLGRAP-FILENAME DEFAULT '',
            P_MODE LIKE CTU_PARAMS-DISMODE DEFAULT 'A'.
SELECTION-SCREENEND OF BLOCK B1.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72TEXT-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(72TEXT-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 = .
        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.

 

 

Accepted Solutions (0)

Answers (1)

Answers (1)

Akash35
Discoverer
0 Kudos

ok

Sandra_Rossi
Active Contributor
0 Kudos
After thinking, maybe a blog post is too much for uncommented code, so you may ask a question "batch input for F-51" and tell people to not answer because you are posting the solution, then post your own answer, and accept it.