Sample BDC program

Hi,
  I am trying to create a bdc program using va01, with call transaction method.
i need a sample program for this which we generate after the recording, with any scenario.
thanks in advance.
Rag

I would suggest that you use the BAPI instead. 
BAPI_SALESORDER_CREATEFROMDAT2
REgard,
RIch Heilman

Similar Messages

  • BDC program using HR ABAP

    Hi,
    I am new to HR ABAP . Can anybody send me an end to end sample BDC program using HR ABAP. I have a requirement  to develop a program.
    Please give the sample file which  has the sample data to upload to SAP.
    Rgds,
    Sofia

    hi....
    to create a program of your own....
    goto tcode 'SHDB' and there go for a new recording of the TCODE as required by you...
    after recording is complete there is a button to GENERATE a program for that
    i am looking for a complete data tranfer example which i have done.... i ll send that to you
    regards
    this is a sample code for it
    THIS IS WRITTEN BY ME,YOU CAN GENERATE PROGRAM DIRECTLY
    *" Type declarations...................................................
    Type declaration of the structure to hold material information      *
    TYPES:
      BEGIN OF type_s_mat,
        name(10)  TYPE c,                  " Material Number
        industry  TYPE c,                  " Industry Sector
        mtype(10) TYPE c,                  " Material Type
        descr(20) TYPE c,                  " Material Description
        unit(10)  TYPE c,                  " Base Unit of Measure
      END OF type_s_mat,
      type_s_f2(4096) TYPE c.
    *" Data declarations...................................................
    Work variables                                                      *
    DATA:
      fs_f1 TYPE type_s_mat,               " Field string of TYPE_S_MAT
      fs_workarea TYPE bdcdata,            " Field string of type BDCDATA
      fs_bdc TYPE bdcmsgcoll,              " Field string of type bdcmsgcoll
      w_msg(72) TYPE c,                    " Holds message for writing
      w_i TYPE i,                          " Holds value of rc
      w_file TYPE filetable,               " Holds name of the file
      w_var  TYPE file_table,              " Field string of file_table
      w_file1 TYPE string.                 " Holds the path of the file
    Internal table to hold data for the input                           *
    DATA:
      t_itab LIKE
    STANDARD TABLE
          OF fs_workarea,
    Internal table to hold data for the messages                        *
       t_mess LIKE
    STANDARD TABLE
           OF fs_bdc,
       t_mat LIKE
    STANDARD TABLE
          OF fs_f1,
    Internal table to hold data for the input                           *
      t_temp TYPE
    STANDARD TABLE
          OF type_s_f2.
    *"Selection screen elements............................................
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
    PARAMETERS: p_file(128) TYPE c.
    SELECTION-SCREEN END OF BLOCK b1.
               AT SELECTION-SCREEN ON VALUE-REQUEST EVENT               *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = 'FILE_OPEN'
          default_extension       = 'XLS'
        CHANGING
          file_table              = w_file
          rc                      = w_i
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.                               " IF SY-SUBRC <> 0.
      LOOP AT w_file INTO w_var.
        p_file = w_var-filename.
      ENDLOOP.                             " LOOP AT W_FILE INTO W_VAR.
      ULINE.
                          START-OF-SELECTION EVENT                      *
    START-OF-SELECTION.
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
          i_tab_raw_data       = t_temp
          i_filename           = p_file
        TABLES
          i_tab_converted_data = t_mat
        EXCEPTIONS
          conversion_failed    = 1
          OTHERS               = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.                               " IF SY-SUBRC EQ 0.
                          END-OF-SELECTION EVENT                        *
    END-OF-SELECTION.
      PERFORM sub_display.
    *& Form  sub_screen
    This subroutine appends the value of screen name and number        *
         -->PV_screenam  This holds screen name                         *
         -->PV_scrnum    This holds screen number                       *
    FORM sub_screen  USING    value(pv_screenam)
                                  value(pv_scrnum).
      CLEAR fs_workarea.
      fs_workarea-program = pv_screenam.
      fs_workarea-dynpro = pv_scrnum.
      fs_workarea-dynbegin = 'X'.
      APPEND fs_workarea TO  t_itab.
    ENDFORM.                               " FORM SUB_SCREEN
    *& Form  SUB_FIELD_DATA                                               *
    This subroutine apppends  field name and value of the screen.      *
    -->PV_FLDNAM   This holds field name                               *
    -->PV_FLDVAL   This holds Field value                              *
    FORM sub_field_data  USING    value(pv_fldnam)
                               value(pv_fldval).
      CLEAR fs_workarea.
      fs_workarea-fnam = pv_fldnam.
      fs_workarea-fval = pv_fldval.
      APPEND fs_workarea TO  t_itab.
    ENDFORM.                               " FORM SUB_FIELD_DATA
    *& Form  sub_display                                             *
    This subroutine fills the value on screen fields when BDC executes *
    There are no interface parameters to be passed to this subroutine. *
    FORM sub_display .
      LOOP AT t_mat INTO fs_f1.
        CLEAR fs_workarea.
        CLEAR fs_bdc.
        PERFORM sub_screen     USING 'SAPLMGMM' '0060'.
        PERFORM sub_field_data USING 'RMMG1-MATNR' fs_f1-name.
        PERFORM sub_field_data USING 'RMMG1-MBRSH' fs_f1-industry.
        PERFORM sub_field_data USING 'RMMG1-MTART' fs_f1-mtype.
        PERFORM sub_field_data USING 'BDC_OKCODE' '/00'.
        PERFORM sub_screen     USING 'SAPLMGMM' '0070'.
        PERFORM sub_field_data USING 'MSICHTAUSW-KZSEL(01)' 'X'.
        PERFORM sub_field_data USING 'MSICHTAUSW-KZSEL(02)' 'X'.
        PERFORM sub_field_data USING 'BDC_OKCODE' '=ENTR'.
        PERFORM sub_screen     USING 'SAPLMGMM' '4004'.
        PERFORM sub_field_data USING 'MAKT-MAKTX' fs_f1-descr.
        PERFORM sub_field_data USING 'MARA-MEINS' fs_f1-unit.
        PERFORM sub_field_data USING 'BDC_OKCODE' '/00'.
        PERFORM sub_screen     USING 'SAPLMGMM' '4004'.
        PERFORM sub_field_data USING 'BDC_OKCODE' '=BU'.
        CALL TRANSACTION 'MM01' USING t_itab MODE 'A' MESSAGES INTO t_mess.
      ENDLOOP.
    ENDFORM.                    " SUB_DISPLAY
    Edited by: Mohit Kumar on Feb 18, 2009 12:40 PM

  • BDC program for Other Goods receipts

    Hi all,
    I need BDC program for Other goods receipts,
    I have data in excel like material, batch id, qty, actual width, length, plant etc. i want to upload this in one short based on the movement type.
    Thanks in advance.
    Shankar

    Hi MP Shankar,
    This is a sample BDC program .Use the format to develop your own BDC program.First record your trasnaction and use that recorded program here.Pass your filename here.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS: p_ifile TYPE dxfile-filename.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.
    PARAMETERS: p_sess RADIOBUTTON GROUP g3                  "create session
                       DEFAULT 'X' USER-COMMAND bdc,
                p_ctu  RADIOBUTTON GROUP g3.                 "call transaction
    SELECTION-SCREEN END OF BLOCK b3.
    DATA : BEGIN OF itab OCCURS 0,
           str TYPE string,
           END OF itab,
           l_file TYPE string,
           t_bdcdata TYPE STANDARD TABLE OF bdcdata,
           wa_bdcdata LIKE LINE OF t_bdcdata.
    AT SELECTION SCREEN ON VALUE REQUEST
    Value request for the filename.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.
      PERFORM help_input_file.
    START-OF-SELECTION.
      CLEAR l_file.
      l_file = p_ifile.
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                = l_file
          filetype                = 'ASC'
        TABLES
          data_tab                = itab
        EXCEPTIONS
          file_open_error         = 1
          file_read_error         = 2
          no_batch                = 3
          gui_refuse_filetransfer = 4
          invalid_type            = 5
          no_authority            = 6
          unknown_error           = 7
          bad_data_format         = 8
          header_not_allowed      = 9
          separator_not_allowed   = 10
          header_too_long         = 11
          unknown_dp_error        = 12
          access_denied           = 13
          dp_out_of_memory        = 14
          disk_full               = 15
          dp_timeout              = 16
          OTHERS                  = 17.
    *Start new session
      IF p_sess = 'X'.
        PERFORM bdc_open.
      ENDIF.
      LOOP AT itab.
        PERFORM creat_batch_input.
        PERFORM bdc_insert.
        IF p_ctu = 'X'.
          CALL TRANSACTION 'SE38'  USING t_bdcdata  MODE 'A'.
        ENDIF.
      ENDLOOP.
      IF p_sess = 'X'.
        PERFORM bdc_close .
      ENDIF.
    *&      Form  bdc_open
          text
    -->  p1        text
    <--  p2        text
    FORM bdc_open .
      CALL FUNCTION 'BDC_OPEN_GROUP'
        EXPORTING
          client              = sy-mandt
          group               = 'ZMUK'
          user                = sy-uname
        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.
    ENDFORM.                    " bdc_open
    *&      Form  creat_batch_input
          text
    -->  p1        text
    <--  p2        text
    FORM creat_batch_input .
    use your own recorded program here.
      PERFORM bdc_dynpro      USING 'SAPLWBABAP' '0100'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=STRT'.
      PERFORM bdc_field       USING 'RS38M-PROGRAMM'
                                    itab-str.
      PERFORM bdc_field       USING 'RS38M-FUNC_EDIT'
                                    'X'.
      PERFORM bdc_dynpro      USING 'SAPLSLVC_FULLSCREEN' '0500'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=&F03'.
      PERFORM bdc_dynpro      USING 'SAPLWBABAP' '0100'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=BACK'.
      PERFORM bdc_field       USING 'RS38M-PROGRAMM'
                                    itab-str.
      PERFORM bdc_field       USING 'RS38M-FUNC_EDIT'
                                    'X'.
    ENDFORM.                    " creat_batch_input
    *&      Form  bdc_insert
          text
    -->  p1        text
    <--  p2        text
    FORM bdc_insert .
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode            = 'SE38'
        TABLES
          dynprotab        = t_bdcdata
        EXCEPTIONS
          internal_error   = 1
          not_open         = 2
          queue_error      = 3
          tcode_invalid    = 4
          printing_invalid = 5
          posting_invalid  = 6
          OTHERS           = 7.
    ENDFORM.                    " bdc_insert
    *&      Form  bdc_dynpro
          text
         -->P_0168   text
         -->P_0169   text
    FORM bdc_dynpro  USING p_program TYPE any
                           p_dynpro  TYPE any.
      CLEAR wa_bdcdata.
      wa_bdcdata-program  = p_program.
      wa_bdcdata-dynpro   = p_dynpro.
      wa_bdcdata-dynbegin = 'X'.
      APPEND wa_bdcdata TO t_bdcdata.
    ENDFORM.                    " bdc_dynpro
    *&      Form  bdc_field
          text
         -->P_0179   text
         -->P_0180   text
    FORM bdc_field  USING   p_fnam TYPE any
                            p_fval TYPE any.
      CLEAR wa_bdcdata.
      wa_bdcdata-fnam = p_fnam.
      wa_bdcdata-fval = p_fval.
      CONDENSE wa_bdcdata-fval.
      APPEND wa_bdcdata TO t_bdcdata.
    ENDFORM.                    " bdc_field
    *&      Form  bdc_close
          text
    -->  p1        text
    <--  p2        text
    FORM bdc_close .
      CALL FUNCTION 'BDC_CLOSE_GROUP'
        EXCEPTIONS
          not_open    = 1
          queue_error = 2
          OTHERS      = 3.
    ENDFORM.                    " bdc_close
    *&      Form  help_input_file
          text
    -->  p1        text
    <--  p2        text
    FORM help_input_file .
      DATA:  lt_file_table TYPE filetable,
             la_file_table LIKE LINE OF lt_file_table,
             l_rc TYPE i,
             l_pcdsn TYPE cffile-filename.
      REFRESH lt_file_table.
      CLEAR la_file_table.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        CHANGING
          file_table = lt_file_table
          rc         = l_rc.
      READ TABLE lt_file_table INTO la_file_table INDEX 1.
      l_pcdsn = la_file_table-filename.
      MOVE l_pcdsn TO p_ifile.
    ENDFORM.                    " help_input_file

  • Manual bdc programming

    what is manual bdc programming?

    Hi
    See the sample BDC program, that was written completely manually
    REPORT ZMMBDC1_1 NO STANDARD PAGE HEADING MESSAGE-ID ZT.
          Declaration of internal tables
    internal table for selecting data from flat file
    DATA : BEGIN OF IT_DATA OCCURS 0,
             MBRSH,                    " Industry sector
             MTART(4),                 " Material type
             KZSEL,                    " Checkbox
             MAKTX(40),                " Material description
             MEINS(3),                 " Base unit of measure
             MATKL(9),                 " Material group
             BISMT(18),                " Old material number
           END OF IT_DATA.
    internal table for bdcdata
    DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    internal table to handle messages
    DATA : IT_MESSAGES LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    Variables &  Flag declaration
    variables declaration
    DATA : V_MESG(50).
    flag declaration
    DATA : FG_BDC,
           FG_FLAG1 TYPE I.
    selection screen
    SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
    parameter
    PARAMETERS : P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK BLK1.
    initialization
    INITIALIZATION.
    peform to initialize parameter
      PERFORM INIT_PARM.
    start of selection
    start-of-selection.
    perform to upload it_data
      PERFORM UP_LOAD_IT_DATA.
    perform transfer data
      PERFORM TRANSFER_DATA.
    end of selection
    END-OF-SELECTION.
    *&      Form  INIT_PARM
    Initializing parameter
    FORM INIT_PARM.
    P_FILE = 'C:\'.
    ENDFORM.                    " INIT_PARM
    *&      Form  UP_LOAD_IT_DATA
    Transfering data from file to internal table
    FORM UP_LOAD_IT_DATA.
      CALL FUNCTION 'WS_UPLOAD'
          EXPORTING
               FILENAME                = P_FILE
               FILETYPE                = 'ASC'
           TABLES
                DATA_TAB                = IT_DATA
           EXCEPTIONS
                CONVERSION_ERROR        = 1
                FILE_OPEN_ERROR         = 2
                FILE_READ_ERROR         = 3
                INVALID_TABLE_WIDTH     = 4
                INVALID_TYPE            = 5
                NO_BATCH                = 6
                UNKNOWN_ERROR           = 7
                GUI_REFUSE_FILETRANSFER = 8
                OTHERS                  = 9.
        IF SY-SUBRC = 2 .
           FG_FLAG1 = 1.
           MESSAGE I001.
        ENDIF.
    ENDFORM.                    " UP_LOAD_IT_DATA
    *&      Form  TRANSFER_DATA
       Processing the data
    FORM TRANSFER_DATA.
    FG_BDC = 'N'.
    LOOP AT IT_DATA.
    perform to fill it_bdcdata.
    PERFORM FILL_IT_BDCDATA.
    CALL TRANSACTION 'MM01' USING IT_BDCDATA MODE 'N' UPDATE 'S'
                                       MESSAGES INTO IT_MESSAGES.
       IF SY-SUBRC <> 0.
         FG_FLAG1 = 1.
    if error occurs in transaction mode run bdc session for that data
         PERFORM BDC_PROCESS.
       ENDIF.
    Handles error messages
          PERFORM ERROR_MESSAGES.
         CLEAR : IT_BDCDATA,IT_DATA,IT_MESSAGES.
         REFRESH : IT_BDCDATA,IT_MESSAGES.
    ENDLOOP.
    IF FG_FLAG1 = 0.
       MESSAGE I003.
    ENDIF.
    IF FG_BDC = 'O'.
    close bdc if it is open
       PERFORM CLOSE_BDC.
    ENDIF.
    ENDFORM.                    " TRANSFER_DATA
    *&      Form  FILL_IT_BDCDATA
    Filling Bdcdata structure with it_data
    Some fields have been commented for future updations
    FORM FILL_IT_BDCDATA.
    PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0060'.
    PERFORM BDC_FIELD  USING : 'BDC_OKCODE' '/00',
                             : 'BDC_CURSOR' 'RMMG1_REF-MATNR',
                             : 'RMMG1-MBRSH' IT_DATA-MBRSH,
                             : 'RMMG1-MTART' IT_DATA-MTART.
    PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.
    PERFORM BDC_FIELD  USING : 'BDC_OKCODE' '=RESA'.
    PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.
    PERFORM BDC_FIELD  USING : 'BDC_OKCODE' '=ENTR',
                             : 'MSICHTAUSW-KZSEL(01)' IT_DATA-KZSEL.
    PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '4000'.
    PERFORM BDC_FIELD  USING : 'BDC_OKCODE' '=BU',
                             : 'BDC_SUBSCR' 'SAPLMGMM' & '  2000TABFRA1',
                             : 'BDC_SUBSCR' 'SAPLMGD1' & '  1002SUB1',
                             : 'BDC_CURSOR' 'MAKT-MAKTX',
                             : 'MAKT-MAKTX' IT_DATA-MAKTX,
                             : 'BDC_SUBSCR' 'SAPLMGD1' & '  2001SUB2',
                             : 'MARA-MEINS' IT_DATA-MEINS,
                             : 'MARA-MATKL' IT_DATA-MATKL,
                             : 'MARA-BISMT' IT_DATA-BISMT,
                             : 'BDC_OKCODE' '=BU'.
    *perform bdc_field       using 'MARA-EXTWG'  ''.
    *perform bdc_field       using 'MARA-LABOR' ''.
    *perform bdc_field       using 'MARA-KOSCH' ''.
    *perform bdc_field       using 'MARA-MSTAE' ''.
    *perform bdc_field       using 'MARA-MSTDE' ''.
    *perform bdc_field       using 'BDC_SUBSCR' 'SAPLMGD1' & '  2561SUB3'.
    *perform bdc_field       using 'MARA-BEGRU' ''.
    *perform bdc_field       using 'BDC_SUBSCR' 'SAPLMGD1' & '  2007SUB4'.
    *perform bdc_field       using 'MARA-NTGEW' ''.
    *perform bdc_field       using 'MARA-BRGEW' ''.
    *perform bdc_field       using 'MARA-GEWEI' ''.
    *perform bdc_field       using 'MARA-VOLUM' ''.
    *perform bdc_field       using 'MARA-VOLEH' ''.
    *PERFORM BDC_FIELD       USING 'MARA-GROES' ''.
    *perform bdc_field       using 'MARA-EAN11' ''.
    *perform bdc_field       using 'MARA-NUMTP' ''.
    *PERFORM BDC_FIELD       USING 'BDC_SUBSCR' 'SAPLMGD1' & '  2005SUB5'.
    *perform bdc_field       using 'BDC_SUBSCR' 'SAPLMGD1' & '  2011SUB6'.
    *perform bdc_field       using 'MARA-MAGRV' ''.
    ENDFORM.                    " FILL_IT_BDCDATA
    *&      Form  BDC_DYNPRO
    Filling the it_bdcdata table with program name & screen number
    FORM BDC_DYNPRO USING    PROGRAM LIKE BDCDATA-PROGRAM
                             DYNPRO LIKE BDCDATA-DYNPRO.
      IT_BDCDATA-PROGRAM = PROGRAM.
      IT_BDCDATA-DYNPRO = DYNPRO.
      IT_BDCDATA-DYNBEGIN = 'X'.
      APPEND IT_BDCDATA.
      CLEAR IT_BDCDATA.
    ENDFORM.                    " BDC_DYNPRO
    *&      Form  BDC_FIELD
      Filling it_bdcdata with field name and field value
    FORM BDC_FIELD USING FNAM LIKE BDCDATA-FNAM
                         FVAL.
      IT_BDCDATA-FNAM = FNAM.
      IT_BDCDATA-FVAL = FVAL.
      APPEND IT_BDCDATA.
      CLEAR IT_BDCDATA.
    ENDFORM.                    " BDC_FIELD
    *&      Form  ERROR_MESSAGES
    Displaying error messages
    FORM ERROR_MESSAGES.
        CALL FUNCTION 'FORMAT_MESSAGE'
            EXPORTING
                 ID        = SY-MSGID
                 LANG      = '-D'
            IMPORTING
                 MSG       = V_MESG
            EXCEPTIONS
                 NOT_FOUND = 1
                 OTHERS    = 2.
      LOOP AT IT_MESSAGES WHERE MSGTYP = 'E'.
        WRITE : / 'Message :'(I06) ,V_MESG.
        CLEAR IT_MESSAGES.
      ENDLOOP.
    ENDFORM.                    " ERROR_MESSAGES
    *&      Form  BDC_PROCESS
    Open bdc session if call transaction fails
    FORM BDC_PROCESS.
      IF FG_BDC = 'N'.
    open bdc session
       PERFORM OPEN_BDC.
       FG_BDC = 'O'.
      ENDIF.
      IF FG_BDC = 'O'.
    insert data into bdc session
        PERFORM INSERT_BDC.
      ENDIF.
    ENDFORM.                    " BDC_PROCESS
    *&      Form  OPEN_BDC
      Calling function module to open bdc session
    FORM OPEN_BDC.
      CALL FUNCTION 'BDC_OPEN_GROUP'
        EXPORTING
          CLIENT              = SY-MANDT
          GROUP               = 'SMM1'
          KEEP                = 'X'
          USER                = SY-UNAME
        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.
    ENDFORM.                    " OPEN_BDC
    *&      Form  INSERT_BDC
      Insert it_bdcdata into bdc by calling function module bdc_insert
    FORM INSERT_BDC.
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          TCODE            = 'MM01'
        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.
    ENDFORM.                    " INSERT_BDC
    *&      Form  CLOSE_BDC
    Closing bdc session
    FORM CLOSE_BDC.
      CALL FUNCTION 'BDC_CLOSE_GROUP'
         EXCEPTIONS
           NOT_OPEN    = 1
           QUEUE_ERROR = 2
           OTHERS      = 3.
    ENDFORM.                    " CLOSE_BDC
    Reward points for useful Answers
    Regards
    Anji

  • Changes in BDC program to upload data from text/excel file

    Hi friends i have obtained the BDc program after recording :
    start-of-selection.
    perform open_group.
    perform bdc_dynpro      using 'SAPLCOIH' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-GSBER'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'AUFPAR-PM_AUFART'
                                  'PM01'.
    perform bdc_field       using 'CAUFVD-IWERK'
                                  '460a'.
    perform bdc_field       using 'CAUFVD-GSBER'
                                  '2460'.
    perform bdc_field       using 'CAUFVD-EQUNR'
                                  '10000009'.
    perform bdc_dynpro      using 'SAPLCOIH' '3000'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'CAUFVD-KTEXT'
                                  'abc'.
    perform bdc_field       using 'CAUFVD-INGPR'
                                  'GM'.
    perform bdc_field       using 'CAUFVD-VAPLZ'
                                  'RTN_VELR'.
    perform bdc_field       using 'CAUFVD-VAWRK'
                                  '460A'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-GLTRP'.
    perform bdc_field       using 'CAUFVD-GSTRP'
                                  '1.8.2010'.
    perform bdc_field       using 'CAUFVD-GLTRP'
                                  '1.8.2010'.
    perform bdc_field       using 'CAUFVD-TPLNR'
                                  'RTNP-HIG'.
    perform bdc_field       using 'CAUFVD-EQUNR'
                                  '10000009'.
    perform bdc_field       using 'AFVGD-INDET'
                                  '1'.
    perform bdc_field       using 'AFVGD-WERKS'
                                  '460A'.
    perform bdc_field       using 'AFVGD-STEUS'
                                  'PMIN'.
    perform bdc_field       using 'AFVGD-ARBEH'
                                  'H'.
    perform bdc_field       using 'AFVGD-DAUNE'
                                  'H'.
    perform bdc_dynpro      using 'SAPLCOIH' '3000'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BU'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-KTEXT'.
    perform bdc_field       using 'CAUFVD-KTEXT'
                                  'abc'.
    perform bdc_field       using 'CAUFVD-INGPR'
                                  'GM'.
    perform bdc_field       using 'CAUFVD-VAPLZ'
                                  'RTN_VELR'.
    perform bdc_field       using 'CAUFVD-VAWRK'
                                  '460A'.
    perform bdc_field       using 'CAUFVD-GSTRP'
                                  '01.08.2010'.
    perform bdc_field       using 'CAUFVD-GLTRP'
                                  '01.08.2010'.
    perform bdc_field       using 'CAUFVD-TPLNR'
                                  'RTNP-HIG'.
    perform bdc_field       using 'CAUFVD-EQUNR'
                                  '10000009'.
    perform bdc_field       using 'AFVGD-LTXA1'
                                  'abc'.
    perform bdc_field       using 'AFVGD-INDET'
                                  '1'.
    perform bdc_field       using 'AFVGD-ARBPL'
                                  'RTN_VELR'.
    perform bdc_field       using 'AFVGD-WERKS'
                                  '460A'.
    perform bdc_field       using 'AFVGD-STEUS'
                                  'PMIN'.
    perform bdc_field       using 'AFVGD-ARBEH'
                                  'H'.
    perform bdc_field       using 'AFVGD-DAUNE'
                                  'H'.
    perform bdc_transaction using 'IW31'.
    perform close_group.
    after executing it has two options.one is for call transactioin and other is for with session.Now i want to do the uploading from text file.Please guide me how to achieve that and what should be the order of fields in the text file.I am just a beginner.I know how to do that with LSMW bt trying BDc first time for creating PM orders

    You can use class "cl_gui_frontend_services". First you must select file with "file_open_dialog" method and the you can upload file with "gui_upload" method into internal table. Here is a sample: (I didn't try the code but I'm sure you can get it working, there are lots of sample codes about that. You can also search FM "GUI_UPLOAD").
    REPORT  zreport.
    DATA:
    gv_subrc TYPE sysubrc,
    gv_result TYPE abap_bool,
    gt_data_tab type table of zstruc.
    PARAMETERS: p_fname LIKE rlgrap-filename.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
        PERFORM file_open_dialog USING space space space space
                            CHANGING p_fname gv_action gv_subrc.
    START-OF-SELECTION.
    PERFORM gui_upload TABLES gt_data_tab
                     USING p_fname  CHANGING gv_subrc.
    *** FORMS ***
    FORM file_open_dialog USING pv_window_title
                                pv_default_extension
                                pv_default_filename
                                pv_initial_directory
                       CHANGING pv_filename
                                pv_user_action
                                pv_subrc.
      DATA:
      lt_file_table TYPE filetable,
      lv_rc         TYPE i,
      lv_initial_directory TYPE string.
      IF pv_initial_directory IS INITIAL.
        PERFORM get_desktop_directory CHANGING lv_initial_directory.
      ELSE.
        lv_initial_directory = pv_initial_directory.
      ENDIF.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = pv_window_title
          default_extension       = pv_default_extension
          default_filename        = pv_default_filename
    *     file_filter             =
    *     with_encoding           =
          initial_directory       = lv_initial_directory
    *     multiselection          =
        CHANGING
          file_table              = lt_file_table
          rc                      = lv_rc
          user_action             = pv_user_action
    *     file_encoding           =
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5
      pv_subrc = sy-subrc.
      IF pv_subrc EQ 0.
        READ TABLE lt_file_table INTO pv_filename INDEX 1.
      ENDIF.
    ENDFORM.
    FORM gui_upload TABLES pt_data_tab
                     USING pv_filename
                  CHANGING pv_subrc    TYPE sysubrc.
      DATA:
      lt_data_tab TYPE TABLE OF string,
      lv_filename TYPE string.
      lv_filename = pv_filename.
      CALL METHOD cl_gui_frontend_services=>gui_upload
        EXPORTING
          filename                = lv_filename
          filetype                = 'ASC'
         has_field_separator     = 'X'
    *     header_length           = 0
    *     read_by_line            = 'X'
    *     dat_mode                = SPACE
    *     codepage                = SPACE
    *     ignore_cerr             = ABAP_TRUE
    *     replacement             = '#'
    *     virus_scan_profile      =
    *     show_transfer_status    = 'X'
    *   IMPORTING
    *     filelength              =
    *     header                  =
        CHANGING
          data_tab                = lt_data_tab
        EXCEPTIONS
          file_open_error         = 1
          file_read_error         = 2
          no_batch                = 3
          gui_refuse_filetransfer = 4
          invalid_type            = 5
          no_authority            = 6
          unknown_error           = 7
          bad_data_format         = 8
          header_not_allowed      = 9
          separator_not_allowed   = 10
          header_too_long         = 11
          unknown_dp_error        = 12
          access_denied           = 13
          dp_out_of_memory        = 14
          disk_full               = 15
          dp_timeout              = 16
          not_supported_by_gui    = 17
          error_no_gui            = 18
          OTHERS                  = 19
      pv_subrc = sy-subrc.
      IF pv_subrc EQ 0.
        pt_data_tab[] = lt_data_tab[].
      ENDIF.
    ENDFORM.

  • Problem in the BDC program to upload the data from a flat file.

    Hi,
    I am required to write a BDC program to upload the data from a flat file. The conditions are as mentioned below:-
    1) Selection Screen will be prompted to user and user needs to provide:- File Path on presentation server (with F4 help for this obligatory parameter) and File Separator e.g. @,#,$,%,... etc(fields in the file will be separated by using this special character) or fields may be separated by tab(tab delimited).
    2) Finally after the data is uploaded, following messages need to be displayed:-
    a) Total Number of records successfully uploaded.
    b) Session Name
    c) Number of Sessions created.
    Problem is when each record is fetched from flat file, the record needs to be split into individual fields separated by delimiter or in case tab separated, then proceeding in usual manner.
    It would be great if you provide me either the logic, pseudocode, or sample code for this BDC program.
    Thanks,

    Here is an example program,  if you require the delimitor to be a TAB, then enter TAB on the selection screen, if you require the delimitor to be a comma, slash, pipe, whatever, then simply enter that value.  This example is simply the uploading of the file, not the BDC, I assume that you know what to do once you have the data into the internal table.
    REPORT zrich_0001.
    TYPES: BEGIN OF ttab,
            rec TYPE string,
           END OF ttab.
    TYPES: BEGIN OF tdat,
           fld1(10) TYPE c,
           fld2(10) TYPE c,
           fld3(10) TYPE c,
           fld4(10) TYPE c,
           END OF tdat.
    DATA: itab TYPE TABLE OF ttab.
    data: xtab like line of itab.
    DATA: idat TYPE TABLE OF tdat.
    data: xdat like line of idat.
    DATA: file_str TYPE string.
    DATA: delimitor TYPE string.
    PARAMETERS: p_file TYPE localfile.
    PARAMETERS: p_del(5) TYPE c.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      DATA: ifiletab TYPE filetable.
      DATA: xfiletab LIKE LINE OF ifiletab.
      DATA: rc TYPE i.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        CHANGING
          file_table = ifiletab
          rc         = rc.
      READ TABLE ifiletab INTO xfiletab INDEX 1.
      IF sy-subrc = 0.
        p_file = xfiletab-filename.
      ENDIF.
    START-OF-SELECTION.
      TRANSLATE p_del TO UPPER CASE.
      CASE p_del.
        WHEN 'TAB'.
          delimitor = cl_abap_char_utilities=>horizontal_tab.
        WHEN others.
          delimitor = p_del.
      ENDCASE.
      file_str = p_file.
      CALL METHOD cl_gui_frontend_services=>gui_upload
        EXPORTING
          filename = file_str
        CHANGING
          data_tab = itab.
      LOOP AT itab into xtab.
        CLEAR xdat.
        SPLIT xtab-rec AT delimitor INTO xdat-fld1
                                         xdat-fld2
                                         xdat-fld3
                                         xdat-fld4.
        APPEND xdat to idat.
      ENDLOOP.
      LOOP AT idat into xdat.
        WRITE:/ xdat-fld1, xdat-fld2, xdat-fld3, xdat-fld4.
      ENDLOOP.
    Regards,
    Rich Heilman

  • BDC PROGRAM

    Hi to all
    I'm new to BDC Progaram
    can u tell me how to write a
    BDC program to upload purchase order data from legacy system.

    Hi Viswanath,
                        First i will explain the procedure step by step and will send a sample code plz check it once ok..And also i will attach a flat file at the end of SAMPLE CODE CHECK IT ONCE OK..
    Steps:
    1.Bulid an internal table first according to ur flat file fields.
    2.select the flat file by using PARAMETER.
    3.And assign that file path to GUI_UPLOAD function module.
    4.Call BDC_OPEN_GROUP is used to open the session.
    5.loop that flat file data and palce BDC_INSERT funtion module in that loop for uploading data into database table
    6.After loop call BDC_CLOSE_GROUP to close the session.
    SAMPLE CODE:
    REPORT ybdc_session_mm01 NO STANDARD PAGE HEADING LINE-SIZE 255.
    Global Structure for BDC Data
    DATA: it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
    Internal Table
    DATA: BEGIN OF itab OCCURS 0,
    mbrsh LIKE rmmg1-mbrsh,
    mtart LIKE rmmg1-mtart,
    maktx LIKE makt-maktx,
    meins LIKE mara-meins,
    END OF itab.
    Upload the flat file
    CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
    filename =
    'C:\Documents and Settings\Compaq_Owner\Desktop\satish\mm01.txt'
    filetype = 'ASC'
    has_field_separator = 'X'
    HEADER_LENGTH = 0
    READ_BY_LINE = 'X'
    DAT_MODE = ' '
    IMPORTING
    FILELENGTH =
    HEADER =
    TABLES
    data_tab = itab.
    EXCEPTIONS
    FILE_OPEN_ERROR = 1
    FILE_READ_ERROR = 2
    NO_BATCH = 3
    GUI_REFUSE_FILETRANSFER = 4
    INVALID_TYPE = 5
    NO_AUTHORITY = 6
    UNKNOWN_ERROR = 7
    BAD_DATA_FORMAT = 8
    HEADER_NOT_ALLOWED = 9
    SEPARATOR_NOT_ALLOWED = 10
    HEADER_TOO_LONG = 11
    UNKNOWN_DP_ERROR = 12
    ACCESS_DENIED = 13
    DP_OUT_OF_MEMORY = 14
    DISK_FULL = 15
    DP_TIMEOUT = 16
    OTHERS = 17
    IF sy-subrc 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Session Method Starts
    BDC_OPEN_GROUP
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    DEST = FILLER8
    GROUP = 'ychinnu'
    HOLDDATE = FILLER8
    KEEP = 'X'
    USER = SY-UNAME
    RECORD = FILLER1
    PROG = SY-CPROG
    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.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Create BDCDATA Structure
    *include bdcrecx1.
    START-OF-SELECTION.
    PERFORM open_group.
    loop at itab.
    PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RMMG1-MTART'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '/00'.
    PERFORM bdc_field USING 'RMMG1-MBRSH'
    itab-mbrsh.
    PERFORM bdc_field USING 'RMMG1-MTART'
    itab-mtart.
    After enterning MBRSH,MTART we press enter
    PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'. "press Enter
    PERFORM bdc_field USING 'BDC_CURSOR'
    'MSICHTAUSW-DYTXT(01)'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=ENTR'.
    View selection (Basic data1)
    PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'"view selection
    'X'.
    Select Tick Mark (ok)
    PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=BU'.
    PERFORM bdc_field USING 'MAKT-MAKTX'
    itab-maktx.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'MARA-MEINS'.
    PERFORM bdc_field USING 'MARA-MEINS'
    itab-meins.
    Finally after filling the data we save the data.
    PERFORM bdc_field USING 'MARA-MTPOS_MARA' "For saving
    'NORM'.
    PERFORM bdc_transaction USING 'MM01'.
    PERFORM close_group.
    BDC_INSERT
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = 'MM01'
    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.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Refresh BDCDATA
    refresh it_bdcdata.
    endloop.
    Closing BDC Group
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
    NOT_OPEN = 1
    QUEUE_ERROR = 2
    OTHERS = 3
    IF sy-subrc 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Start new screen *
    FORM bdc_dynpro USING program dynpro.
    CLEAR it_bdcdata.
    it_bdcdata-program = program.
    it_bdcdata-dynpro = dynpro.
    it_bdcdata-dynbegin = 'X'.
    APPEND it_bdcdata.
    ENDFORM. "BDC_DYNPRO
    Insert field *
    FORM bdc_field USING fnam fval.
    IF FVAL NODATA.
    CLEAR it_bdcdata.
    it_bdcdata-fnam = fnam.
    it_bdcdata-fval = fval.
    APPEND it_bdcdata.
    ENDIF.
    ENDFORM. "BDC_FIELD
    Flat File
    *M FERT IRON KG
    *M ROH STEEL KG
    *M HALB IRON KG
    Award points if helpful.
    Kiran Kumar.G.A

  • BDC program to change to vendor master

    Can anyone give me a sample BDC code to change vendor master MK02
    After entering the Vendor number and selecting the checkboxes Address and Control in the first screen if i take enter it should go to the second screen which contains all fields of address to modify but My code is giving the screen 0110 which contains only few fields,even though i prepared BDC table with 0111 screen, but the actual screen to be called is 0111.
    Can anyone send the sample code or give me the solution
    Thanks,

    DATA : lv_filename TYPE STRING,
           V_TEXTOUT   TYPE T100-TEXT,
           v_tcode TYPE tcode.
    DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
    DATA:   MESSTAB TYPE STANDARD TABLE OF BDCMSGCOLL ,
            MESSTAB1 TYPE BDCMSGCOLL.
    DATA :  ITAB_FILETAB  TYPE FILETABLE.
    CONSTANTS: C_TCODE(4) TYPE C VALUE 'AS02',                " Assets  master data Change - Transaction
               C_N        TYPE C VALUE 'N',                   " Not to display screens while call transaction
               C_E        TYPE C VALUE 'E',                   " Error
               C_S        TYPE C VALUE 'S'. 
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    PARAMETERS : P_FILE TYPE STRING OBLIGATORY,
                 P_APPL  TYPE FILENAME-FILEEXTERN DEFAULT '/usr/sap/tmp/test_asset.txt' OBLIGATORY LOWER CASE,
                 P_ALV TYPE C AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK B2.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      PERFORM GET_FILENAME_UPLOAD_FILE.
    AT SELECTION-SCREEN ON P_FILE.
      PERFORM CHECK_FILE_EXISTS.
    START-OF-SELECTION.
    PERFORM READ_FILE .
    PERFORM FILL_TAB.
    PERFORM GET_FINAL_RECORD.
    PERFORM BDC_REC.
    FORM CHECK_FILE_EXISTS.
      DATA: V_FILENAME TYPE STRING,
            V_RET   TYPE C.
      V_FILENAME = P_FILE .
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
        EXPORTING
          FILE                 = V_FILENAME
        RECEIVING
          RESULT               = V_RET
        EXCEPTIONS
          CNTL_ERROR           = 1
          ERROR_NO_GUI         = 2
          WRONG_PARAMETER      = 3
          NOT_SUPPORTED_BY_GUI = 4
          OTHERS               = 5.
      IF NOT ( SY-SUBRC = 0 AND V_RET = 'X' ).
        MESSAGE E000(100) WITH 'file does not exits '.
      ENDIF.
    ENDFORM.
    *&      Form  GET_FILENAME_UPLOAD_FILE
    select the file on presentation server using F4 option.
    FORM GET_FILENAME_UPLOAD_FILE.
      DATA: V_TITLE TYPE STRING,
            V_RC    TYPE I.
      V_TITLE = 'WINDOW ' .
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE      = V_TITLE
          DEFAULT_FILENAME  = '*.txt'
          INITIAL_DIRECTORY = 'C:\'
          MULTISELECTION    = ' '  "No multiple selection
        CHANGING
          FILE_TABLE        = ITAB_FILETAB
          RC                = V_RC.
      READ TABLE ITAB_FILETAB INTO P_file INDEX 1.
    ENDFORM.
    FORM READ_FILE .
    lv_filename = p_file.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        FILENAME                     = lv_filename
       FILETYPE                      = 'ASC'
       HAS_FIELD_SEPARATOR           = 'X'
       HEADER_LENGTH                 = 0
       READ_BY_LINE                  = 'X'
       DAT_MODE                      = ' '
       CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
       REPLACEMENT                   = '#'
       CHECK_BOM                     = ' '
      VIRUS_SCAN_PROFILE            =
      NO_AUTH_CHECK                 = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
      TABLES
        DATA_TAB                      = ITAB_FILE
    EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17     .
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ENDFORM.
    FORM BDC_REC .
        DATA user_date TYPE sy-datum.
        DATA : DATE_FORMAT(10) TYPE C,
             TEMP(2) TYPE C,
               ROW  TYPE STRING ,
               ROW1 TYPE STRING.
      LOOP at ITAB_FINAL INTO WA_FINAL .
       CONCATENATE WA_FINAL-afabg6(4) WA_FINAL-afabg0(2) WA_FINAL-afabg+3(2) INTO USER_DATE  .
       WRITE USER_DATE TO DATE_FORMAT.
      PERFORM BDC_DYNPRO      USING 'SAPLAIST' '0100'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'ANLA-ANLN1'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '/00'.
      PERFORM BDC_FIELD       USING 'ANLA-ANLN1'
                                    WA_FINAL-ANLN1  . "'158'.
      PERFORM BDC_FIELD       USING 'ANLA-ANLN2'
                                    WA_FINAL-ANLN2  .  "'0'.
      PERFORM BDC_FIELD       USING 'ANLA-BUKRS'
                                    WA_FINAL-BUKRS  . "'2600'.
      PERFORM BDC_DYNPRO      USING 'SAPLAIST' '1000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=TAB08'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'ANLA-TXT50'.
      PERFORM BDC_FIELD       USING 'ANLA-TXT50'
                                    'PUMP/ATTACK REAGENT METERING'.
      PERFORM BDC_FIELD       USING 'ANLH-ANLHTXT'
                                    'PUMP/ATTACK REAGENT METERING'.
      PERFORM BDC_FIELD       USING 'ANLA-INVNR'
                                    'DB1LA607251CNWF'.
      PERFORM BDC_FIELD       USING 'ANLA-MENGE'
                                    '1'.
      PERFORM BDC_FIELD       USING 'ANLA-MEINS'
                                    'EA'.
      PERFORM BDC_FIELD       USING 'ANLA-INKEN'
                                    'X'.
    PERFORM BDC_FIELD       USING 'ANLA-AKTIV'
                                   '07/01/1984'.
      PERFORM BDC_DYNPRO      USING 'SAPLAIST' '1000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BUCH'.
    CLEAR TEMP.
    *TEMP = WA_FINAL-LINENO.
      CONCATENATE 'ANLB-WBIND(' WA_FINAL-LINENO ')' INTO ROW1 .
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    ROW1 ."'ANLB-WBIND(06)'.
      CONCATENATE 'ANLB-AFABG(' WA_FINAL-LINENO ')' INTO row.
      PERFORM BDC_FIELD       USING row
                                    DATE_FORMAT . "wa_file-afabg . "'12/01/1985'.
        CALL TRANSACTION C_TCODE USING BDCDATA
                         MODE   C_N
                         UPDATE C_S
                         MESSAGES INTO MESSTAB.
        IF SY-SUBRC EQ 0.
          READ TABLE MESSTAB INTO MESSTAB1 WITH KEY MSGTYP = C_S.
          IF SY-SUBRC EQ 0.
            Builds actual message based on info returned from Call transaction
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'
              EXPORTING
                MSGID               = MESSTAB1-MSGID
                MSGNR               = MESSTAB1-MSGNR
                MSGV1               = MESSTAB1-MSGV1
                MSGV2               = MESSTAB1-MSGV2
                MSGV3               = MESSTAB1-MSGV3
                MSGV4               = MESSTAB1-MSGV4
              IMPORTING
                MESSAGE_TEXT_OUTPUT = V_TEXTOUT.
           Build Success table ready for output
            MOVE-CORRESPONDING WA_FINAL TO WA_SUCCESS.
            WA_SUCCESS-MESS = V_TEXTOUT.
            APPEND WA_SUCCESS TO ITAB_SUCCESS.
            CLEAR: WA_SUCCESS .
          ENDIF.
        ELSE.
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.
           Insert field                                                  *
    FORM BDC_FIELD USING FNAM FVAL.
    IF FVAL <> NODATA.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
    ENDIF.
    ENDFORM.

  • What is the use of CTU_PRAMS in bdc programming?

    what is the use of CTU_PRAMS in bdc programming?
    can any explain wit a sample code.

    Hi,
    Hi,
    If u write table control bdc program in 14'' monitor screen, then if the same program u run at different monitor size, then the screen resolution problem comes in to the picture,
    like, u get 5 records in table control in one screen, and some other records in other screen, to avoid this screen resolution problem we use CTU-PARAMS Structure.
    In ur program u have to set
    defsize type ctu_params-defsize value 'X',
    Then u will be free of screen resolution problem.
    Fill the str CTU_PARAMS-defsize = 'X' and pass in CTU stmnt as
    call transaction 'XXX' options using t_bdcdata ctu_params.
    Analysing :
    1. If nothing works, then we have to
    some ifs & buts.
    2. There shall be normally
    2-4 different kinds of resolution
    on various users comptuers.
    3. Based on this,
    we have to know beforehand,
    what will be the number of rows
    in the table control.
    4. The user can be given
    a selection/paraemter
    for resolution
    eg. 800x600
    1024x100
    axb
    etc.
    5. Based on this, we will hardcode
    in the program (based upon our knowledge/recording
    which we have seen and done)
    we will hardcode
    the number of lines
    in the VARIBLE.
    6. Then we can simply use this variable
    for our LOOP and logic purpose.
    7. It will be the responsibiltiy of the
    use to CHOOSE THE CORRECT resolution,
    on the selection-screen.
    For screen resolution use ctu_params, with default size
    Data : f_option type ctu_params,
    f_option-updmode = 'S'.
    f_option-defsize = 'X'.
    f_option-dismode = 'N'.
    call transaction 'VA01' using bdcdata options from f_option messages into bdcerror.
    CALL TRANSACTION tcode... OPTIONS FROM opt
    ... OPTIONS FROM opt
    Effect
    Allows you to control processing using the values of the componetns of the structure opt, which must have the ABAP Dictionary type CTU_PARAMS. The components have the following meanings:
    DISMODE
    Display mode (like the MODE addition)
    UPDMODE
    Update mode (like the UPDATE addition)
    CATTMODE
    CATT mode (controls a CATT)
    CATT mode can have the following values:
    ' ' No CATT active
    'N' CATT without single-screen control
    'A' CATT with single-screen control
    DEFSIZE
    Use default window size
    RACOMMIT
    Do not end transaction at COMMIT WORK
    NOBINPT
    No batch input mode (that is, SY-BINPT = SPACE)
    NOBIEND
    No batch input mode after the end of BDC data.
    The components DEFSIZE , RACOMMIT, NOBINPT, and NOBIEND always take the following values:
    'X' Yes
    ' ' No
    If you do not use the OPTIONS FROM addition, the following control parameter settings apply:
    DISMODE
    From addition MODE
    UPDMODE
    From addition UPDATE
    CATTMODE
    No CATT active
    DEFSIZE
    Do not use default window size
    RACOMMIT
    Successful end on COMMIT WORK
    NOBINPT
    Batch input mode active ( SY-BINPT = X
    NOBIEND
    Batch input mode remains active after the BDC data

  • Can we call a bdc program from a report?how

    hi
    experts can u help me for this

    Hi
    Yes, You can call a BDC program from Report.
    see the sample report in which it is used
    REPORT zm_reservation_alert
    NO STANDARD PAGE HEADING
    MESSAGE-ID zm_msg.
    D A T A B A S E T A B L E S D E C L A R A T I O N
    T Y P E S D E C L A R A T I O N S
    Reservations Main Structure
    TYPES: BEGIN OF s_res,
    rsnum TYPE rsnum, " Reservation No
    rspos TYPE rspos, " Item No
    usnam TYPE usnam, " User Name
    bwart TYPE bwart, " Movement Type
    aufnr TYPE aufnr, " Order Number
    rsart TYPE rsart, " Record Type
    bdart TYPE bdart, " Reservation Type
    matnr TYPE matnr, " Material No
    bdter TYPE bdter, " Req Date
    menge TYPE menge_d, " Quantity
    kostl TYPE kostl, " Cost Center
    usrid TYPE sysid, " User ID
    END OF s_res.
    Output Main Structure
    TYPES: BEGIN OF s_rep,
    usnam TYPE usnam, " User Name
    rsnum TYPE rsnum, " Reservation No
    rspos TYPE rspos, " Item No
    matnr TYPE matnr, " Material No
    bdter TYPE bdter, " Req Date
    menge TYPE menge_d, " Quantity
    kostl TYPE kostl, " Cost Center
    aufnr TYPE aufnr, " Order Number
    END OF s_rep.
    User Dept Details
    TYPES: BEGIN OF s_dept,
    pernr TYPE persno, " Personal No
    usrid TYPE sysid, " User ID
    orgeh TYPE orgeh, " Orgn Unit
    orgtx TYPE orgtx, " Dept Name
    END OF s_dept.
    For Send Mail Purpose
    DATA : i_doc_data LIKE sodocchgi1.
    DATA : BEGIN OF i_pack_list OCCURS 0.
    INCLUDE STRUCTURE sopcklsti1.
    DATA : END OF i_pack_list.
    DATA : BEGIN OF i_receivers OCCURS 0.
    INCLUDE STRUCTURE somlreci1.
    DATA : END OF i_receivers.
    DATA : BEGIN OF i_contents OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_contents.
    DATA : BEGIN OF i_header OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_header.
    DATA : BEGIN OF i_att OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_att.
    Internal table for bdcdata
    DATA : it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
    Internal table to handle messages
    DATA : it_messages LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
    D A T A D E C L A R A T I O N S
    DATA: gv_lines TYPE sy-index, " Total Lines int Table
    gv_days TYPE i, " Difference Days
    gv_date TYPE sy-datum, " Date
    gv_date1 TYPE sy-datum, " Date
    gv_date2 TYPE sy-datum, " Date
    gv_text(85), " Text Field
    gv_mesg(70), " Error Messages
    gv_bdc, " BDC Flag
    gv_flag TYPE i, " Flag
    gv_ernam TYPE ernam. " User ID
    C O N S T A N T S D E C L A R A T I O N S
    CONSTANTS: c_x VALUE 'X', " Flag
    c_endda TYPE endda VALUE '99991231'. " Date
    I N T E R N A L T A B L E S D E C L A R A T I O N S
    DATA: i_res TYPE STANDARD TABLE OF s_res WITH HEADER LINE, " Reservns
    i_dept TYPE STANDARD TABLE OF s_dept WITH HEADER LINE, " Dept
    i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE. " Output
    S T A R T - O F - S E L E C T I O N *
    START-OF-SELECTION.
    Fetch main data
    PERFORM fetch_data.
    Process data
    PERFORM process_data.
    *& Form fetch_data
    Fetching the Reservations related data from Database Tables
    FORM fetch_data .
    CLEAR: gv_date, gv_date1, gv_date2.
    gv_date = sy-datum.
    gv_date1 = sy-datum - 10.
    gv_date2 = sy-datum + 10.
    CLEAR i_res.
    REFRESH i_res.
    SELECT a~rsnum " Reservation No.
    b~rspos " Reservation Item
    a~usnam " User Name
    a~bwart " Movement Type
    a~aufnr " Order Number
    b~rsart " Record Type
    b~bdart " Reservation Type
    b~matnr " Material No
    b~bdter " Req Date
    INTO TABLE i_res
    FROM rkpf AS a JOIN resb AS b
    ON arsnum = brsnum
    WHERE ( b~bdter BETWEEN gv_date1 AND gv_date2 ) AND
    b~xloek EQ ' '.
    SORT i_res BY rsnum rspos.
    DELETE ADJACENT DUPLICATES FROM i_res COMPARING matnr.
    Add userid into the i_usr int table
    LOOP AT i_res.
    i_res-usrid = i_res-usnam.
    MODIFY i_res INDEX sy-tabix.
    ENDLOOP.
    IF NOT i_res[] IS INITIAL.
    Get the User Dept Name
    CLEAR i_dept.
    REFRESH i_dept.
    SELECT a~pernr " Personal No
    a~usrid " User ID
    b~orgeh " Orgn Unit
    c~orgtx " Dept Name
    INTO TABLE i_dept
    FROM pa0105 AS a JOIN pa0001 AS b
    ON apernr = bpernr JOIN t527x AS c
    ON borgeh = corgeh
    FOR ALL ENTRIES IN i_res
    WHERE a~usrid = i_res-usrid AND
    a~endda EQ c_endda AND
    b~endda EQ c_endda.
    ENDIF.
    SORT i_dept BY pernr.
    DELETE ADJACENT DUPLICATES FROM i_dept COMPARING pernr.
    Move the Creator of Reservation to a diff table
    LOOP AT i_res.
    MOVE-CORRESPONDING i_res TO i_rep.
    APPEND i_rep.
    CLEAR i_rep.
    ENDLOOP.
    SORT i_rep BY usnam rsnum rspos.
    ENDFORM. " Fetch_Data
    *& Form process_data
    Process the Reservations related data for Expiry Date
    FORM process_data .
    DATA: lv_date1 LIKE sy-datum,
    lv_date2 LIKE sy-datum,
    lv_date3(10),
    lv_menge(13),
    lv_tabix LIKE sy-tabix.
    LOOP AT i_rep.
    CLEAR: gv_days, gv_text, lv_date1, lv_date2,lv_date3.
    lv_tabix = sy-tabix.
    AT NEW usnam.
    Populate the Contents Table
    CLEAR i_att.
    REFRESH i_att.
    i_att = 'Reservations Reminder'(014).
    APPEND i_att.
    i_att = '----
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    READ TABLE i_dept WITH KEY usrid = i_rep-usnam.
    CONCATENATE 'Name:'(003) i_rep-usnam 'Dept:'(015) i_dept-orgtx
    INTO i_att-line SEPARATED BY space.
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    i_att = 'Please find the List of expiring Reservations'(004).
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    CONCATENATE '--' '' '--
    ' INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    CONCATENATE 'Reservation #'(006) 'Material #'(007) ' Quantity'(002)
    'Due Date'(008) 'Work Center/CC'(005) INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    CONCATENATE '--' '' '--
    ' INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    ENDAT.
    gv_days = i_rep-bdter - gv_date.
    lv_date1 = i_rep-bdter + 5.
    lv_date2 = i_rep-bdter + 10.
    MOVE i_rep-menge TO lv_menge.
    WRITE i_rep-bdter TO lv_date3.
    IF gv_days = 10.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is due for 10 days. Please collect'(009)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is due for 10 days. Please collect'(009)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_days = 5.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is due for 5 days. Please collect'(010)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is due for 5 days. Please collect'(010)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date1.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is getting cancelled on'(011) lv_date2
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is getting cancelled on'(011) lv_date2
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date2.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is being cancelled'(012)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is being cancelled'(012)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    Mark the Reservation Item 'DELETED' using BDC.
    UPDATE resb SET xloek = c_x.
    PERFORM delete_item_resb.
    ENDIF.
    AT END OF usnam.
    IF ( gv_days = 10 OR gv_days = 5 OR gv_date = lv_date1 OR
    gv_date = lv_date2 ).
    Read the User who creates the Reservn and send a mail alert to him
    CLEAR : i_receivers,gv_ernam.
    REFRESH: i_receivers.
    READ TABLE i_rep INDEX lv_tabix.
    gv_ernam = i_rep-usnam.
    IF gv_ernam <> space.
    Send mail Alert to PR Creator(SAP inbox)
    PERFORM send_alert_data.
    Send Mail to External Mail ID of the SAP USER
    PERFORM send_mail_external.
    ENDIF.
    ENDIF.
    ENDAT.
    ENDLOOP.
    ENDFORM. " Process_data
    *& Form delete_item_resb
    Set the Deletion Indicator for the Res. Item in RESB
    FORM delete_item_resb.
    gv_bdc = 'N'.
    Perform to fill it_bdcdata.
    PERFORM fill_it_bdcdata.
    Call the Transaction MB22
    CALL TRANSACTION 'MB22' USING it_bdcdata MODE 'A' UPDATE 'S'
    MESSAGES INTO it_messages.
    IF sy-subrc <> 0.
    gv_flag = 1.
    If error occurs in transaction mode run bdc session for that data
    PERFORM bdc_process.
    ENDIF.
    Handles error messages
    PERFORM error_messages.
    CLEAR : it_bdcdata, it_messages.
    REFRESH : it_bdcdata, it_messages.
    IF gv_bdc = 'O'.
    close bdc if it is open
    PERFORM close_bdc.
    ENDIF.
    ENDFORM. "delete_item_resb
    *& Form FILL_IT_BDCDATA
    Filling Bdcdata structure with data
    FORM fill_it_bdcdata.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0560'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RM07M-RSPOS'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '/00'.
    PERFORM bdc_field USING 'RM07M-RSNUM'
    i_rep-rsnum.
    PERFORM bdc_field USING 'RM07M-RSPOS'
    i_rep-rspos.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RESB-XLOEK'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '/00'.
    PERFORM bdc_field USING 'RESB-XLOEK'
    c_x.
    PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'COBL-KOSTL'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=ENTE'.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RESB-ERFMG'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=BU'.
    PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'COBL-KOSTL'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=ENTE'.
    ENDFORM. " FILL_IT_BDCDATA
    *& Form BDC_DYNPRO
    Filling the it_bdcdata table with program name & screen number
    FORM bdc_dynpro USING program LIKE bdcdata-program
    dynpro LIKE bdcdata-dynpro.
    it_bdcdata-program = program.
    it_bdcdata-dynpro = dynpro.
    it_bdcdata-dynbegin = 'X'.
    APPEND it_bdcdata.
    CLEAR it_bdcdata.
    ENDFORM. " BDC_DYNPRO
    *& Form BDC_FIELD
    Filling it_bdcdata with field name and field value
    FORM bdc_field USING fnam LIKE bdcdata-fnam
    fval.
    it_bdcdata-fnam = fnam.
    it_bdcdata-fval = fval.
    APPEND it_bdcdata.
    CLEAR it_bdcdata.
    ENDFORM. " BDC_FIELD
    *& Form ERROR_MESSAGES
    Displaying error messages
    FORM error_messages.
    CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
    id = sy-msgid
    lang = sy-langu
    IMPORTING
    msg = gv_mesg
    EXCEPTIONS
    not_found = 1
    OTHERS = 2.
    LOOP AT it_messages WHERE msgtyp = 'E'.
    WRITE : / 'Message :'(001) ,gv_mesg.
    CLEAR it_messages.
    ENDLOOP.
    ENDFORM. " ERROR_MESSAGES
    *& Form BDC_PROCESS
    Open bdc session if call transaction fails
    FORM bdc_process.
    IF gv_bdc = 'N'.
    open bdc session
    PERFORM open_bdc.
    gv_bdc = 'O'.
    ENDIF.
    IF gv_bdc = 'O'.
    insert data into bdc session
    PERFORM insert_bdc.
    ENDIF.
    ENDFORM. " BDC_PROCESS
    *& Form OPEN_BDC
    Calling function module to open bdc session
    FORM open_bdc.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    client = sy-mandt
    group = 'ZMM'
    keep = 'X'
    user = sy-uname
    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.
    ENDFORM. " OPEN_BDC
    *& Form INSERT_BDC
    Insert it_bdcdata into bdc by calling function module bdc_insert
    FORM insert_bdc.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    tcode = 'MB22'
    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.
    ENDFORM. " INSERT_BDC
    *& Form CLOSE_BDC
    Closing bdc session
    FORM close_bdc.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
    not_open = 1
    queue_error = 2
    OTHERS = 3.
    ENDFORM. " CLOSE_BDC
    *& Form send_alert_data
    Send Alert for the Expired Contract
    FORM send_alert_data .
    CLEAR: gv_lines,i_receivers, i_header, i_contents,i_doc_data.
    REFRESH : i_receivers,i_header,i_contents.
    DESCRIBE TABLE i_att LINES gv_lines.
    i_receivers-receiver = gv_ernam.
    i_receivers-receiver = 'SSHEIK'.
    i_receivers-rec_type = 'B'.
    i_receivers-rec_date = sy-datum.
    i_receivers-express = 'X'.
    i_receivers-com_type = 'INT'.
    i_receivers-notif_del = 'X'.
    APPEND i_receivers.
    i_doc_data-obj_name = 'SAPoffice'(013).
    i_doc_data-obj_descr = 'Reservations Reminder'(014).
    i_doc_data-obj_langu = 'E'.
    i_doc_data-no_change = c_x.
    i_doc_data-obj_prio = 1.
    i_doc_data-priority = 1.
    i_doc_data-doc_size = ( gv_lines - 1 ) * 255 + 135.
    i_pack_list-transf_bin = c_x.
    i_pack_list-head_start = '1'.
    i_pack_list-head_num = '1'.
    i_pack_list-body_start = '1'.
    i_pack_list-body_num = gv_lines.
    i_pack_list-doc_type = 'DOC'.
    i_pack_list-obj_name = 'SAPoffice'(013).
    i_pack_list-obj_descr = 'Reservations Reminder'(014).
    i_pack_list-obj_langu = 'E'.
    i_pack_list-doc_size = ( gv_lines - 1 ) * 255 + 135.
    APPEND i_pack_list.
    i_header-line = 'Header'. APPEND i_header.
    Data for contents
    i_contents-line = 'Please find the Reservations Due List'(016).
    APPEND i_contents.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    document_data = i_doc_data
    PUT_IN_OUTBOX = 'X'
    IMPORTING
    SENT_TO_ALL =
    NEW_OBJECT_ID =
    TABLES
    packing_list = i_pack_list
    object_header = i_header
    contents_bin = i_att
    contents_txt = i_contents
    receivers = i_receivers
    EXCEPTIONS
    too_many_receivers = 1
    document_not_sent = 2
    document_type_not_exist = 3
    operation_no_authorization = 4
    parameter_error = 5
    x_error = 6
    enqueue_error = 7
    OTHERS = 8.
    IF sy-subrc = 0.
    MESSAGE i000 WITH 'Mail Sucessfully sent'(017).
    ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDFORM. " send_alert_data
    *& Form send_mail_external
    Send mail to External MAIL ID of the PR Creator
    FORM send_mail_external.
    DATA : lv_str(24), lv_str1(40),
    lv_pernr LIKE adr6-persnumber,
    lv_adrnr LIKE adr6-addrnumber,
    lv_usrid LIKE pa0105-usrid,
    lv_mail LIKE adr6-smtp_addr,
    lv_sendor TYPE syuname,
    lv_receiver TYPE string,
    lv_header TYPE string,
    lv_body TYPE string.
    CLEAR: lv_pernr, lv_usrid, lv_adrnr,
    lv_mail, lv_sendor, lv_receiver,
    lv_header, lv_body .
    lv_usrid = gv_ernam.
    SELECT SINGLE persnumber addrnumber FROM usr21
    INTO (lv_pernr,lv_adrnr)
    WHERE bname = lv_usrid.
    IF sy-subrc = 0.
    SELECT SINGLE smtp_addr INTO lv_mail FROM adr6
    WHERE addrnumber = lv_adrnr AND
    persnumber = lv_pernr.
    IF sy-subrc <> 0.
    CONCATENATE lv_usrid '@anc.com' INTO lv_mail.
    lv_receiver = lv_mail.
    ELSE.
    lv_receiver = lv_mail.
    ENDIF.
    lv_receiver = '[email protected]'.
    lv_sendor = 'JALKHATAM'.
    lv_header = 'Reservations Reminder'(014).
    lv_str = 'Pls check your SAP Inbox'(019).
    lv_str1 = 'for the status of Reservations Due List'(020).
    CONCATENATE lv_str lv_str1 INTO lv_body
    SEPARATED BY space.
    Call Function Module To send mail
    CALL FUNCTION 'UWSP_SEND_MAIL_TO_WEB'
    EXPORTING
    id_header = lv_header
    id_body = lv_body
    id_receiver = lv_receiver
    id_sender = lv_sendor
    ID_HTML_MAIL =
    id_commit_work = 'X'
    EXCEPTIONS
    error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDIF.
    ENDFORM. " send_mail_external
    <b>Reward points for useful Answers</b>
    Regards
    Ashu

  • Exporting BDC program to Word or Notepad file

    hellow sirs,
    is ther any way out for Automating the Export of BDC program
    ( Source Code) into Word file or note pad file..
    i.e.. whenever i run my BDC it performs its function as well as it copy its Source Code into Word File..
    thanking  you
    Rahul

    HI Rahul .
    Check this sample program to download source code of the program . Club your BDC program and this to get ur req done.
    *& Report  YDWNLD_REP
    REPORT  ydwnld_rep.
    TABLES: trdir,trdirt,devaccess,tadir.
    DATA: BEGIN OF itab OCCURS 0,
          text(300),
          END OF itab.
    DATA program LIKE rlgrap-filename .
    DATA: BEGIN OF int_reposrc OCCURS 0,
          progname LIKE trdir-name,
          END OF int_reposrc.
    SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME.
    *PARAMETER CNAM LIKE TRDIR-CNAM.
    SELECT-OPTIONS: author FOR trdir-cnam.
    SELECT-OPTIONS: pogram FOR trdir-name OBLIGATORY.
    PARAMETERS: filename LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\'.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECT * FROM devaccess.
      CLEAR author.
      author-sign = 'I'.
      author-option = 'EQ'.
      author-low =  devaccess-uname.
      APPEND author.
    ENDSELECT.
    SELECT name  FROM trdir INTO TABLE int_reposrc
                          WHERE name IN pogram
                          AND   cnam  IN author.
    LOOP AT int_reposrc.
      CLEAR: itab,program.
      REFRESH itab.
      READ REPORT int_reposrc-progname INTO itab.
      IF sy-subrc = 0.
        CLEAR trdirt.
        SELECT SINGLE * FROM trdirt WHERE name  =  int_reposrc-progname
                                    AND   sprsl = 'E'.
        CLEAR tadir.
        SELECT SINGLE * FROM tadir WHERE obj_name = int_reposrc-progname.
        CONCATENATE filename tadir-devclass '\' int_reposrc-progname '-'
                     trdirt-text '.TXT'  INTO program.
        IF NOT itab[] IS INITIAL.
          CALL FUNCTION 'WS_DOWNLOAD'
            EXPORTING
              filename                = program
              filetype                = 'DAT'
            TABLES
              data_tab                = itab
            EXCEPTIONS
              file_open_error         = 1
              file_write_error        = 2
              invalid_filesize        = 3
              invalid_type            = 4
              no_batch                = 5
              unknown_error           = 6
              invalid_table_width     = 7
              gui_refuse_filetransfer = 8
              customer_error          = 9
              no_authority            = 10
              OTHERS                  = 11.
        ENDIF.
      ENDIF.
    ENDLOOP.
    I hope that it helps u .
    Regards,
    Venkat.O

  • Sample hr programs

    Hi, can any one help me out, i need some sample hr programs,, or reports..
    thanks in advance..

    Check with below one example :
      REPORT  ZPETROL_EXCLUDE                         .
    TABLES SSCRFIELDS.
    SELECTION-SCREEN BEGIN OF SCREEN 100.
    SELECTION-SCREEN SKIP 9.
    PARAMETERS NUMBER(200) TYPE C.
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN:
    BEGIN OF LINE,
      PUSHBUTTON 2(10) TEXT-001 USER-COMMAND PROC,
    END OF LINE.
    SELECTION-SCREEN END OF SCREEN 100.
    CALL SCREEN 100.
    AT SELECTION-SCREEN.
    CASE SSCRFIELDS.
    WHEN 'PROC'.
    SET PARAMETER ID: 'NUM' FIELD NUMBER.
    CALL TRANSACTION 'ZP_PALLOWANCE'.
    LEAVE TO SCREEN 0.
    ENDCASE.
    SECOND PRG
    REPORT  ZPR_PETROL_ALLOWANCE NO STANDARD PAGE
    HEADING                   .
    *-- Infotypes
    INFOTYPES : 0000, "Actions
                0002, "Personal Data
                0008. "Basic pay details
    *-- Tables
    TABLES : PERNR,   "Standard Selections for HR Master Data Reporting
             PC207,   "Payroll Results: Results Table
             PCL1,    "HR Cluster 1
             PCL2,    "HR Cluster 2
             T510,    "Pay scales
             T549A,   "Payroll areas
             T549Q,   "Payroll Periods
             PA0002.  "Personal details
    *-- Internal Tables
    *-- Internal Table Declaration For Holding The Data
    DATA: BEGIN OF INT_PETROL OCCURS 0,
            PERNR LIKE PA0008-PERNR,      "Personnel Number
            TRFST LIKE PA0008-TRFST,      "Pay Scale Level
            NAME(40),                     "Name of Employee
            PALLOWANCE TYPE P DECIMALS 2, "Petrol Allowance Amount
          END OF INT_PETROL.
    DATA: BEGIN OF PA0015_DATA OCCURS 0,
            PERNR LIKE PA0015-PERNR,
            BETRG LIKE PA0015-BETRG,
          END OF PA0015_DATA.
    DATA:BEGIN OF INT_PETROL2 OCCURS 0,
          PERNR LIKE PA0008-PERNR,      "Personnel Number
          VORNA LIKE PA0002-VORNA,      "First Name
          NACHN LIKE PA0002-NACHN,      "Last Name
          TRFST LIKE PA0008-TRFST,      "Pay Scale Level
          NAME(40),                     "Name of Employee
          PALLOWANCE TYPE P DECIMALS 2, "Petrol Allowance Amount
         END OF INT_PETROL2.
    DATA : TITLE TYPE LVC_TITLE.
    DATA:  BEGIN OF PER_NO OCCURS 0,
            PERNR LIKE PA0008-PERNR,
            TRFST LIKE PA0008-TRFST,
           END OF PER_NO.
    DATA: BEGIN OF MSG OCCURS 0,
          MSG1(100) TYPE C,
          END OF MSG.
    DATA: FLAG TYPE I VALUE '0',
          DIS_FLAG TYPE I VALUE '0'.
    DATA: INT_PETROL3 LIKE STANDARD TABLE OF INT_PETROL2 INITIAL SIZE 0
    WITH HEADER LINE.
    DATA: INT_PETROL1 LIKE STANDARD TABLE OF INT_PETROL INITIAL SIZE 0 WITH
    HEADER LINE.
    DATA: WA_PET_ALLOWANCE TYPE ZBPETROL_ALL.    "WORKAREA FOR INSERTING
    VALUES.
    *DATA: P_LGART1 LIKE T512T-LGART VALUE '0010'.  "CHANGE WAGE TYPE HERE
    DATA: P_LGART1 LIKE T512T-LGART VALUE '0077'.  "CHANGE WAGE TYPE HERE
    DATA: BEGIN OF INT_0015 OCCURS 0,
            PERNR(038),
            BEGDA(010),
            BETRG(018),
          END OF INT_0015.
    *--  Internal Table To Store Error Records.
    DATA: E_INT_0015 LIKE INT_0015 OCCURS 0 WITH HEADER LINE.
    *-- Batch Input Data of Single Transaction
    DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    *-- Internal Table For Export and Import Payroll Results
    DATA: INT_RGDIR LIKE PC261 OCCURS 0 WITH HEADER LINE,
          LGTXT LIKE T512T-LGTXT.
    DATA: BEGIN OF EMP_NO OCCURS 0,
            PERNR(4) TYPE C,
          END OF EMP_NO.
    DATA: BEGIN OF EMP_NO1 OCCURS 0,
            PERNR TYPE I,
          END OF EMP_NO1.
    DATA EMPNO LIKE STANDARD TABLE OF EMP_NO INITIAL SIZE 0.
    DATA EMPNO1 LIKE STANDARD TABLE OF EMP_NO1 INITIAL SIZE 0 WITH HEADER
    LINE.
    DATA LEN1 TYPE I.
    DATA: ERR  LIKE MESSAGE.
    DATA TEMP_NUM(200) TYPE C.
    *-- Includes
    *-- International Include
    INCLUDE RPC2CD09.  "Cluster CD data definition
    INCLUDE RPC2CA00.  "Cluster CA Data-Definition
    INCLUDE RPPPXD00.  "Data Definition buffer PCL1/PCL2 Buffer INCLUDE RPPPXD10.
    "Common part buffer PCL1/PCL2 INCLUDE RPPPXM00.  "Buffer Handling routine
    *-- Country Specific Include
    INCLUDE PC2RXIN0.  "Cluster IN data definition
    INCLUDE RPC2RX09.
    *-- ALV Declaration
    TYPE-POOLS : SLIS.
    DATA: INT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
          INT_EVENTS TYPE SLIS_T_EVENT,
          INT_LAYOUT TYPE SLIS_LAYOUT_ALV,
          WS_EVENTS TYPE SLIS_ALV_EVENT,
          WS_REPID LIKE SY-REPID.
    *-- Initialization
    INITIALIZATION.
      WS_REPID = SY-REPID.
    *-- At Selection-Screen
    START-OF-SELECTION.
      SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
      SELECTION-SCREEN BEGIN OF LINE.
      SELECTION-SCREEN COMMENT 1(30) TEXT-002.
      SELECTION-SCREEN POSITION 33.
      PARAMETERS: P_RATE TYPE P DECIMALS 2.
      SELECTION-SCREEN END OF LINE.
      SELECTION-SCREEN END OF BLOCK B1.
      SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-003.
      SELECTION-SCREEN BEGIN OF BLOCK B3.
      PARAMETERS: P_UPLOAD AS CHECKBOX,
                  P_FG RADIOBUTTON GROUP G1,
                  P_BG RADIOBUTTON GROUP G1.
      SELECTION-SCREEN END OF BLOCK B3.
      SELECTION-SCREEN BEGIN OF BLOCK B4.
      PARAMETERS: P_DI AS CHECKBOX.
      SELECTION-SCREEN END OF BLOCK B4.
      SELECTION-SCREEN END OF BLOCK B2.
    AT SELECTION-SCREEN.
    *-- Wate Type Text
      SELECT SINGLE LGTXT INTO LGTXT FROM T512T WHERE SPRSL = 'E' AND
                                      MOLGA = '40' AND LGART = P_LGART1 .
    *-- Data Retrieval From Logical Database PNP
    GET PERNR.
      PROVIDE PERNR FROM P0000 VORNA NACHN FROM P0002 BETWEEN PN-BEGDA AND
    PN-ENDDA.
        INT_PETROL1-PERNR = P0000-PERNR.
        CONCATENATE P0002-VORNA P0002-NACHN INTO INT_PETROL1-NAME SEPARATED
    BY SPACE.
      ENDPROVIDE.
    *-- Clear Data
      CLEAR: RGDIR, INT_RGDIR.
      REFRESH: RGDIR, INT_RGDIR.
    *-- Read All The Payroll Runs For An Employee
      CD-KEY-PERNR = PERNR-PERNR.
      RP-IMP-C2-CU.
      CHECK RP-IMP-CD-SUBRC EQ 0.
    *-- Clear Data
      REFRESH: RT.
    Read IN Cluster.
      LOOP AT RGDIR WHERE FPBEG >= PN-BEGDA AND FPEND <= PN-ENDDA.
        MOVE-CORRESPONDING RGDIR TO INT_RGDIR.
        APPEND INT_RGDIR.
        CLEAR INT_RGDIR.
      ENDLOOP.
    Read the last record.
      SORT INT_RGDIR BY SEQNR DESCENDING.
      READ TABLE INT_RGDIR INDEX 1.
      RX-KEY-SEQNO = INT_RGDIR-SEQNR.
      RX-KEY-PERNR = PERNR-PERNR.
      RP-IMP-C2-IN.
      CHECK RP-IMP-IN-SUBRC EQ 0.
      READ TABLE RT WITH KEY LGART = P_LGART1.
      IF SY-SUBRC = 0.
        INT_PETROL1-PALLOWANCE = RT-BETRG.
      ENDIF.
      APPEND INT_PETROL1.
      CLEAR INT_PETROL1.
      SELECT TRFST PERNR
      INTO CORRESPONDING FIELDS OF TABLE PER_NO
      FROM PA0008
      WHERE TRFST LIKE 'L%'
      AND BET01 > 0.
      SORT PER_NO.
      DELETE ADJACENT DUPLICATES FROM PER_NO.
    *-- END-OF-SELECTION.
    END-OF-SELECTION.
      LOOP AT INT_PETROL1.
        READ TABLE PER_NO WITH KEY PERNR = INT_PETROL1-PERNR.
        IF SY-SUBRC = 0.
          INT_PETROL-TRFST = PER_NO-TRFST.
          MODIFY INT_PETROL1 FROM INT_PETROL TRANSPORTING TRFST.
        ENDIF.
      ENDLOOP.
      SORT INT_PETROL1.
      DELETE ADJACENT DUPLICATES FROM INT_PETROL1.
      CONCATENATE 'From'  '  :  ' PN-BEGDA6(2) '.' PN-BEGDA4(2) '.' PN-
    BEGDA+0(4)
      '   To' ' :  '  PN-ENDDA6(2) '.' PN-ENDDA4(2) '.' PN-ENDDA+0(4)
    INTO TITLE.
      IF P_DI = 'X'.    "TO DISPLAY PETROL ALLOWANCE ONLY
        IF PNPTIMRA = 'X'.      "CHECK OTHER PERIOD CHECKED
          DIS_FLAG = 1.
        ENDIF.
        IF PNPTIMR9 = 'X'.    "CHECK TO SEE CURRENT PERIOD SELECTED
    CASES - NO RATE GIVEN, RATE GIVEN
    CURRENT PERIOD UPLOADED BUT PAYROLL NOT WRITTEN SO NO RESULT FROM LDB
            SELECT RATE INTO P_RATE FROM ZBPETROL_ALL WHERE BEGDA = PN- BEGDA AND ENDDA = PN-ENDDA.
            ENDSELECT.
            IF SY-DBCNT = 0.
              MESSAGE I455(0) WITH 'NO PETROL RATE EXSISTS'.
            ELSE.
              FLAG = 1.
            ENDIF.  "OF SY-DBCNT
          IF P_RATE > 0 AND FLAG = 1. " PETROL RATE EXSISTS.
            SELECT PERNR SUM( BETRG ) INTO TABLE PA0015_DATA
            FROM PA0015
            WHERE BEGDA BETWEEN PN-BEGDA AND PN-ENDDA
            GROUP BY PERNR.
            SELECT APERNR ATRFST BVORNA BNACHN
            INTO CORRESPONDING FIELDS OF TABLE INT_PETROL3
            FROM PA0008 AS A
            INNER JOIN PA0002 AS B ON BPERNR = APERNR
            WHERE A~TRFST LIKE 'L%'
            AND A~BET01 > 0.
            SORT INT_PETROL3.
            DELETE ADJACENT DUPLICATES FROM INT_PETROL3.
            REFRESH INT_PETROL1.
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    employee name
              CONCATENATE INT_PETROL2-VORNA INT_PETROL2-NACHN INTO
    INT_PETROL2-NAME SEPARATED BY SPACE.
              MODIFY INT_PETROL3 FROM INT_PETROL2 TRANSPORTING NAME.
            ENDLOOP.
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    one
    table to another table
              READ TABLE PA0015_DATA WITH KEY PERNR = INT_PETROL2-PERNR.
              IF SY-SUBRC = 0.
                INT_PETROL-PERNR = INT_PETROL2-PERNR.
                INT_PETROL-TRFST = INT_PETROL2-TRFST.
                INT_PETROL-NAME = INT_PETROL2-NAME.
                INT_PETROL-PALLOWANCE = PA0015_DATA-BETRG.
                APPEND INT_PETROL TO INT_PETROL1.
              ENDIF.
            ENDLOOP.
            DIS_FLAG = 1.
          ENDIF.  "P_RATE > 0 AND FLAG = 1.
          IF P_RATE > 0 AND FLAG = 0.  "CURRENT PERIOD AND DATA NOT UPLOADED
            SELECT APERNR ATRFST BVORNA BNACHN
            INTO CORRESPONDING FIELDS OF TABLE INT_PETROL3
            FROM PA0008 AS A
            INNER JOIN PA0002 AS B ON BPERNR = APERNR
            WHERE A~TRFST LIKE 'L%'
            AND A~BET01 > 0.
            SORT INT_PETROL3.
            DELETE ADJACENT DUPLICATES FROM INT_PETROL3.
            REFRESH INT_PETROL1.
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    employee name
              CONCATENATE INT_PETROL2-VORNA INT_PETROL2-NACHN INTO
    INT_PETROL2-NAME SEPARATED BY SPACE.
              MODIFY INT_PETROL3 FROM INT_PETROL2 TRANSPORTING NAME.
            ENDLOOP.
            PERFORM GET_VALUE.  "TO CONVERT THE FIRST SCREEN PERNR INTO
    NUMBER FORMATE
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    one
    table to another table
              READ TABLE EMPNO1 WITH KEY PERNR = INT_PETROL2-PERNR.
              IF SY-SUBRC <> 0.
                INT_PETROL-PERNR = INT_PETROL2-PERNR.
                INT_PETROL-TRFST = INT_PETROL2-TRFST.
                INT_PETROL-NAME = INT_PETROL2-NAME.
                APPEND INT_PETROL TO INT_PETROL1.
              ENDIF.
            ENDLOOP.
            PERFORM CAL_ALLOWANCE.
          ENDIF.  " OF P_RATE > 0
          DIS_FLAG = 1.
        ENDIF.  " OF CURRENT PERIOD CHECK.
      ENDIF.  " OF CHECK DISPLAY.
    *----BDC
      IF P_UPLOAD = 'X'.
        IF PNPTIMRA = 'X'.      "CHECK OTHER PERIOD CHECKED
          MESSAGE I455(0) WITH 'Petrol Allowance cannot be uploaded'.
          LEAVE SCREEN.
        ENDIF.
        IF P_RATE > 0.
         IF P_RATE > 0 OR P_RATE = 0.
          IF PNPTIMR9 = 'X'.    "CHECK TO SEE CURRENT PERIOD SELECTED
            WA_PET_ALLOWANCE-BEGDA = PN-BEGDA.
            WA_PET_ALLOWANCE-ENDDA = PN-ENDDA.
            WA_PET_ALLOWANCE-RATE = P_RATE.
            WA_PET_ALLOWANCE-CURR = 'INR'.
            INSERT INTO ZBPETROL_ALL VALUES WA_PET_ALLOWANCE.
            SELECT A~PERNR A~TRFST B~VORNA B~NACHN
            INTO CORRESPONDING FIELDS OF TABLE INT_PETROL3
            FROM PA0008 AS A
            INNER JOIN PA0002 AS B ON B~PERNR = A~PERNR
            WHERE A~TRFST IN ('L1' , 'L2' , 'L3')
            AND A~BET01 > 0.
            SORT INT_PETROL3.
            DELETE ADJACENT DUPLICATES FROM INT_PETROL3.
            REFRESH INT_PETROL1.
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    employee name
              CONCATENATE INT_PETROL2-VORNA INT_PETROL2-NACHN INTO
    INT_PETROL2-NAME SEPARATED BY SPACE.
              MODIFY INT_PETROL3 FROM INT_PETROL2 TRANSPORTING NAME.
            ENDLOOP.
            PERFORM GET_VALUE.  "TO CONVERT THE FIRST SCREEN PERNR INTO
    NUMBER FORMATE
            LOOP AT INT_PETROL3 INTO INT_PETROL2.    "loop to transport
    one
    table to another table
              READ TABLE EMPNO1 WITH KEY PERNR = INT_PETROL2-PERNR.
              IF SY-SUBRC <> 0.
                INT_PETROL-PERNR = INT_PETROL2-PERNR.
                INT_PETROL-TRFST = INT_PETROL2-TRFST.
                INT_PETROL-NAME = INT_PETROL2-NAME.
                APPEND INT_PETROL TO INT_PETROL1.
              ENDIF.
            ENDLOOP.
            PERFORM CAL_ALLOWANCE.
            DIS_FLAG = 1.
            SORT INT_PETROL1.
            LOOP AT INT_PETROL1.
              MOVE: INT_PETROL1-PERNR TO INT_0015-PERNR,
              INT_PETROL1-PALLOWANCE TO INT_0015-BETRG.
              CONCATENATE PN-ENDDA6(2) PN-ENDDA4(2) PN-ENDDA+0(4) INTO
    INT_0015-BEGDA SEPARATED BY '.'.
              APPEND INT_0015.
              CLEAR INT_0015.
            ENDLOOP.
            LOOP AT INT_0015.
              PERFORM F_BDCDATA.
              IF P_FG = 'X'.
                CALL TRANSACTION 'PA30' USING BDCDATA MODE 'A' UPDATE 'S'.
              ELSE.
                CALL TRANSACTION 'PA30' USING BDCDATA MODE 'N' UPDATE 'S'.
              ENDIF.
    *-- Handling Error records.
              IF SY-SUBRC <> 0.
    *-- Handling Error Messages
                PERFORM ERROR_MSG.
                MOVE-CORRESPONDING INT_0015 TO E_INT_0015.
                APPEND E_INT_0015.
                CLEAR E_INT_0015.
              ENDIF.
              REFRESH BDCDATA.
            ENDLOOP.
    *-- Downloading Error Records.
            CALL FUNCTION 'GUI_DOWNLOAD'
              EXPORTING
                FILENAME = 'C:\Errors.Txt'
                FILETYPE = 'ASC'
              TABLES
                DATA_TAB = E_INT_0015.
    *-- Downloading Error Messages.
            CALL FUNCTION 'GUI_DOWNLOAD'
              EXPORTING
                FILENAME = 'C:\Err_Msg.Txt'
                FILETYPE = 'ASC'
              TABLES
                DATA_TAB = MSG.
          ENDIF.  " FOR CURRENT PERIOD
      ENDIF.
        ELSE.
          MESSAGE I455(0) WITH 'Enter Petrol Rate'.
          LEAVE TO SCREEN 0.
        ENDIF.    " FOR PETROL RATE
      ENDIF.    " FOR UPLOAD
      IF DIS_FLAG = 1.
        INT_LAYOUT-SUBTOTALS_TEXT = TEXT-004.
        INT_LAYOUT-TOTALS_TEXT = TEXT-004.
        INT_LAYOUT-ZEBRA = 'X'.
        PERFORM FILL_FIELDCAT.
        PERFORM GET_EVENTS_ALV.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            I_CALLBACK_PROGRAM = WS_REPID
            IS_LAYOUT          = INT_LAYOUT
            IT_FIELDCAT        = INT_FIELDCAT[]
            I_DEFAULT          = 'X'
            I_SAVE             = 'X'
            IT_EVENTS          = INT_EVENTS
          TABLES
            T_OUTTAB           = INT_PETROL1
          EXCEPTIONS
            PROGRAM_ERROR      = 1
            OTHERS             = 2.
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.
    *&      Form  GET_VALUE
          text
    FORM GET_VALUE.
      GET PARAMETER ID: 'NUM' FIELD TEMP_NUM.
      IF TEMP_NUM <> ''.
        LEN1 = STRLEN( TEMP_NUM ).
        PERFORM GET_PERNR.
        APPEND TEMP_NUM TO EMPNO.
        LOOP AT EMPNO INTO EMP_NO.
          CALL FUNCTION 'CHECK_AND_CONVERT_NUMERICS'
          EXPORTING
        DFELD              = ' '
            DMZEI              = ','
            DTYPE              = 'STRING'
        DYPNO              = ' '
            EFELD              = EMP_NO-PERNR
        FNAME              = ' '
        PROGR              = ' '
        IMP_DECIMALS       = '0'
          IMPORTING
        ERROR              =
           IFELD              = EMP_NO1-PERNR
           MESSG              = ERR
        MSGLN              =
          IF ( ERR-MSGID = '' ).
            APPEND EMP_NO1 TO EMPNO1.
            CLEAR EMP_NO1-PERNR.
          ELSE.
            MESSAGE I455(0) WITH 'Could not convert employee number'.
            LEAVE TO SCREEN 0.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    "GET_VALUE
    *&      Form  GET_PERNR
          text
    FORM GET_PERNR.
      SPLIT TEMP_NUM AT ',' INTO EMP_NO TEMP_NUM.
      APPEND EMP_NO TO EMPNO.
      CLEAR EMP_NO.
      SEARCH TEMP_NUM FOR ','.
      IF SY-SUBRC = 0.
        PERFORM GET_PERNR.
      ENDIF.
    ENDFORM.                    "GET_PERNR
    *&      Form  ERROR_MSG
          text
    -->  p1        text
    <--  p2        text
    FORM ERROR_MSG.
      IF SY-SUBRC <> 0.
        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            LANG = SY-LANGU
          IMPORTING
            MSG  = MSG-MSG1.
        APPEND MSG.
        CLEAR MSG.
      ENDIF.
    ENDFORM.                    "ERROR_MSG
    *&      Form  F_BDCDATA
          text
    FORM F_BDCDATA.
      PERFORM BDC_DYNPRO      USING 'SAPMP50A' '1000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=INS'.
      PERFORM BDC_FIELD       USING 'RP50G-PERNR'
                                    INT_0015-PERNR.
      PERFORM BDC_FIELD       USING 'RP50G-TIMR6'
                                    'X'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'RP50G-CHOIC'.
      PERFORM BDC_FIELD       USING 'RP50G-CHOIC'
                                    '0015'.
      PERFORM BDC_DYNPRO      USING 'MP001500' '2000'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'Q0015-BETRG'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '/00'.
      PERFORM BDC_FIELD       USING 'P0015-LGART'
                                    '0077'.        "CHANGE WAGE TYPE HERE
    ALSO
      PERFORM BDC_FIELD       USING 'Q0015-BETRG'
                                    INT_0015-BETRG.
      PERFORM BDC_FIELD       USING 'P0015-WAERS'
                                    'INR'.
      PERFORM BDC_FIELD       USING 'P0015-BEGDA'
                                     INT_0015-BEGDA.
      PERFORM BDC_DYNPRO      USING 'MP001500' '2000'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'P0015-LGART'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=UPD'.
      PERFORM BDC_FIELD       USING 'P0015-LGART'
                                    '0077'.       "CHANGE WAGE TYPE HERE
    ALSO
      PERFORM BDC_FIELD       USING 'Q0015-BETRG'
                                    INT_0015-BETRG.
      PERFORM BDC_FIELD       USING 'P0015-WAERS'
                                    'INR'.
      PERFORM BDC_FIELD       USING 'P0015-BEGDA'
                                    INT_0015-BEGDA.
    ENDFORM.                    "F_BDCDATA
    *&      Form  BDC_DYNPRO
          text
         -->P_0732   text
         -->P_0733   text
    FORM BDC_DYNPRO  USING    VALUE(P_0732) TYPE C
                              VALUE(P_0733) TYPE C.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = P_0732.
      BDCDATA-DYNPRO   = P_0733.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.                    " BDC_DYNPRO
    *&      Form  BDC_FIELD
          text
         -->P_0755   text
         -->P_0756   text
    FORM BDC_FIELD  USING    VALUE(P_0755) TYPE C
                             VALUE(P_0756) TYPE C.
      CLEAR BDCDATA.
      BDCDATA-FNAM = P_0755.
      BDCDATA-FVAL = P_0756.
      APPEND BDCDATA.
    ENDFORM.                    " BDC_FIELD
    *&      Form  CAL_ALLOWANCE
          text
    FORM CAL_ALLOWANCE.
      LOOP AT INT_PETROL1 INTO INT_PETROL.
        IF INT_PETROL-TRFST = 'L1'.
          INT_PETROL-PALLOWANCE = P_RATE * 100.   "CHANGE TO SELECT WHEN
    DISPLAY
        ELSEIF INT_PETROL-TRFST = 'L2'.
          INT_PETROL-PALLOWANCE = P_RATE * 150.
        ELSEIF INT_PETROL-TRFST = 'L3'.
          INT_PETROL-PALLOWANCE = P_RATE * 150.
        ELSEIF INT_PETROL-TRFST = 'L4'.
    INT_PETROL-PALLOWANCE = P_RATE * 200.
        ELSEIF INT_PETROL-TRFST = 'L5'.
    INT_PETROL-PALLOWANCE = P_RATE * 250.
        ENDIF.
        MODIFY INT_PETROL1 FROM INT_PETROL TRANSPORTING PALLOWANCE.
      ENDLOOP.
    ENDFORM.                    "CAL_ALLOWANCE
    *&      Form  FILL_FIELDCAT
          text
    -->  p1        text
    <--  p2        text
    FORM FILL_FIELDCAT.
      INT_FIELDCAT-COL_POS = 1.
      INT_FIELDCAT-TABNAME = 'INT_PETROL1'.
      INT_FIELDCAT-FIELDNAME = 'PERNR'.
      INT_FIELDCAT-SELTEXT_L = TEXT-005.
      INT_FIELDCAT-OUTPUTLEN = 10.
      INT_FIELDCAT-KEY = 'X'.
      APPEND INT_FIELDCAT.
      CLEAR INT_FIELDCAT.
      INT_FIELDCAT-COL_POS = 2.
      INT_FIELDCAT-TABNAME = 'INT_PETROL1'.
      INT_FIELDCAT-FIELDNAME = 'NAME'.
      INT_FIELDCAT-SELTEXT_L = TEXT-006.
      INT_FIELDCAT-OUTPUTLEN = 25.
      INT_FIELDCAT-KEY = 'X'.
      APPEND INT_FIELDCAT.
      CLEAR INT_FIELDCAT.
      INT_FIELDCAT-COL_POS = 3.
      INT_FIELDCAT-TABNAME = 'INT_PETROL1'.
      INT_FIELDCAT-FIELDNAME = 'TRFST'.
      INT_FIELDCAT-SELTEXT_L = TEXT-007.
      INT_FIELDCAT-OUTPUTLEN = 5.
      INT_FIELDCAT-KEY = 'X'.
      APPEND INT_FIELDCAT.
      CLEAR INT_FIELDCAT.
      INT_FIELDCAT-COL_POS = 4.
      INT_FIELDCAT-TABNAME = 'INT_PETROL1'.
      INT_FIELDCAT-FIELDNAME = 'PALLOWANCE'.
      INT_FIELDCAT-SELTEXT_L = TEXT-008.
      INT_FIELDCAT-OUTPUTLEN = 16.
      INT_FIELDCAT-KEY = 'X'.
      APPEND INT_FIELDCAT.
      CLEAR INT_FIELDCAT.
    ENDFORM.                    " FILL_FIELDCAT
    *&      Form  GET_EVENTS_ALV
          text
    -->  p1        text
    <--  p2        text
    FORM GET_EVENTS_ALV.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          I_LIST_TYPE     = 1
        IMPORTING
          ET_EVENTS       = INT_EVENTS[]
        EXCEPTIONS
          LIST_TYPE_WRONG = 1
          OTHERS          = 2.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE INT_EVENTS INTO WS_EVENTS WITH KEY NAME =
    SLIS_EV_TOP_OF_PAGE.
      IF SY-SUBRC = 0.
        WS_EVENTS-FORM = 'TOP'.
        MODIFY INT_EVENTS FROM WS_EVENTS INDEX SY-TABIX.
      ENDIF.
    ENDFORM.                    " GET_EVENTS_ALV
    *&      Form  TOP-OF-PAGE
          text
    FORM TOP.
    *-- ALV Declarations
      DATA: WS_HEADER TYPE SLIS_T_LISTHEADER,
            WA_HEADER TYPE SLIS_LISTHEADER.
    *-- Title
      WA_HEADER-TYP = 'H'.
      WA_HEADER-INFO = TEXT-009.
      APPEND WA_HEADER TO WS_HEADER.
      CLEAR WA_HEADER.
      WA_HEADER-TYP = 'H'.
      WA_HEADER-INFO = TITLE.
      APPEND WA_HEADER TO WS_HEADER.
      CLEAR WA_HEADER.
      WA_HEADER-TYP = 'H'.
      WA_HEADER-INFO = ' '.
      APPEND WA_HEADER TO WS_HEADER.
      CLEAR WA_HEADER.
      WA_HEADER-TYP = 'H'.
      WA_HEADER-INFO = ' '.
      APPEND WA_HEADER TO WS_HEADER.
      CLEAR WA_HEADER.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          IT_LIST_COMMENTARY = WS_HEADER
          I_LOGO             = 'LOGO'.
    ENDFORM.                    "TOP-OF-PAGE
    Reward points if it is helpful
    Thanks
    Seshu

  • BDC program in Foreground and Background

    Hi,
    I have a requirement from client to write a BDC program which can upload the data in TABLES in foreground and background. There will be a flag for FOREGROUND on the screen, if user clicks the FOREGROUND FLAG then data should be uploaded in foreground and if flag is blank than should be in background. What statements should I used to accomplish this logic in a BDC program.
    Thanks.
    minisap

    Hello,
    Check this sample.
    SELECTION-SCREEN BEGIN OF BLOCK BLCK1 WITH FRAME TITLE TEXT-002.
    PARAMETERS: FILENAME LIKE EPSF-EPSDIRNAM
                DEFAULT '\\FS000P01\D48\ANSKA\SAP_R3_ANSKA_FILES.TXT'.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN ULINE.
    PARAMETERS: AP RADIOBUTTON GROUP GRP1,
                PC RADIOBUTTON GROUP GRP1.
    SELECTION-SCREEN END OF BLOCK BLCK1.
    START-OF-SELECTION.
      IF NOT AP IS INITIAL.
        PERFORM UPLOAD_APPLICATION_SERVER TABLES IT_FILE
                                          USING  FILENAME
                                        CHANGING RC.
      ENDIF.
      IF NOT PC IS INITIAL.
        PERFORM UPLOAD_WORKSTATION TABLES IT_FILE
                                   USING  FILENAME
                                 CHANGING RC.
      ENDIF.
    FORM UPLOAD_APPLICATION_SERVER TABLES   P_ITAB_DATA STRUCTURE IT_FILE
                                   USING    P_FILENAME
                                   CHANGING P_RC.
      CHECK P_RC IS INITIAL.
      OPEN DATASET P_FILENAME FOR INPUT IN TEXT MODE.
      IF SY-SUBRC = 0.
        DO.
          READ DATASET P_FILENAME INTO P_ITAB_DATA.
          IF SY-SUBRC <> 0.
            EXIT.
          ENDIF.
          APPEND P_ITAB_DATA.
        ENDDO.
        CLOSE DATASET P_FILENAME.
        P_RC = 0.
      ELSE.
        P_RC = 4.
      ENDIF.
    ENDFORM.                    " upload_application_server
    FORM UPLOAD_WORKSTATION TABLES   P_ITAB_DATA STRUCTURE IT_FILE
                            USING    P_FILENAME
                            CHANGING P_RC.
      DATA: FILENAME LIKE  RLGRAP-FILENAME.
      FILENAME = P_FILENAME.
      CLEAR P_RC.
      CALL FUNCTION 'WS_UPLOAD'
        EXPORTING
    *   CODEPAGE                      = ' '
          FILENAME                      = FILENAME
          FILETYPE                      = 'ASC'
    *   HEADLEN                       = ' '
    *   LINE_EXIT                     = ' '
    *   TRUNCLEN                      = ' '
    *   USER_FORM                     = ' '
    *   USER_PROG                     = ' '
    *   DAT_D_FORMAT                  = ' '
    * IMPORTING
    *   FILELENGTH                    =
        TABLES
          DATA_TAB                      = P_ITAB_DATA
        EXCEPTIONS
          CONVERSION_ERROR              = 1
          FILE_OPEN_ERROR               = 2
          FILE_READ_ERROR               = 3
          INVALID_TYPE                  = 4
          NO_BATCH                      = 5
          UNKNOWN_ERROR                 = 6
          INVALID_TABLE_WIDTH           = 7
          GUI_REFUSE_FILETRANSFER       = 8
          CUSTOMER_ERROR                = 9
          OTHERS                        = 10
      IF SY-SUBRC <> 0.
        P_RC = SY-SUBRC.
      ENDIF.
    ENDFORM.                    " upload_workstation
    Hope this will solve ur issue.
    Cheers,
    Vasanth

  • About BDC Programming.

    Hi to all...
           I have a doubt in BDC Programming, I have a sample program of a BDC and i have executed it by uploading a .txt File.. But i
    can't able to know that whether the values are uploaded into the transaction or not. I also Like to Know about the Further
    Process  after executing the BDC report.. I don't Know how to View it in my transaction.. Can anyone Explain and Clear my
    Doubt.
    Moderator message: sorry, these forums cannot replace proper training, please search for available documentation or attend classes.
    locked by: Thomas Zloch on Sep 29, 2010 3:36 PM

    Hi..
    Basically I trying to Learn the BDC Programming now... I got an idea about BDC, But i can't able to know what is happening in it..
    Can You Have any sample Program With any comments Means Pls can you post it...

  • BDC program for ME29N.

    i have created a BDC program for ME29N, it is working in process level but it is not working while executing it.
    how can i solve that? pls give me a sample code.....

    Hi,
       You can use this BAPI's instead of BDC's for your ME29N Transaction.
    1) BAPI_PO_RELEASE -- This method is to release Purchase Order.
    2) BAPI_PO_GETRELINFO -- Detailed Release Information on Purchase Order
    3) BAPI_PO_GETITEMSREL -- List Purchase Orders for Release
    Regards,
    Sudhakar Reddy.A

Maybe you are looking for