Using BDC for Multi-Line Item Recording

Table controls in BDC
when we want to insert multiple line items
Since the BDC programs can be used on different systems with different look and feel so the layout may vary from one system to another.
So while doing the recording there we have an option to select the default option as it will keep the recording according to standards
so it will use default setting if any other one uses the same transaction.

structure CTU_PARAMS

Below is the sample program:-

*&———————————————————————*
*& Report  ZTEST_PROGRAM_BDC
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

INCLUDE ztest_program_bdc_top_tcntrl.
*INCLUDE ztest_program_bdc_top_session.
*INCLUDE ZTEST_PROGRAM_BDC_TOP                   .    ” global Data

* INCLUDE ZTEST_PROGRAM_BDC_O01                   .  ” PBO-Modules
* INCLUDE ZTEST_PROGRAM_BDC_I01                   .  ” PAI-Modules
INCLUDE ztest_program_bdc_f01_tcntrl.
*INCLUDE ztest_program_bdc_f01_session.
* INCLUDE ZTEST_PROGRAM_BDC_F01                   .  ” FORM-Routines

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION ‘f4_filename’
    EXPORTING
      program_name  = syst–cprog
      dynpro_number = syst–dynnr
      field_name    = ‘p_file’
    IMPORTING
      file_name     = p_file.
  BREAK-POINT.
  PERFORM get_data.
  IF NOT it_header IS INITIAL.
    IF r_1 = ‘x’.
      PERFORM f_call_bdc1.
    ELSE.
*    PERFORM f_session_bdc2.
    ENDIF.
  ENDIF.
*  IF it_final IS NOT INITIAL.
*    IF r_1 = ‘X’.
*      PERFORM f_call_bdc.
*    ELSE.
*      PERFORM f_session_bdc.
*    ENDIF.
*
*  ENDIF.

*&———————————————————————*
*& Include ZTEST_PROGRAM_BDC_TOP                             Report ZTEST_PROGRAM_BDC
*&
*&———————————————————————*

  REPORT ztest_program_bdc.

  TYPE-POOLS : truxs.

  PARAMETERS : r_1 RADIOBUTTON GROUP rg1 DEFAULT ‘x’,
               r_2 RADIOBUTTON GROUP rg1.

  PARAMETERS : p_file TYPE rlgrap–filename.

  TYPES : BEGIN OF ty_final,
            lifnr TYPE lifnr,
            bukrs TYPE bukrs,
            banks TYPE banks,
            bankl TYPE bankl,
            bankn TYPE bankn,
          END OF ty_final.
*
*        BEGIN OF ty_header,
*        lifnr TYPE lifnr,
*        bukrs TYPE bukrs,
*        END OF ty_header,
*
*        BEGIN OF ty_item,
*        banks TYPE banks,
*        bankl TYPE bankl,
*        bankn TYPE bankn,
*        END OF ty_item.

  DATA  : it_final   TYPE TABLE OF ty_final,
          wa_final   TYPE          ty_final,

          it_header  TYPE TABLE OF ty_final,
          wa_header  TYPE          ty_final,

          it_item    TYPE TABLE OF ty_final,
          wa_item    TYPE          ty_final,
          it_raw     TYPE truxs_t_text_data,
          it_bdcdata TYPE TABLE OF bdcdata,
          wa_bdcdata TYPE          bdcdata,
          it_msg     TYPE TABLE OF bdcmsgcoll,
          wa_msg     TYPE          bdcmsgcoll,
          it_msg1    TYPE TABLE OF bdcmsgcoll,
          wa_msg1    TYPE          bdcmsgcoll,
          wa_option  TYPE        ctu_params.

*&———————————————————————*
*&  Include           ZTEST_PROGRAM_BDC_F01
*&———————————————————————*
*&———————————————————————*
*&      Form  GET_DATA
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM get_data .

  CALL FUNCTION ‘text_convert_xls_to_sap’
    EXPORTING
*     I_FIELD_SEPERATOR    =
*     I_LINE_HEADER        =
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = it_final
* EXCEPTIONS
*     CONVERSION_FAILED    = 1
*     OTHERS               = 2
    .
  IF sy–subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  IF NOT it_final IS INITIAL.
    SORT it_final BY lifnr bukrs.
    it_header[] = it_final[].
    it_item[] = it_final[].
    DELETE ADJACENT DUPLICATES FROM it_header COMPARING lifnr bukrs.
  ENDIF.

ENDFORM.                    ” get_data
*&———————————————————————*
*&      Form  F_CALL_BDC
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
*FORM f_call_bdc .

*    CALL TRANSACTION ‘XD01’ USING it_bdcdata MODE ‘A’ UPDATE ‘S’
*          MESSAGES INTO it_msg.
*
*    IF NOT it_msg IS INITIAL.
*      LOOP AT it_msg INTO wa_msg.
*        wa_msg1 = wa_msg.
*        CALL FUNCTION ‘MESSAGE_TEXT_BUILD’
*          EXPORTING
*            msgid                     = wa_msg-msgid
*            msgnr                     = wa_msg-msgnr
*           msgv1                     = wa_msg-msgv1
*           msgv2                     = wa_msg-msgv1
*           msgv3                     = wa_msg-msgv1
*           msgv4                     = wa_msg-msgv1
*   IMPORTING
*     MESSAGE_TEXT_OUTPUT       = wa_msg1-msgv1
*                  .
*
*        APPEND wa_msg1 to it_msg1.
*        CLEAR wa_msg1.
*      ENDLOOP.
*
*    ENDIF.
*
*
*  ENDLOOP.
*
*  if not it_msg1 is INITIAL.
*
*    CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
*     EXPORTING
**       I_INTERFACE_CHECK                 = ‘ ‘
**       I_BYPASSING_BUFFER                = ‘ ‘
**       I_BUFFER_ACTIVE                   = ‘ ‘
*        I_CALLBACK_PROGRAM                = sy-repid
**       I_CALLBACK_PF_STATUS_SET          = ‘ ‘
**       I_CALLBACK_USER_COMMAND           = ‘ ‘
**       I_CALLBACK_TOP_OF_PAGE            = ‘ ‘
**       I_CALLBACK_HTML_TOP_OF_PAGE       = ‘ ‘
**       I_CALLBACK_HTML_END_OF_LIST       = ‘ ‘
*        I_STRUCTURE_NAME                  = ‘BDCMSGCOLL’
**       I_BACKGROUND_ID                   = ‘ ‘
**       I_GRID_TITLE                      =
**       I_GRID_SETTINGS                   =
**       IS_LAYOUT                         =
**       IT_FIELDCAT                       =
**       IT_EXCLUDING                      =
**       IT_SPECIAL_GROUPS                 =
**       IT_SORT                           =
**       IT_FILTER                         =
**       IS_SEL_HIDE                       =
**       I_DEFAULT                         = ‘X’
**       I_SAVE                            = ‘ ‘
**       IS_VARIANT                        =
**       IT_EVENTS                         =
**       IT_EVENT_EXIT                     =
**       IS_PRINT                          =
**       IS_REPREP_ID                      =
**       I_SCREEN_START_COLUMN             = 0
**       I_SCREEN_START_LINE               = 0
**       I_SCREEN_END_COLUMN               = 0
**       I_SCREEN_END_LINE                 = 0
**       I_HTML_HEIGHT_TOP                 = 0
**       I_HTML_HEIGHT_END                 = 0
**       IT_ALV_GRAPHICS                   =
**       IT_HYPERLINK                      =
**       IT_ADD_FIELDCAT                   =
**       IT_EXCEPT_QINFO                   =
**       IR_SALV_FULLSCREEN_ADAPTER        =
**     IMPORTING
**       E_EXIT_CAUSED_BY_CALLER           =
**       ES_EXIT_CAUSED_BY_USER            =
*      TABLES
*        t_outtab                          = it_msg1
*     EXCEPTIONS
*       PROGRAM_ERROR                     = 1
*       OTHERS                            = 2
*              .
*    IF sy-subrc <> 0.
** Implement suitable error handling here
*    ENDIF.
*
*
*    ENDIF.
*ENDFORM.                    ” F_CALL_BDC
*
*
**&———————————————————————*
**&      Form  BDC_DYNPRO
**&———————————————————————*
**       text
**———————————————————————-*
**      –>PROGRAM    text
**      –>DYNPRO     text
**———————————————————————-*
*FORM bdc_dynpro USING program dynpro.
*  CLEAR wa_bdcdata.
*  wa_bdcdata-program  = program.
*  wa_bdcdata-dynpro   = dynpro.
*  wa_bdcdata-dynbegin = ‘X’.
*  APPEND wa_bdcdata TO it_bdcdata.
*ENDFORM.                    “BDC_DYNPRO
*
**———————————————————————-*
**        Insert field                                                  *
**———————————————————————-*
*FORM bdc_field USING fnam fval.
*  IF fval <> space.
*    CLEAR wa_bdcdata.
*    wa_bdcdata-fnam = fnam.
*    wa_bdcdata-fval = fval.
*    APPEND wa_bdcdata TO it_bdcdata.
*  ENDIF.
*ENDFORM.                    “BDC_FIELD
**&———————————————————————*
**&      Form  F_SESSION_BDC
**&———————————————————————*
**       text
**———————————————————————-*
**  –>  p1        text
**  <–  p2        text
**———————————————————————-*
*FORM f_session_bdc .
*
*CALL FUNCTION ‘BDC_OPEN_GROUP’
* EXPORTING
**   CLIENT                    = SY-MANDT
**   DEST                      = FILLER8
*    GROUP                     = ‘SHIV65’
**   HOLDDATE                  = FILLER8
*     KEEP                      = ‘X’
*     USER                      = sy-uname
**   RECORD                    = FILLER1
**   PROG                      = SY-CPROG
**   DCPFM                     = ‘%’
**   DATFM                     = ‘%’
** IMPORTING
**   QID                       =
** EXCEPTIONS
**   CLIENT_INVALID            = 1
**   DESTINATION_INVALID       = 2
**   GROUP_INVALID             = 3
**   GROUP_IS_LOCKED           = 4
**   HOLDDATE_INVALID          = 5
**   INTERNAL_ERROR            = 6
**   QUEUE_ERROR               = 7
**   RUNNING                   = 8
**   SYSTEM_LOCK_ERROR         = 9
**   USER_INVALID              = 10
**   OTHERS                    = 11
*          .
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.
*
*LOOP AT it_final INTO wa_final.
*    refresh it_bdcdata.
*    PERFORM bdc_dynpro      USING ‘SAPMF02D’ ‘0100’.
*    PERFORM bdc_field       USING ‘BDC_CURSOR’
*                                  ‘RF02D-KTOKD’.
*    PERFORM bdc_field       USING ‘BDC_OKCODE’
*                                  ‘/00’.
*    PERFORM bdc_field       USING ‘RF02D-KUNNR’
*                                  wa_final-kunnr.”‘1097’.
*    PERFORM bdc_field       USING ‘RF02D-BUKRS’
*                                  wa_final-bukrs.”‘1000’.
*    PERFORM bdc_field       USING ‘RF02D-KTOKD’
*                                  wa_final-ktokd.”‘Y000’.
*    PERFORM bdc_dynpro      USING ‘SAPMF02D’ ‘0110’.
*    PERFORM bdc_field       USING ‘BDC_CURSOR’
*                                  wa_final-spras.”‘KNA1-SPRAS’.
*    PERFORM bdc_field       USING ‘BDC_OKCODE’
*                                  ‘/00’.
*    PERFORM bdc_field       USING ‘KNA1-ANRED’
*                                  wa_final-anred.”‘Mr.’.
*    PERFORM bdc_field       USING ‘KNA1-NAME1’
*                                  wa_final-name1.”‘Shivendu’.
*    PERFORM bdc_field       USING ‘KNA1-STRAS’
*                                  wa_final-stras.”‘Kaikondrahalli’.
*    PERFORM bdc_field       USING ‘KNA1-ORT01’
*                                  wa_final-ort01.”‘bang’.
*    PERFORM bdc_field       USING ‘KNA1-PSTLZ’
*                                  wa_final-pstlz.           “‘560035’.
*    PERFORM bdc_field       USING ‘KNA1-LAND1’
*                                  wa_final-land1.”‘IN’.
*    PERFORM bdc_field       USING ‘KNA1-SPRAS’
*                                  wa_final-spras.”‘EN’.
*    PERFORM bdc_dynpro      USING ‘SAPMF02D’ ‘0120’.
*    PERFORM bdc_field       USING ‘BDC_CURSOR’
*                                  ‘KNA1-LIFNR’.
*    PERFORM bdc_field       USING ‘BDC_OKCODE’
*                                  ‘=UPDA’.
*
*   CALL FUNCTION ‘BDC_INSERT’
*    EXPORTING
*      TCODE                  = ‘XD01’
**      POST_LOCAL             = NOVBLOCAL
**      PRINTING               = NOPRINT
**      SIMUBATCH              = ‘ ‘
**      CTUPARAMS              = ‘ ‘
*     TABLES
*       dynprotab              = it_bdcdata
**    EXCEPTIONS
**      INTERNAL_ERROR         = 1
**      NOT_OPEN               = 2
**      QUEUE_ERROR            = 3
**      TCODE_INVALID          = 4
**      PRINTING_INVALID       = 5
**      POSTING_INVALID        = 6
**      OTHERS                 = 7
*             .
*   IF sy-subrc <> 0.
** Implement suitable error handling here
*   ENDIF.
*
*   ENDLOOP.
*
*   CALL FUNCTION ‘BDC_CLOSE_GROUP’
*    EXCEPTIONS
*      NOT_OPEN          = 1
*      QUEUE_ERROR       = 2
*      OTHERS            = 3
*             .
*   IF sy-subrc <> 0.
** Implement suitable error handling here
*   ENDIF.
*
*
*ENDFORM.                    ” F_SESSION_BDC
*&———————————————————————*
*&      Form  F_CALL_BDC1
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form f_call_bdc1 .
wa_option–updmode = ‘s’.
wa_option–defsize = ‘x’.
wa_option–dismode = ‘a’.
*  REFRESH it_bdcdata[].
*  CLEAR wa_bdcdata.
LOOP AT it_header INTO wa_header.
  REFRESH it_bdcdata[].
  PERFORM bdc_dynpro      USING ‘sapmf02k’ ‘0101’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘rf02k-d0130’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘/00’.
  PERFORM bdc_field       USING ‘rf02k-lifnr’
  wa_header–lifnr.          “‘201001’.
  PERFORM bdc_field       USING ‘rf02k-bukrs’
  wa_header–bukrs.“‘111a’.
  PERFORM bdc_field       USING ‘rf02k-d0130’
  ‘x’.
  PERFORM f_item.

  CALL TRANSACTION ‘xd02’ USING it_bdcdata “mode ‘n’ “update ‘s’
  OPTIONS FROM wa_option
  MESSAGES INTO it_msg.

  IF NOT it_msg IS INITIAL.
    LOOP AT it_msg INTO wa_msg.
      wa_msg1 = wa_msg.
      CALL FUNCTION ‘message_text_build’
        EXPORTING
          msgid               = wa_msg–msgid
          msgnr               = wa_msg–msgnr
          msgv1               = wa_msg–msgv1
          msgv2               = wa_msg–msgv1
          msgv3               = wa_msg–msgv1
          msgv4               = wa_msg–msgv1
        IMPORTING
          message_text_output = wa_msg1–msgv1.

      APPEND wa_msg1 TO it_msg1.
      CLEAR wa_msg1.
    ENDLOOP.

  ENDIF.

ENDLOOP.

IF NOT it_msg1 IS INITIAL.

  CALL FUNCTION ‘reuse_alv_grid_display’
    EXPORTING
*     I_INTERFACE_CHECK  = ‘ ‘
*     I_BYPASSING_BUFFER = ‘ ‘
*     I_BUFFER_ACTIVE    = ‘ ‘
      i_callback_program = sy–repid
*     I_CALLBACK_PF_STATUS_SET    = ‘ ‘
*     I_CALLBACK_USER_COMMAND     = ‘ ‘
*     I_CALLBACK_TOP_OF_PAGE      = ‘ ‘
*     I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘
*     I_CALLBACK_HTML_END_OF_LIST = ‘ ‘
      i_structure_name   = ‘bdcmsgcoll’
    TABLES
      t_outtab           = it_msg1
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy–subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDIF.

*ENDLOOP.

ENDFORM.                    ” f_call_bdc1
*&———————————————————————*
*&      Form  F_ITEM
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form f_item .
DATA : v_count(2) TYPE n,
       v_fld1     TYPE char30,
       v_fld2     TYPE char30,
       v_fld3     TYPE char30.

v_count = 1.
LOOP AT it_item INTO wa_item WHERE lifnr = wa_header–lifnr.
  CONCATENATE ‘lfbk-banks(‘ v_count ‘)’ INTO v_fld1.
  CONCATENATE ‘lfbk-bankl(‘ v_count ‘)’ INTO v_fld2.
  CONCATENATE ‘lfbk-bankn(‘ v_count ‘)’ INTO v_fld3.

  PERFORM bdc_dynpro      USING ‘sapmf02k’ ‘0130’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘lfbk-bankn(05)’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘=entr’.

  PERFORM bdc_field       USING v_fld1“‘LFBK-banks(01)’
  wa_item–banks.“‘in’.
  PERFORM bdc_field       USING v_fld2“‘LFBK-bankl(01)’
  wa_item–bankl.“‘0001’.
  PERFORM bdc_field       USING v_fld3“‘LFBK-bankn(01)’
  wa_item–bankn.            “‘1234561’.

  v_count = v_count + 1.
  IF v_count > 5.
    v_count = 1.
    PERFORM bdc_field       USING ‘bdc_cursor’
    v_fld3.“‘lfbk-bankn(05)’.
    PERFORM bdc_field       USING ‘bdc_okcode’
    ‘=entr’.
    PERFORM bdc_field       USING ‘bdc_okcode’
    ‘=p+’.
  ENDIF.

ENDLOOP.
PERFORM bdc_dynpro      USING ‘sapmf02k’ ‘0130’.
PERFORM bdc_field       USING ‘bdc_okcode’
‘=upda’.
ENDFORM.                    ” f_item

*&———————————————————————*
*&      Form  bdc_dynpro
*&———————————————————————*
*       text
*———————————————————————-*
*      –>PROGRAM    text
*      –>DYNPRO     text
*———————————————————————-*
form bdc_dynpro using program dynpro.
CLEAR wa_bdcdata.
wa_bdcdata–program  = program.
wa_bdcdata–dynpro   = dynpro.
wa_bdcdata–dynbegin = ‘x’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.                    “bdc_dynpro

*———————————————————————-*
*        Insert field                                                  *
*———————————————————————-*
form bdc_field using fnam fval.
*  IF fval <> space.
CLEAR wa_bdcdata.
wa_bdcdata–fnam = fnam.
wa_bdcdata–fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
*  ENDIF.
ENDFORM.
“bdc_field

Leave a comment