REFRESH BDCDATA

Hi Gurus ,
Could anyone guide me for the folowing scenario : -BDC Call transaction
  A custom report was created to extend payee vendors for every principal vendors in two company codes : xxxx and yyyy.
  But when ever tested : the payee vendors were getting created for one company code and later when the same payee vendor details were being passed as Reference Vendor information : it was not creating vendors in the other company code : yyyy.
using FK01 : creating vendors .
1st Step : provide company code (xxxx) and Account groupdetails in FK01 : vendor created through custom interface.
2nd Step : created vendor details : Vendor Number (created in step1),  Company Code (yyyy), Account group(grp1) and Reference Vendor details : Vendor number (created in step1) , Company Code (xxxx) were suppose to be passed through
the BDC process.
While testing the BDC the first step was executing fine no issues but while executing the second step the reference field details were not populating automatically (it was blank) although the Recording was correct , all the neccessary BDC code were available .
Now between the first and second creation there was a BDC table which was being populated with DYNNAME , FNAME FVAL detatils: all the BDC details were in that table. I have used a REFRESH BDCDATA between 1st and 2 nd step (as mentioned above) and then it started creating the vendors with reference details also.
Could you please tell me the importance of REFRESH BDCDATA ?
My question is : what is the importance of REFRESH BDCDATA : since after adding that i could check that all the neccessary details were being populated to the screen fields of FK01 (first screen) through BDC ?
Thanks
Kylietisha
Edited by: kylietisha on Jun 23, 2010 7:03 AM

Hi Kylietisha,
                 A transaction can contain many screens, in ur case FK01 u r updating in 2 screens.
                 For eg. if u have to uplaod 10 vendor creation ie (10 records in flat file)  using BDC in ur case each record will go to 2 screens then BDCDATA internal table will populate first record i.e data for two screens.
                  After completing 1st record(i.e for 2 screens) before going to 2nd record u have to refresh table BDCDATA the reason is if u don't REFRESH  the 1st record will also be there so when transaction is called 1st record data will go.
             Plz check wheter data for whole cycle of the transaction is present in BDCDATA and ur refreshing when ur going for 2nd record.
Hope this might help u............

Similar Messages

  • Unable to create batch input

    could the error generated be because of the file?? the code is as follows:
    a<u>sset upload</u>
    report ZAST_UPL line-size 255.
    data:   remaining_life_yrs type p,
            remaining_life_periods type p,
            days type p,
            remainder type p,
            useful_life type p,
            useful_period type p.
    include bdcrecx1.
    parameters: pfile type rlgrap-filename.
    tables: ankb.
    *data: pfile1 type string.
    TYPES: begin of t_datatab ,
                  assets_class(10),
                  c_code(4),
                  description(50),
                  add_description(50),
                  serial(18),
                  capitalisation(8),
                  c_centre(10),
                  plant(4),
                  asset_location(10),
                  amount1(13),
                  amount2(13),
           end of t_datatab.
    data: begin of t_datatabfinal occurs 0,
                  assets_class(10),
                  c_code(4),
                  description(50),
                  add_description(50),
                  serial(18),
                  capitalisation(8),
                  c_centre(10),
                  plant(4),
                  asset_location(10),
                  amount1(13),
                  amount2(13),
                  end of t_datatabfinal.
    data : assets_class1(4) value '0000',
           class_asset(8).
    data : date_diff type p, earliest type C, timediff type p.
    data : a_new type d, b_new type d.
    data : capitalisation type string.
    DATA: it_datatab TYPE STANDARD TABLE OF t_datatab,
          wa_datatab TYPE t_datatab.
    DATA: wa_record TYPE t_datatab,
          it_record TYPE STANDARD TABLE OF t_datatab INITIAL SIZE 0.
    DATA: itab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
    DATA: gd_currentrow TYPE i.
    At selection screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          field_name = 'PFILE'
        IMPORTING
          file_name  = pfile.
      data: itab like ALSMEX_TABLINE occurs 0 with header line.
    *pfile1 = pfile.
    START-OF-SELECTION.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          FILENAME                      = pfile
          I_BEGIN_COL                   = '1'
          I_BEGIN_ROW                   = '1'       "Column headers not required
          I_END_COL                     = '11'
          I_END_ROW                     = '4'
        TABLES
          INTERN                        = itab
                EXCEPTIONS
                  INCONSISTENT_PARAMETERS       = 1
                  UPLOAD_OLE                    = 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.
    Sort table by rows and colums
      SORT itab BY row col.
    Get first row retrieved
      READ TABLE itab INDEX 1.
    Set first row retrieved to current row
      gd_currentrow = itab-row.
      LOOP AT itab.
      Reset values for next row
        IF itab-row NE gd_currentrow.
          APPEND wa_datatab TO it_record.
          CLEAR wa_datatab.
          gd_currentrow = itab-row.
        ENDIF.
        CASE itab-col.
          WHEN '0001'.
            wa_datatab-assets_class       = itab-value.
          WHEN '0002'.
            wa_datatab-c_code             = itab-value.
          WHEN '0003'.
            wa_datatab-description        = itab-value.
          WHEN '0004'.
            wa_datatab-add_description    = itab-value.
          WHEN '0005'.
            wa_datatab-serial             = itab-value.
          WHEN '0006'.
            wa_datatab-capitalisation     = itab-value.
          WHEN '0007'.
            wa_datatab-c_centre           = itab-value.
          WHEN '0008'.
            wa_datatab-plant               = itab-value.
          WHEN '0009'.
            wa_datatab-asset_location     = itab-value.
          WHEN '0010'.
            wa_datatab-amount1            = itab-value.
          WHEN '0011'.
            wa_datatab-amount2            = itab-value.
          WHEN OTHERS.
        ENDCASE.
      ENDLOOP.
      APPEND wa_datatab TO it_record.
      LOOP AT it_record INTO t_datatabfinal.
        APPEND t_datatabfinal.
      ENDLOOP.
    start-of-selection.
      refresh bdcdata.
      clear bdcdata.
      perform open_group.
      Loop at t_datatabfinal.
        data: stop(1),
              date1(8).
        stop = `.`.
        concatenate assets_class1 t_datatabfinal-assets_class into class_asset.
        concatenate t_datatabfinal-capitalisation(2) stop t_datatabfinal-capitalisation2(2) stop t_datatabfinal-capitalisation6(2) into date1.
        select * from ankb where ANLKL = class_asset
                                        and AFABE = '01'
                                        and afasl = 'LINS'.
          if sy-subrc = 0 .
            useful_life = ankb-NDJAR.
            useful_period = ankb-NDPER.
          endif.
          useful_life = useful_life * 365.
          useful_period = useful_period * 30.
        endselect.
        perform bdc_dynpro      using 'SAPLAIST' '0105'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'ANLA-BUKRS'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        perform bdc_field       using 'ANLA-ANLKL'                              "TOPICK Asset class
                                      t_datatabfinal-assets_class.
                                   '4000'.
        perform bdc_field       using 'ANLA-BUKRS'                              "TOPICK Company code
                                      t_datatabfinal-c_code.
                                   '2000'.
        perform bdc_dynpro      using 'SAPLAIST' '1000'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=TAB02'.
        perform bdc_field       using 'ANLA-TXT50'                              "TOPICK Asset description
                                      t_datatabfinal-description.
                                   'Compaq Evo D3102'.
        perform bdc_field       using 'ANLA-TXA50'                              "TOPICK Additional asset description
                                      t_datatabfinal-add_description.
                                   'Desktop Computer'.
        perform bdc_field       using 'ANLA-SERNR'                              "TOPICK Serial number
                                      t_datatabfinal-serial.
                                   'V309LB42A259'.
        perform bdc_field       using 'RA02S-XHIST'
                                      'X'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'ANLA-AKTIV'.
        perform bdc_field       using 'ANLA-AKTIV'                              "TOPICK Asset capitalization
                                      date1.
                                   '13.10.03'.
        perform bdc_dynpro      using 'SAPLAIST' '1000'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'ANLZ-KOSTL'.
        perform bdc_field       using 'ANLZ-KOSTL'
                                      t_datatabfinal-c_centre.
                                   '203000'.
        perform bdc_dynpro      using 'SAPLAIST' '1000'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=ALTD'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'ANLZ-STORT'.
    perform bdc_field       using 'ANLZ-GSBER'                              "TOPICK Business area
                                   t_datatabfinal-bus_area.
                                   'B008'.
        perform bdc_field       using 'ANLZ-KOSTL'                              "TOPICK Cost center
                                      t_datatabfinal-c_centre.
                                   '203000'.
        perform bdc_field       using 'ANLZ-WERKS'                               "TOPICK Plant
                                      t_datatabfinal-plant.
                                   '2001'.
        perform bdc_field       using 'ANLZ-STORT'                              "TOPICK Asset location
                                      t_datatabfinal-asset_location.
                                   '001'.
        perform bdc_field       using 'ANLZ-FISTL'                              "TOPICK Funds center
                                      t_datatabfinal-c_centre.
                                   '203000'.
        perform bdc_dynpro      using 'SAPLALTD' '1100'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
       perform bdc_field       using 'BDC_CURSOR'
                                     'RALT_DYNP_STRUC-ANBTR01(06)'.
        perform bdc_field       using 'RALT_DYNP_STRUC-ANBTR01(01)'
                                      t_datatabfinal-amount1.
                                 '          450000'.
        perform bdc_field       using 'RALT_DYNP_STRUC-ANBTR01(06)'
                                      t_datatabfinal-amount2.
                                 '           25000'.
        perform bdc_dynpro      using 'SAPLALTD' '1100'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'ANLA-ANLN1'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=BUCH'.
        perform bdc_transaction using 'AS91'.
        concatenate t_datatabfinal-capitalisation4(4) t_datatabfinal-capitalisation2(2) t_datatabfinal-capitalisation(2) into capitalisation.
        a_new = '20070701'. "Date format is YYYYMMDD
        b_new = capitalisation. "Date format is YYYYMMDD
        CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
          EXPORTING
            date1            = a_NEW
            time1            = '000000'
            date2            = b_NEW
            time2            = '000000'
          IMPORTING
            DATEDIFF         = date_diff
          EXCEPTIONS
            INVALID_DATETIME = 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.
    ***calculation of remaining life in years and periods for the asset***
        remaining_life_yrs = ( useful_life - date_diff ) div 365.
        remainder = ( useful_life - date_diff ) mod 365.
        remaining_life_periods = remainder div 30.
        perform bdc_dynpro      using 'SAPLAIST' '0100'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'ANLA-ANLN1'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=D190'.
       perform bdc_field       using 'ANLA-ANLN1'
                                     '40006'.
        perform bdc_field       using 'ANLA-ANLN2'
                                      '0'.
        perform bdc_field       using 'ANLA-BUKRS'
                                      t_datatabfinal-c_code.
                                     '2000'.
        perform bdc_dynpro      using 'SAPLAIST' '1000'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=BUCH'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'ANLB-AFABG(01)'.
        perform bdc_field       using 'ANLB-NDJAR(01)'
                                      remaining_life_yrs.
                                     '  1'.
        perform bdc_field       using 'ANLB-NDPER(01)'
                                      remaining_life_periods.
                                     '  8'.
        perform bdc_field       using 'ANLB-AFABG(01)'
                                      '01.07.2007'.
        perform bdc_transaction using 'AS92'.
      endloop.
      perform close_group.

    Formatting error in file. resolved.

  • Unable to incorporate multiple data in BDC * URGENT*

    Hi EveryOne  .
      See the code. This code can do BDC for a single value of store and bonus buy no., in transaction  WPMA
    The current requirement is for a given store all bonus buy values should get populated and then executed each time store wise.
    Eg
        Store                            bonus buy values
        1001                               1
        1001                               2
         1001                              4
         1002                              A
         1002                             L
         1003                             6
         1003                             7
         1003                             H.
    See the code below, and tell me the necessary changes required!!
    report zwpma1
           no standard page heading line-size 255.
    type-pools slis.
    data: wt_fcat type slis_fieldcat_alv.
    data: it_fcat type slis_t_fieldcat_alv.
    data: cnt type sy-tabix.
    *include bdcrecx1.
    types: begin of ty_final,
           store(10) type c,
           docnum type docnum,
           bbynr type bbynr,
           end of ty_final.
    types: begin of ty_final1,
           store(10),
           bbynr type bbynr,
           end of ty_final1.
    data: wa_bonusbuy type zbonusbuy,
          it_bonusbuy type  standard table of zbonusbuy  with header line,
          it_bonusbuy1 type  standard table of ty_final1  with header line,
          it_t001w type  standard table of t001w  with header line,
          it_edidc type  standard table of edidc  with header line,
          it_edid4 type  standard table of edid4  with header line,
          it_final type  standard table of ty_final  with header line,
    *Work areas:
            wa_edidc type edidc,
            wa_edid4 type edid4,
            wa_final type ty_final.
    data :   it_bdcmsgcoll like bdcmsgcoll occurs 0 with header line.
    data: bdcdata like table of bdcdata with header line.
    data: lv_mode(1) value 'N'.
    data : mtext(100) type c,
           mvar1      like balm-msgv1,
           w_msg(200) type c.
    data : l_startt type sy-uzeit,   " Time before Recording
           l_endt type sy-uzeit,     " time after recording
           l_cdate type sy-datum.    " Current date
    start-of-selection.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          percentage = 100
          text       = 'Extracting Data.......  '.
      select werks  from t001w  into corresponding fields of table  it_t001w.
      delete adjacent duplicates from it_t001w  comparing werks.
      if not it_t001w[] is initial.
        select store bbynr mmid from  zbonusbuy  into corresponding fields of table it_bonusbuy for all
        entries in it_t001w where store = it_t001w-werks.
        if sy-subrc = 0.
          sort it_bonusbuy by store.
        endif.
      endif.
      refresh it_t001w.
      loop at it_bonusbuy.
        move-corresponding it_bonusbuy to it_bonusbuy1.
        append it_bonusbuy1.
        clear: it_bonusbuy, it_bonusbuy1.
      endloop.
      l_cdate = sy-datum.
      clear l_startt .
      l_startt = sy-uzeit.
      loop at it_bonusbuy.
    *break retaildev.
    *perform open_group.
        perform bdc_dynpro      using 'RWDPOSAN' '1000'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'SO_BBUY-LOW'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=ONLI'.
        perform bdc_field       using 'PA_VKORG'
                                      'HB00'.
        perform bdc_field       using 'PA_VTWEG'
                                      'H2'.
        perform bdc_field       using 'SO_FISEL-LOW'
                                 '1001'.
                                it_bonusbuy-store.
       LOOP AT   it_bonusbuy1 WHERE store = it_bonusbuy-store.
          if sy-subrc = 0.
            perform bdc_field       using 'PA_BBUY'
                                          'X'.
            perform bdc_field       using 'SO_BBUY-LOW'
                                 'TEST_00035'.
                                         it_bonusbuy1-bbynr.
                                          it_bonusbuy-bbynr.
          endif.
          clear it_bonusbuy1.
       ENDLOOP.
    *Refresh: it_bonusbuy1.
        clear bdcdata.
        call transaction 'WPMA' using bdcdata
             mode lv_mode
          UPDATE 'S'
             messages into  it_bdcmsgcoll.
        refresh bdcdata.
        clear it_bonusbuy.
      endloop.
      l_endt = sy-uzeit.
      break retaildev.
      select docnum
             direct
             credat
             cretim
             mestyp
             idoctp
             from edidc into corresponding fields of table it_edidc
             where
             credat = l_cdate and
             ( cretim  ge l_startt and cretim le l_endt )  and
             mestyp = 'WPDBBY'  and
             idoctp = 'WPDBBY01'.  "  "    l_startt and l_endt  and
      break retaildev.
      if sy-subrc = 0.
        select docnum
               counter
               segnum
               segnam
               sdata
               from edid4 into corresponding fields of table it_edid4 for all entries in it_edidc
               where
               docnum = it_edidc-docnum.
      endif.
    *Loop at it_final into wa_final.
      loop at it_edid4 into wa_edid4 where segnam = 'E1WPBB01'.
        wa_final-store = wa_edid4-sdata(10).
        wa_final-docnum = wa_edid4-docnum.
        wa_final-bbynr = wa_edid4-sdata+10(12).
        append wa_final to it_final.
      endloop.
      delete adjacent duplicates from it_final comparing docnum store bbynr.
      sort it_final by store.
      clear: wa_final,wa_edidc, wa_edid4.
      refresh : it_edid4, it_edidc.
    *ALV OutPut
      write :'Following are the Idocs posted successfully Storewise' .
      loop at it_final.
        write :  it_final-store , it_final-docnum , it_final-bbynr   .
      endloop.
    *Break retaildev.
      perform top_of_page.
      perform alv_layout-settings.
      perform zalv_fieldcatpopn using it_fcat.
      perform z_reuse_alv_grid_display.

    Have you tried serialization and sendingas an object using something like Zend AMF?
    Please mark this question as answered if this works for you.
    -Mr.12

  • Internal table in bdc

    I am new to the bdc .
    i have gone to SHDB and created a new recording  for the some T-code .
    After that i have created a prog (transfer from recording ) .
    i got some values in the file in my presenation server.
    i got default code generated .
    I have to declare the internal table of some time .
    may i know of which type should i declare my internal table ??
    My code ****************************************************************
    report ZRAJESH_BDC
           no standard page heading line-size 255.
    include bdcrecx1.
    start-of-selection.
    perform open_group.
    *******loop
    perform bdc_dynpro      using 'SAPMF02K' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RF02K-D0110'.
    perform bdc_field       using 'RF02K-LIFNR'
                                  '12345'.
    perform bdc_field       using 'RF02K-D0110'
                                  'X'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPMF02K' '0110'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFA1-TELF2'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=UPDA'.
    perform bdc_field       using 'LFA1-ANRED'
                                  'Mr.'.
    perform bdc_field       using 'LFA1-NAME1'
                                  'RAJESH'.
    perform bdc_field       using 'LFA1-SORTL'
                                  'Q'.
    perform bdc_field       using 'LFA1-LAND1'
                                  'US'.
    perform bdc_field       using 'LFA1-SPRAS'
                                  'EN'.
    perform bdc_field       using 'LFA1-TELF2'
                                  '9033558227'.
    perform bdc_transaction using 'XK02'.
    perform close_group.
           Start new screen                                              *
    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.

    Hi,
    I have one simple  BDC Program  .
    Just you have to do recording by using SHDB Transaction Code.
    and Copy that program and do some modification by following my Program and upload data to that perticular transaction.
    before that u have to prepare data in Text file by using TAB Space .
    Below is the Code(I have used MM01 transaction)
    ******************************************************************************************8
    report ZBDCTEST no standard page heading line-size 255.
    ***DECLARING TABLES.
    TABLES : MARA.
    **DECLARING INTERNAL TABLE.
    DATA : BEGIN OF ITAB OCCURS 0,
           MATNR LIKE MARA-MATNR,
           MEINS LIKE MARA-MEINS,
           MATKL LIKE MARA-MATKL,
           Maktx like makt-maktx,
           SPART LIKE MARA-SPART,
           END OF ITAB.
    DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
       CODEPAGE                      = 'IBM'
       FILENAME                      = 'C:\TEST.TXT'
       FILETYPE                      = 'DAT'
      HEADLEN                       = ' '
      LINE_EXIT                     = ' '
      TRUNCLEN                      = ' '
      USER_FORM                     = ' '
      USER_PROG                     = ' '
      DAT_D_FORMAT                  = ' '
    IMPORTING
      FILELENGTH                    =
      TABLES
        DATA_TAB                      = ITAB
    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.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    *include bdcrecx1.
    *start-of-selection.
    *perform open_group.
    LOOP AT ITAB.
      REFRESH BDCDATA.
      perform bdc_dynpro      using 'SAPLMGMM' '0060'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RMMG1_REF-MATNR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=AUSW'.
      perform bdc_field       using 'RMMG1-MATNR'
                                    ITAB-MATNR.
      perform bdc_field       using 'RMMG1-MBRSH'
                                    'M'.
      perform bdc_field       using 'RMMG1-MTART'
                                    'FOOD'.
      perform bdc_dynpro      using 'SAPLMGMM' '0070'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MSICHTAUSW-DYTXT(02)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ENTR'.
      perform bdc_field       using 'MSICHTAUSW-KZSEL(01)'
                                    'X'.
      perform bdc_field       using 'MSICHTAUSW-KZSEL(02)'
                                    'X'.
      perform bdc_dynpro      using 'SAPLMGMM' '4000'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SP02'.
      perform bdc_field       using 'MAKT-MAKTX'
                                    'T1003'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MARA-MATKL'.
      perform bdc_field       using 'MARA-MEINS'
                                    'BOX'.
      perform bdc_field       using 'MARA-MATKL'
                                     ITAB-MATKL.
      perform bdc_field       using 'MARA-SPART'
                                    ITAB-SPART.
      perform bdc_field       using 'MARA-MTPOS_MARA'
                                    'NORM'.
      perform bdc_dynpro      using 'SAPLMGMM' '4004'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=BU'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MAKT-MAKTX'.
      perform bdc_field       using 'MAKT-MAKTX'
                                    'T1003'.
    *perform bdc_transaction using 'MM01'.
    *perform close_group.
      CALL TRANSACTION 'MM01' USING BDCDATA MODE 'A'. "A= all screens ,N= no screens
    ENDLOOP.
           Start new screen                                              *
    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 <> SPACE.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
      ENDIF.
    ENDFORM.
    if you want further help let me know
    Regards,
    Jak

  • How to skip first record while inserting data from a flat file to BW system

    Hi Experts,
    In my project we have to upload flat file into a BW system. I have written a program and it is working fine.
    Now we have got another requirement. The flat file will have a header record (first row). While uploading the flat file we have to skip this record. How I can do so?
    The code is as below:
    FORM upload1.
      DATA : wf_title    TYPE string,
              lt_filetab  TYPE filetable,
              l_separator TYPE char01,
              l_action    TYPE i,
              l_count     TYPE i,
              ls_filetab  TYPE file_table,
              wf_delemt TYPE rollname,
              wa_fieldcat TYPE lvc_s_fcat,
              tb_fieldcat TYPE lvc_t_fcat,
              rows_read TYPE i,
              p_error   TYPE char01,
              l_file      TYPE string.
      DATA: wf_object(30)  TYPE c,
              wf_tablnm TYPE rsdchkview.
      wf_object = 'myprogram'.
      DATA i TYPE i.
      DATA:
           lr_mdmt                TYPE REF TO cl_rsdmd_mdmt,
           lr_mdmtr               TYPE REF TO cl_rsdmd_mdmtr,
           lt_idocstate           TYPE rsarr_t_idocstate,
           lv_subrc               TYPE sysubrc.
      TYPES : BEGIN OF test_struc,
               /bic/myprogram TYPE  /bic/oimyprogram,
               txtmd   TYPE rstxtmd,
               END OF test_struc.
      DATA :    tb_assum TYPE TABLE OF /bic/pmyprogram.
      DATA: wa_ztext TYPE  /bic/tmyprogram,
            myprogram_temp TYPE ziott_assum,
            wa_myprogram TYPE /bic/pmyprogram.
      DATA : test_upload TYPE STANDARD TABLE OF test_struc,
             wa2 TYPE  test_struc.
      DATA : wa_test_upload TYPE test_struc,
             ztable_data TYPE TABLE OF /bic/pmyprogram,
             ztable_text TYPE TABLE OF /bic/tmyprogram,
             wa_upld_text TYPE /bic/tmyprogram,
             wa_upld_data TYPE /bic/pmyprogram,
              t_assum TYPE ziott_assum.
      DATA : wa1 LIKE  test_upload.
      wf_title = text-026.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = wf_title
          default_extension       = 'txt'
          file_filter             = 'Tab delimited Text Files (*.txt)'
        CHANGING
          file_table              = lt_filetab
          rc                      = l_count
          user_action             = l_action
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          OTHERS                  = 3.                          "#EC NOTEXT
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      LOOP AT lt_filetab INTO ls_filetab.
        l_file = ls_filetab.
      ENDLOOP.
      CHECK l_action = 0.
      IF l_file IS INITIAL.
        EXIT.
      ENDIF.
      l_separator = 'X'.
      wa_fieldcat-fieldname = 'test'.
      wa_fieldcat-dd_roll = wf_delemt.
      APPEND wa_fieldcat TO tb_fieldcat.
      CALL FUNCTION 'MESSAGES_INITIALIZE'.
      CLEAR wa_test_upload.
    Upload file from front-end (PC)
    File format is tab-delimited ASCII
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                = l_file
          has_field_separator     = l_separator
        TABLES
         data_tab                = i_mara
        data_tab                   = test_upload
        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.
        EXIT.
      ELSE.
       CALL FUNCTION 'MESSAGES_INITIALIZE'.
        IF test_upload IS NOT INITIAL.
          DESCRIBE TABLE test_upload LINES rows_read.
          CLEAR : wa_test_upload,wa_upld_data.
          LOOP AT test_upload INTO wa_test_upload.
            CLEAR :  p_error.
            rows_read = sy-tabix.
            IF wa_test_upload-/bic/myprogram IS INITIAL.
              p_error = 'X'.
              MESSAGE s153 WITH wa_test_upload-/bic/myprogram sy-tabix.
              CONTINUE.
            ELSE.
              TRANSLATE wa_test_upload-/bic/myprogram TO UPPER CASE.
              wa_upld_text-txtmd  = wa_test_upload-txtmd.
              wa_upld_text-txtsh  = wa_test_upload-txtmd.
              wa_upld_text-langu =  sy-langu.
              wa_upld_data-chrt_accts = 'xyz1'.
              wa_upld_data-co_area = '12'.
              wa_upld_data-/bic/zxyzbcsg = 'Iy'.
              wa_upld_data-objvers = 'A'.
              wa_upld_data-changed = 'I'.
              wa_upld_data-/bic/zass_mdl = 'rrr'.
              wa_upld_data-/bic/zass_typ = 'I'.
              wa_upld_data-/bic/zdriver = 'yyy'.
              wa_upld_text-langu = sy-langu.
              MOVE-CORRESPONDING wa_test_upload TO wa_upld_data.
              MOVE-CORRESPONDING wa_test_upload TO wa_upld_text.
              APPEND wa_upld_data TO ztable_data.
              APPEND wa_upld_text TO ztable_text.
            ENDIF.
          ENDLOOP.
          DELETE ADJACENT DUPLICATES FROM ztable_data.
          DELETE ADJACENT DUPLICATES FROM ztable_text.
          IF ztable_data IS NOT INITIAL.
            CALL METHOD cl_rsdmd_mdmt=>factory
              EXPORTING
                i_chabasnm     = 'myprogram'
              IMPORTING
                e_r_mdmt       = lr_mdmt
              EXCEPTIONS
                invalid_iobjnm = 1
                OTHERS         = 2.
       CALL FUNCTION 'MESSAGES_INITIALIZE'.
       **Lock the Infoobject to update
            CALL FUNCTION 'RSDG_IOBJ_ENQUEUE'
              EXPORTING
                i_objnm      = wf_object
                i_scope      = '1'
                i_msgty      = rs_c_error
              EXCEPTIONS
                foreign_lock = 1
                sys_failure  = 2.
            IF sy-subrc = 1.
              MESSAGE i107(zddd_rr) WITH wf_object sy-msgv2.
              EXIT.
            ELSEIF sy-subrc = 2.
              MESSAGE i108(zddd_rr) WITH wf_object.
              EXIT.
            ENDIF.
    *****Update Master Table
            IF ztable_data IS NOT INITIAL.
              CALL FUNCTION 'RSDMD_WRITE_ATTRIBUTES_TEXTS'
                    EXPORTING
                      i_iobjnm                     = 'myprogram'
                      i_tabclass                   = 'M'
           I_T_ATTR                     = lt_attr
                    TABLES
                      i_t_table                    = ztable_data
                      EXCEPTIONS
                     attribute_name_error         = 1
                     iobj_not_found               = 2
                     generate_program_error       = 3
                     OTHERS                       = 4.
              IF sy-subrc <> 0.
                CALL FUNCTION 'MESSAGE_STORE'
                  EXPORTING
                    arbgb  = 'zddd_rr'
                    msgty  = 'E'
                    txtnr  = '054'
                    msgv1  = text-033
                  EXCEPTIONS
                    OTHERS = 3.
                MESSAGE e054(zddd_rr) WITH 'myprogram'.
              ELSE.
                CALL FUNCTION 'MESSAGE_STORE'
                  EXPORTING
                    arbgb  = 'zddd_rr'
                    msgty  = 'S'
                    txtnr  = '053'
                    msgv1  = text-033
                  EXCEPTIONS
                    OTHERS = 3.
              ENDIF.
    *endif.
    *****update Text Table
              IF ztable_text IS NOT INITIAL.
                CALL FUNCTION 'RSDMD_WRITE_ATTRIBUTES_TEXTS'
                  EXPORTING
                    i_iobjnm               = 'myprogram'
                    i_tabclass             = 'T'
                  TABLES
                    i_t_table              = ztable_text
                  EXCEPTIONS
                    attribute_name_error   = 1
                    iobj_not_found         = 2
                    generate_program_error = 3
                    OTHERS                 = 4.
                IF sy-subrc <> 0.
                  CALL FUNCTION 'MESSAGE_STORE'
                    EXPORTING
                      arbgb  = 'zddd_rr'
                      msgty  = 'E'
                      txtnr  = '055'
                      msgv1  = text-033
                    EXCEPTIONS
                      OTHERS = 3.
                ENDIF.
              ENDIF.
            ELSE.
              MESSAGE s178(zddd_rr).
            ENDIF.
          ENDIF.
          COMMIT WORK.
          CALL FUNCTION 'RSD_CHKTAB_GET_FOR_CHA_BAS'
            EXPORTING
              i_chabasnm = 'myprogram'
            IMPORTING
              e_chktab   = wf_tablnm
            EXCEPTIONS
              name_error = 1.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDIF.
    ****Release locks on Infoobject
          CALL FUNCTION 'RSDG_IOBJ_DEQUEUE'
            EXPORTING
              i_objnm = 'myprogram'
              i_scope = '1'.
        ENDIF.
      ENDIF.
      PERFORM data_selection .
      PERFORM update_alv_grid_display.
      CALL FUNCTION 'MESSAGES_SHOW'.
    ENDFORM.
    Please let me know how I can skip first record of the flat file?
    Regards,
    S

    go through this hope u can get some idea
    REPORT  ztest no standard page heading line-size 255.
                          Declaration                            *
    TYPES t_itab1 TYPE alsmex_tabline.
    types: begin of t_csks,
           kostl like csks-kostl,
          end of t_csks.
    types: begin of t_cska,
           kstar like cska-kstar,
          end of t_cska.
    data: begin of t_flatfile,
          docdate like COHEADER-BLDAT,
          postdate like COHEADER-BUDAT,
          doctext like COHEADER-BLTXT,
           costele like RK23F-KSTAR,
           amount like RK23F-WTGBTR,
           scostctr like RK23F-SKOSTL,
           rcostctr like RK23F-EKOSTL,
           rintorder like RK23F-EAUFNR,
         end of t_flatfile.
    data: begin of t_flatfile1,
          docdate like COHEADER-BLDAT,
          postdate like COHEADER-BUDAT,
          doctext like COHEADER-BLTXT,
           costele like RK23F-KSTAR,
           amount like RK23F-WTGBTR,
           scostctr like RK23F-SKOSTL,
           rcostctr like RK23F-EKOSTL,
           rintorder like RK23F-EAUFNR,
           NUM LIKE SY-INDEX,
         end of t_flatfile1.
    data: itab like table of t_flatfile with header line.
    data: itab2 like table of t_flatfile1 with header line.
    DATA: it_itab1 TYPE STANDARD TABLE OF t_itab1 WITH HEADER LINE,
          MESSTAB1 LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
          MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    data: begin of bdcdata occurs 0.
            include structure bdcdata.
    data: end of bdcdata.
    data:t_lin type i VALUE '0',
         u_rec type i VALUE '0',
         s_rec type i VALUE '0'.
    data: it_csks type standard table of t_csks,
          wa_csks type t_csks.
    data: it_cska type standard table of t_cska,
          wa_cska type t_cska.
    *Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME  TITLE text-010.
    parameters: p_docdat  LIKE  COHEADER-BLDAT obligatory,
                p_postda LIKE  COHEADER-BUDAT obligatory,
                p_doctxt  LIKE  COHEADER-BLTXT.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME  TITLE text-011.
    parameters: p_file LIKE RLGRAP-FILENAME obligatory,
                DIS_MODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
    SELECTION-SCREEN END OF BLOCK b2.
                  A T  S E L E C T I O N   S C R E E N                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      PERFORM get_local_file_name USING p_file.
    *Start of Selection
    START-OF-SELECTION.
      Perform get_Excel_data.
      perform validate_data.
      Perform Process_Data.
                    end-of-selection
    end-of-selection.
      perform display_data.
    *&      Form  get_local_file_name
          text
         -->P_P_FILE  text
    FORM get_local_file_name  USING    P_P_FILE.
      CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
        CHANGING
          file_name = p_file.
    ENDFORM.                    " get_local_file_name
    *&      Form  get_Excel_data
          text
    -->  p1        text
    <--  p2        text
    FORM get_Excel_data .
      FIELD-SYMBOLS : <FS>.
      DATA : V_INDEX TYPE I.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          filename                = p_file
          i_begin_col             = 1
        i_begin_row             = 2
          i_begin_row             = 1
          i_end_col               = 256
          i_end_row               = 9999                        "65536
        TABLES
          intern                  = it_itab1
        EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 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.
        Message text-013 type 'E'.
      ENDIF.
      IF IT_ITAB1[] IS INITIAL.
        Message text-001 type 'E'.
      else.                                    "IF IT_ITAB1[] IS INITIAL.
        data: itab2 like itab occurs 0 with header line.
        SORT IT_ITAB1 BY ROW COL.
        LOOP AT IT_ITAB1.
          MOVE :IT_ITAB1-COL TO V_INDEX.
          ASSIGN COMPONENT V_INDEX OF STRUCTURE itab2 TO  <FS>.
          MOVE : IT_ITAB1-VALUE TO <FS>.
          AT END OF ROW.
            MOVE-CORRESPONDING itab2 TO itab.
            APPEND itab.
            CLEAR:itab,itab2.
          ENDAT.
        endloop.
        describe table itab lines t_lin.
      endif.               "IF IT_ITAB1[] IS INITIAL.
    ENDFORM.                    " get_Excel_data
    *&      Form  Process_Data
          text
    -->  p1        text
    <--  p2        text
    FORM Process_Data .
      data:l_tabix type sy-tabix.
      data:l_periv like t001-periv,
           l_monat like bkpf-monat,
           l_gjahr like bkpf-gjahr,
           l_amt(21) type c.
      data: l_ddate(10),
            l_pdate(10).
      WRITE p_docdat TO l_ddate.
      WRITE p_postda TO l_pdate.
      clear: l_periv,l_monat,l_gjahr.
      select single periv from t001 into l_periv where bukrs = '5000'. "P_bukrs
      if sy-subrc eq 0.
        l_gjahr = p_postda+0(4).
        call function 'FI_PERIOD_DETERMINE'
          EXPORTING
            i_budat = p_postda
            i_bukrs = '5000'     "p_bukrs
            i_periv = l_periv
            i_gjahr = l_gjahr
          IMPORTING
            e_monat = l_monat.
        clear:l_periv.
      endif.
      loop at itab2.
        refresh:bdcdata.
        clear:bdcdata.
        l_tabix = sy-tabix.
        perform bdc_dynpro      using 'SAPLK23F1' '1200'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        perform bdc_field       using 'COHEADER-SEND_REC_REL'
                                      '10SAP'.
        perform bdc_field       using 'RK23F-STATUS'
                                      'S'.
        perform bdc_field       using 'COHEADER-BLDAT'
                                 itab-docdate.
                                      l_ddate.
        perform bdc_field       using 'COHEADER-BUDAT'
                                 itab-postdate.
                                      l_pdate.
        perform bdc_field       using 'COHEADER-PERIO'
                                       l_monat.                 "'9'.
        perform bdc_field       using 'COHEADER-BLTXT'
                                 itab-doctext.
                                      p_doctxt.
        perform bdc_field       using 'RK23F-KSTAR'
                                      itab2-costele.
        WRITE itab2-amount TO l_amt.
    l_amt = itab-amount.
        condense l_amt no-gaps.
        perform bdc_field       using 'RK23F-WTGBTR'
                                       l_amt.
                                 itab-amount.
        perform bdc_field       using 'RK23F-WAERS'
                                      'USD'.
    *perform bdc_field       using 'RK23F-SGTXT'
                                 itab-doctext.
        perform bdc_field       using 'RK23F-SKOSTL'
                                      itab2-scostctr.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RK23F-EAUFNR'.
        perform bdc_field       using 'RK23F-EKOSTL'
                                      itab2-rcostctr.
        perform bdc_field       using 'RK23F-EAUFNR'
                                      itab2-rintorder.
        perform bdc_dynpro      using 'SAPLK23F1' '1200'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=POST'.
        perform bdc_field       using 'COHEADER-SEND_REC_REL'
                                      '10SAP'.
        perform bdc_field       using 'RK23F-STATUS'
                                      'S'.
        perform bdc_field       using 'COHEADER-BLDAT'
                                 itab-docdate.
                                      l_ddate.
        perform bdc_field       using 'COHEADER-BUDAT'
                                  itab-postdate.
                                      l_pdate.
        perform bdc_field       using 'COHEADER-PERIO'
                                 '9'.
                                        l_monat.
        perform bdc_field       using 'COHEADER-BLTXT'
                                  itab-doctext.
                                      p_doctxt.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RK23F-KSTAR'.
        perform bdc_field       using 'RK23F-WAERS'
                                      'USD'.
        CALL TRANSACTION 'KB15N' USING BDCDATA MODE DIS_MODE MESSAGES INTO MESSTAB.
        If sy-subrc = 0.
          s_rec = s_rec + 1.
        ELSE.
          u_rec = u_rec + 1.
          move ITAB2-NUM to messtab1-msgv1.
          concatenate itab2-costele ' | ' itab2-scostctr  ' | '  itab2-rcostctr ' | ' itab2-rintorder  into  messtab1-msgv2.
          condense messtab1-msgv2.
          condense messtab1-msgv1.
          append messtab1.
        endif.
        clear:itab2.
      endloop.
    ENDFORM.                    " Process_Data
          BDC_DYNPRO                                                     *
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.                    "BDC_DYNPRO
           BDC_FIELD                                                     *
    FORM BDC_FIELD USING FNAM FVAL.
      IF FVAL <> ''. "NODATA.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
      ENDIF.
    ENDFORM.                    "BDC_FIELD
    *&      Form  display_data
          text
    -->  p1        text
    <--  p2        text
    FORM display_data .
      skip 2.
      write:/15 text-002.
      skip 2.
      write:/8 text-003.
      SKIP.
      write:/12 text-008,
             25 P_DOCDAT.
      SKIP.
      write:/12 text-009,
             25 P_POSTDA.
      SKIP.
      write:/12 text-012,
              25 P_DOCTXT.
      SKIP.
      write:/12 text-004,
             25 p_file.
      skip 2.
      write:/8 text-005,
            60 t_lin.
      skip.
      write:/8 text-006,
            60 s_rec.
      skip.
      write:/8 text-007,
            60 u_rec.
      skip.
      write:/10 'row no',
             20 'Information'.
      skip.
      loop at messtab1.
        write:/10 messtab1-msgv1,
               20 messtab1-msgv2.
        clear:messtab1.
      endloop.
    ENDFORM.                    " display_data
    *&      Form  validate_data
          text
    -->  p1        text
    <--  p2        text
    FORM validate_data .
      data: l_tabix1 type sy-tabix.
    data: l_tabix2 type sy-tabix.
      if not itab[] is initial.
        select kostl from CSKS into table it_csks.
        if sy-subrc eq 0.
          sort it_csks by kostl.
        endif.
        select kstar from CSKA into table it_cska.
        if sy-subrc eq 0.
          sort it_cska by kstar.
        endif.
        loop at itab.
          l_tabix1 = sy-tabix.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = itab-scostctr
    IMPORTING
       OUTPUT        = itab-scostctr .
          read table it_csks into wa_csks with key kostl = itab-scostctr.
          if sy-subrc ne 0.
            u_rec = u_rec + 1.
           L_TABIX2 = l_tabix1 + 1.
           move l_tabix2 to messtab1-msgv1.
            move l_tabix1 to messtab1-msgv1.
            move itab-rintorder to messtab1-msgv2.
            concatenate itab-costele  ' | ' itab-scostctr  ' | '  itab-rcostctr  ' | ' itab-rintorder  into  messtab1-msgv2.
            condense messtab1-msgv2.
            condense messtab1-msgv1.
            append messtab1.
            clear:wa_csks.
           CLEAR:L_TABIX2.
            continue.
          endif.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = itab-rcostctr
    IMPORTING
       OUTPUT        = itab-rcostctr .
          read table it_csks into wa_csks with key kostl = itab-rcostctr.
          if sy-subrc ne 0.
            u_rec = u_rec + 1.
           L_TABIX2 = l_tabix1 + 1.
           move l_tabix2 to messtab1-msgv1.
            move l_tabix1 to messtab1-msgv1.
              concatenate itab-costele ' | ' itab-scostctr  ' | '  itab-rcostctr ' | ' itab-rintorder  into  messtab1-msgv2.
            condense messtab1-msgv2.
            condense messtab1-msgv1.
            append messtab1.
            clear:wa_csks.
           CLEAR:L_TABIX2.
            continue.
          endif.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = itab-costele
    IMPORTING
       OUTPUT        = itab-costele .
          read table it_cska into wa_cska with key kstar = itab-costele.
          if sy-subrc ne 0.
            u_rec = u_rec + 1.
           L_TABIX2 = l_tabix1 + 1.
           move l_tabix2 to messtab1-msgv1.
            move l_tabix1 to messtab1-msgv1.
            concatenate itab-costele ' | ' itab-scostctr  ' | '  itab-rcostctr ' | ' itab-rintorder  into  messtab1-msgv2.
            condense messtab1-msgv2.
            condense messtab1-msgv1.
            append messtab1.
            clear:wa_csks.
           CLEAR:L_TABIX2.
            continue.
          endif.
    move-corresponding itab to itab2.
    MOVE l_tabix1  TO ITAB2-NUM.
    append itab2.
    clear: itab2.
          clear:itab.
        endloop.
      else.
        message 'No records in File'  type 'S'.
      endif.
    ENDFORM.                    " validate_data

  • Adding Data to the database for SAP Transactions

    Hi
    I'm new to the whole ABAP. I would like to enquire about adding transaction data in SAP through ABAP but it must be immediate.
    I know that one can use a BAPI to add data and can rollback if any problems occur.
    But if no BAPI exists how does one write code to add a document to the SAP database but with everything SAP transaction requires like the BAPI. What is the process and how???
    So let say I wanted to do FB01 which is SAP FI document and must be immediate. There is a BAPI that exists for it but if there was not one how would I do this???
    I know one can also use BDC but that creates a batch and then needs to be executed in SM35, I want a way to add data for two or three SAP transactions, if any problems occur with any of the steps rollback everything else commit everything to the database.
    Any simple detail examples (code) that satisfy the above will be greatly appreciated and REWARDED.
    Thanks in advance

    Luis,
    i have a code exactly same BDC for FB01.
    refer:
    REPORT z_etching_fb01
           NO STANDARD PAGE HEADING LINE-SIZE 255.
    *etching invoice load
    INCLUDE bdcrecx1.
    TYPE-POOLS: truxs , slis.
    *PARAMETERS: dataset(132) LOWER CASE DEFAULT
    *                              'c:\temp\etchingload.txt'.
    PARAMETER: pfile LIKE rlgrap-filename." OBLIGATORY.
    SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
    PARAMETER:    p_kunnr LIKE kna1-kunnr OBLIGATORY,           "kna1-kunnr
                  p_bukrs LIKE bseg-bukrs,
                  p_mwskz LIKE t007a-mwskz OBLIGATORY,"t007a-mwskz
                  p_prctr LIKE cepc-prctr OBLIGATORY,"cepc-prctr
    *            p_newko LIKE ska1-saknr OBLIGATORY DEFAULT 41000000,"
                p_budat LIKE bkpf-budat OBLIGATORY ,
                p_hkont LIKE bseg-hkont OBLIGATORY DEFAULT 41000000 ,
                p_waers TYPE waers OBLIGATORY DEFAULT 'GBP'."tcurr-waers
    SELECTION-SCREEN END OF BLOCK a.
    SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.
    PARAMETER : report AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b.
    ***    DO NOT CHANGE - the generated data section - DO NOT CHANGE    ***
    *   If it is nessesary to change the data section use the rules:
    *   1.) Each definition of a field exists of two lines
    *   2.) The first line shows exactly the comment
    *       '* data element: ' followed with the data element
    *       which describes the field.
    *       If you don't have a data element use the
    *       comment without a data element name
    *   3.) The second line shows the fieldname of the
    *       structure, the fieldname must consist of
    *       a fieldname and optional the character '_' and
    *       three numbers and the field length in brackets
    *   4.) Each field must be type C.
    *** Generated data section with specific formatting - DO NOT CHANGE  ***
    *                          ALV                                           *
    DATA: it_fieldcat     TYPE    slis_t_fieldcat_alv,
          wa_fieldcat     LIKE    LINE OF it_fieldcat,
          it_top_of_page  TYPE    slis_t_listheader,
          ls_layout       TYPE    slis_layout_alv,
          gt_events       TYPE    slis_t_event.
    DATA: it_raw TYPE truxs_t_text_data.
    DATA: BEGIN OF record,
    * data element: BLDAT
            bldat_001(010),   "Invoice Date
    * data element: BLART
            blart_002(002),   " Doc Type DR or DG if credit
    * data element: BUKRS
            bukrs_003(004),   " Company Code
    * data element: BUDAT
            budat_004(010),   "Posting Date
    * data element: MONAT
            monat_005(002),   "period"
    * data element: WAERS
            waers_006(005),   "Currency
    * data element: XBLNR1
            xblnr_007(016),   "Invoice Number
    * data element: BKTXT
            bktxt_008(025),   "PO number
    * data element: SAEOBJART
            docid_009(010),
    * data element: NEWBS
            newbs_010(002),   "posting Key
    * data element: NEWKO
            newko_011(017),   "Customer number or GL account
    * data element: WRBTR
            wrbtr_012(016),   "Amount
    * data element: DZTERM
            zterm_013(004),
    * data element: DZBD1T
            zbd1t_014(003),
    * data element: DZFBDT
            zfbdt_015(010),
    * data element: DZUONR
            zuonr_016(018),   "Invoice Number
    * data element: SGTXT
            sgtxt_017(050),   " PO number
    * data element: NEWBS
            newbs_018(002),
    * data element: NEWKO
            newko_019(017),   "GL Account
    * data element: WRBTR
            wrbtr_020(016),   "Amount
    * data element: MWSKZ
            mwskz_021(002),   "Tax
    * data element: DZUONR
            zuonr_022(018),   "Invoice Number
    * data element: SGTXT
            sgtxt_023(050),   "PO Number
    * data element: PRCTR
            prctr_024(010),   "Profit Center
    * data element: WRBTR
            wrbtr_025(016),   " Amount
    * data element: MWSKZ
            mwskz_026(002),   "Tax
    * data element: DZUONR
            zuonr_027(018),   "Invoice Number
    * data element: SGTXT
            sgtxt_028(050),   "PO Number
    * data element: FMORE
            fmore_029(001),
    * data element: PRCTR
            prctr_030(010),   "Pr Center
    * data element: FWSTE
            fwste_01_031(016),
          END OF record.
    DATA: BEGIN OF it_excel OCCURS 0,
    * data element: XBLNR1
          xblnr_007(016),   "Invoice Number
    * data element: BLDAT
          bldat_001(010),   "Invoice Date
    * data element: WRBTR
          wrbtr_012(016),   "Amount
    * data element: WRBTR
          wrbtr_025(016),   " Tax Amount
    * data element: WRBTR
          wrbtr_020(016),   "Gross Amount
    * data element: BLART
          blart_002(002),   " No of units
    * data element: MONAT
          monat_005(002),   "No of units second test"
    * data element: BKTXT
            bktxt_008(025),   "PO number
    * data element: SGTXT
          sgtxt_017(050),   " PO number
    * data element: BUKRS
          bukrs_003(004),   " Company Code
    * data element: BUDAT
          budat_004(010),   "Posting Date
    *        budat_004 TYPE string,   "Posting Date
    * data element: WAERS
          waers_006(005),   "Currency*
    * data element: NEWKO
          newko_011(017),   "Customer number or GL account
    * data element : kunnr
          kunnr_019(010),   " customer
          mwskz(002),
         prctr(010),
          date(002),
          month(002),
    ** data element: BKTXT
    *      bktxt_008(025),   "PO number
    ** data element: SAEOBJART
    *      docid_009(010),
    ** data element: NEWBS
    *      newbs_010(002),   "posting Key
    ** data element: DZTERM
    *      zterm_013(004),
    ** data element: DZBD1T
    *      zbd1t_014(003),
    ** data element: DZFBDT
    *      zfbdt_015(010),
    ** data element: DZUONR
    *      zuonr_016(018),   "Invoice Number
    ** data element: NEWBS
    *      newbs_018(002),
    ** data element: NEWKO
    *      newko_019(017),   "GL Account
    ** data element: MWSKZ
    *      mwskz_021(002),   "Tax
    ** data element: DZUONR
    *      zuonr_022(018),   "Invoice Number
    ** data element: SGTXT
    *      sgtxt_023(050),   "PO Number
    ** data element: PRCTR
    *      prctr_024(010),   "Profit Center
    ** data element: MWSKZ
    *      mwskz_026(002),   "Tax
    ** data element: DZUONR
    *      zuonr_027(018),   "Invoice Number
    ** data element: SGTXT
    *      sgtxt_028(050),   "PO Number
    ** data element: FMORE
    *      fmore_029(001),
    ** data element: PRCTR
    *      prctr_030(010),   "Pr Center
    ** data element: FWSTE
    *      fwste_01_031(016),
        END OF it_excel.
    DATA : BEGIN OF it_bkpf OCCURS 0,
            belnr LIKE bkpf-belnr,
            budat LIKE bkpf-budat,
            bldat LIKE bkpf-bldat,
            xblnr LIKE bkpf-xblnr,
            bktxt LIKE bkpf-bktxt,
            total LIKE bseg-dmbtr,
            numdocs TYPE p DECIMALS 0,
            END OF it_bkpf,
            BEGIN OF it_bseg OCCURS 0,
              belnr LIKE bseg-belnr,
              dmbtr LIKE bseg-dmbtr,
              mwsts LIKE bseg-mwsts,
              pswsl LIKE bseg-pswsl,
              END OF it_bseg,
              BEGIN OF it_final OCCURS 0,
                belnr LIKE bkpf-belnr,
                budat LIKE bkpf-budat,
                bldat LIKE bkpf-bldat,
                xblnr LIKE bkpf-xblnr,
                bktxt LIKE bkpf-bktxt,
                dmbtr LIKE bseg-dmbtr,
                mwsts LIKE bseg-mwsts,
                pswsl LIKE bseg-pswsl,
                END OF it_final.
    ***** End generated data section ***
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
      PERFORM sub_browse_file. "Get file name
    START-OF-SELECTION.
      PERFORM sub_data_load.  " Transfer excel into internal table.
      PERFORM sub_calc_excel.
      IF report = 'X'.
    *    PERFORM data_selection.
    *    PERFORM data_move.
    *********************************GET ALV  DATA
        PERFORM alv_get_data.
    *********************************ALV GRID DATA
        PERFORM alv_grid.
      ENDIF.
    *if report = ''.
    *  PERFORM write.
    *  PERFORM open_dataset USING dataset.
      PERFORM open_group.
    *  DO.
    *    READ DATASET dataset INTO record.
      LOOP AT it_excel.
    *   IF sy-subrc <> 0. EXIT. ENDIF.
        PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RF05A-NEWKO'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'BKPF-BLDAT'
                                      it_excel-bldat_001.
        PERFORM bdc_field       USING 'BKPF-BLART'
                                      'DR'." record-blart_002.
        PERFORM bdc_field       USING 'BKPF-BUKRS'
                                      it_excel-bukrs_003.
        PERFORM bdc_field       USING 'BKPF-BUDAT'
                                      it_excel-budat_004.
        PERFORM bdc_field       USING 'BKPF-MONAT'
                                    '3'. "record-monat_005.
        PERFORM bdc_field       USING 'BKPF-WAERS'
                                      it_excel-waers_006.
        PERFORM bdc_field       USING 'BKPF-XBLNR'
                                      it_excel-xblnr_007.
        PERFORM bdc_field       USING 'BKPF-BKTXT'
                                      it_excel-bktxt_008.
        PERFORM bdc_field       USING 'FS006-DOCID'
                                     '*' ."record-docid_009.
        PERFORM bdc_field       USING 'RF05A-NEWBS'
                                    '01'." record-newbs_010.
        PERFORM bdc_field       USING 'RF05A-NEWKO'
                                    it_excel-kunnr_019  .
        PERFORM bdc_dynpro      USING 'SAPMF05A' '0301'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'RF05A-NEWKO'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'BSEG-WRBTR'
                                    it_excel-wrbtr_020."  it_excel-wrbtr_012.
        PERFORM bdc_field       USING 'BSEG-ZTERM'
                                      'NT30' ."  record-zterm_013.
        PERFORM bdc_field       USING 'BSEG-ZBD1T'
                                      '30'."record-zbd1t_014.
        PERFORM bdc_field       USING 'BSEG-ZFBDT'
                                      it_excel-bldat_001."record-zfbdt_015.
        PERFORM bdc_field       USING 'BSEG-ZUONR'
                                      it_excel-xblnr_007."record-zuonr_016.
        PERFORM bdc_field       USING 'BSEG-SGTXT'
                                      it_excel-sgtxt_017.
        PERFORM bdc_field       USING 'RF05A-NEWBS'
                                     '50'." record-newbs_018.
        PERFORM bdc_field       USING 'RF05A-NEWKO'
                                   it_excel-newko_011."  record-newko_019."Gl account
        PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'BSEG-SGTXT'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'BSEG-WRBTR'
                                      it_excel-wrbtr_012."changes from 12 to 20
        PERFORM bdc_field       USING 'BSEG-MWSKZ'
                                     it_excel-mwskz." record-mwskz_021.
        PERFORM bdc_field       USING 'BSEG-ZUONR'
                                    it_excel-xblnr_007."  record-zuonr_022.
        PERFORM bdc_field       USING 'BSEG-SGTXT'
                                     it_excel-sgtxt_017."  record-sgtxt_023.
        PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'COBL-PRCTR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=ENTE'.
        PERFORM bdc_field       USING 'COBL-PRCTR'
                                    it_excel-prctr ." record-prctr_024.
        PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'BSEG-WRBTR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=STER'.
        PERFORM bdc_field       USING 'BSEG-WRBTR'
                                     it_excel-wrbtr_012." it_excel-wrbtr_025.
        PERFORM bdc_field       USING 'BSEG-MWSKZ'
                                      it_excel-mwskz.
        PERFORM bdc_field       USING 'BSEG-ZUONR'
                                     it_excel-xblnr_007." record-zuonr_027.
        PERFORM bdc_field       USING 'BSEG-SGTXT'
                                     it_excel-sgtxt_017." record-sgtxt_028.
        PERFORM bdc_field       USING 'DKACB-FMORE'
                                     'X' ."record-fmore_029.
        PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'COBL-PARGB'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=ENTE'.
        PERFORM bdc_field       USING 'COBL-PRCTR'
                                     it_excel-prctr." record-prctr_030.
        PERFORM bdc_dynpro      USING 'SAPLTAX1' '0300'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'BSET-FWSTE(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=GOBU'.
        PERFORM bdc_field       USING 'BSET-FWSTE(01)'
                                    it_excel-wrbtr_025."  record-fwste_01_031.
        PERFORM bdc_transaction USING 'FB01'.
        REFRESH:bdcdata,messtab.
      ENDLOOP.
      REFRESH:bdcdata.
    **    PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'RF05A-NEWKO'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '/00'.
    *    PERFORM bdc_field       USING 'BKPF-BLDAT'
    *                                  record-bldat_001.
    *    PERFORM bdc_field       USING 'BKPF-BLART'
    *                                  record-blart_002.
    *    PERFORM bdc_field       USING 'BKPF-BUKRS'
    *                                  record-bukrs_003.
    *    PERFORM bdc_field       USING 'BKPF-BUDAT'
    *                                  record-budat_004.
    *    PERFORM bdc_field       USING 'BKPF-MONAT'
    *                                  record-monat_005.
    *    PERFORM bdc_field       USING 'BKPF-WAERS'
    *                                  record-waers_006.
    *    PERFORM bdc_field       USING 'BKPF-XBLNR'
    *                                  record-xblnr_007.
    *    PERFORM bdc_field       USING 'BKPF-BKTXT'
    *                                  record-bktxt_008.
    *    PERFORM bdc_field       USING 'FS006-DOCID'
    *                                  record-docid_009.
    *    PERFORM bdc_field       USING 'RF05A-NEWBS'
    *                                  record-newbs_010.
    *    PERFORM bdc_field       USING 'RF05A-NEWKO'
    *                                  record-newko_011.
    *    PERFORM bdc_dynpro      USING 'SAPMF05A' '0301'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'RF05A-NEWKO'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '/00'.
    *    PERFORM bdc_field       USING 'BSEG-WRBTR'
    *                                  record-wrbtr_012.
    *    PERFORM bdc_field       USING 'BSEG-ZTERM'
    *                                  record-zterm_013.
    *    PERFORM bdc_field       USING 'BSEG-ZBD1T'
    *                                  record-zbd1t_014.
    *    PERFORM bdc_field       USING 'BSEG-ZFBDT'
    *                                  record-zfbdt_015.
    *    PERFORM bdc_field       USING 'BSEG-ZUONR'
    *                                  record-zuonr_016.
    *    PERFORM bdc_field       USING 'BSEG-SGTXT'
    *                                  record-sgtxt_017.
    *    PERFORM bdc_field       USING 'RF05A-NEWBS'
    *                                  record-newbs_018.
    *    PERFORM bdc_field       USING 'RF05A-NEWKO'
    *                                  record-newko_019.
    *    PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'BSEG-SGTXT'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '/00'.
    *    PERFORM bdc_field       USING 'BSEG-WRBTR'
    *                                  record-wrbtr_020.
    *    PERFORM bdc_field       USING 'BSEG-MWSKZ'
    *                                  record-mwskz_021.
    *    PERFORM bdc_field       USING 'BSEG-ZUONR'
    *                                  record-zuonr_022.
    *    PERFORM bdc_field       USING 'BSEG-SGTXT'
    *                                  record-sgtxt_023.
    *    PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'COBL-PRCTR'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '=ENTE'.
    *    PERFORM bdc_field       USING 'COBL-PRCTR'
    *                                  record-prctr_024.
    *    PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'BSEG-WRBTR'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '=STER'.
    *    PERFORM bdc_field       USING 'BSEG-WRBTR'
    *                                  record-wrbtr_025.
    *    PERFORM bdc_field       USING 'BSEG-MWSKZ'
    *                                  record-mwskz_026.
    *    PERFORM bdc_field       USING 'BSEG-ZUONR'
    *                                  record-zuonr_027.
    *    PERFORM bdc_field       USING 'BSEG-SGTXT'
    *                                  record-sgtxt_028.
    *    PERFORM bdc_field       USING 'DKACB-FMORE'
    *                                  record-fmore_029.
    *    PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'COBL-PARGB'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '=ENTE'.
    *    PERFORM bdc_field       USING 'COBL-PRCTR'
    *                                  record-prctr_030.
    *    PERFORM bdc_dynpro      USING 'SAPLTAX1' '0300'.
    *    PERFORM bdc_field       USING 'BDC_CURSOR'
    *                                  'BSET-FWSTE(01)'.
    *    PERFORM bdc_field       USING 'BDC_OKCODE'
    *                                  '=GOBU'.
    *    PERFORM bdc_field       USING 'BSET-FWSTE(01)'
    *                                  record-fwste_01_031.
    *    PERFORM bdc_transaction USING 'FB01'.
    *  ENDDO.
      PERFORM close_group.
    *  PERFORM close_dataset USING dataset.
    *endif.
    *&      Form  sub_browse_file
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM sub_browse_file .
      CALL FUNCTION 'F4_FILENAME'
       EXPORTING
         program_name        = syst-cprog
         dynpro_number       = syst-dynnr
    *   FIELD_NAME          = ' '
       IMPORTING
         file_name           = pfile.
    ENDFORM.                    " sub_browse_file
    *&      Form  sub_data_load
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM sub_data_load .
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
    *     I_FIELD_SEPERATOR          =
          i_line_header              = 'X'
          i_tab_raw_data             = it_raw
          i_filename                 = pfile
        TABLES
          i_tab_converted_data       = it_excel[]
    *   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.
    ENDFORM.                    " sub_data_load
    **&      Form  data_selection
    **       text
    **  -->  p1        text
    **  <--  p2        text
    *FORM data_selection .
    *  SELECT * FROM bkpf
    *      INTO CORRESPONDING FIELDS OF TABLE it_bkpf
    *      WHERE budat = p_budat AND
    *      bukrs = p_bukrs.
    *  IF NOT it_bkpf[] IS INITIAL.
    *    SELECT belnr dmbtr mwsts pswsl
    *        FROM bseg INTO TABLE it_bseg
    *        FOR ALL ENTRIES IN it_bkpf
    *        WHERE belnr = it_bkpf-belnr AND
    *        kunnr = p_kunnr AND
    *        hkont = p_hkont AND
    *        pswsl = p_waers.
    *  ENDIF.
    *ENDFORM.                    " data_selection
    **&      Form  data_move
    **       text
    **  -->  p1        text
    **  <--  p2        text
    *FORM data_move.
    *  SORT : it_bseg BY belnr,
    *          it_bkpf BY belnr.
    *  LOOP AT it_bseg.
    *    it_final-dmbtr = it_bseg-dmbtr.
    *    it_final-belnr = it_bseg-belnr.
    *    it_final-mwsts = it_bseg-mwsts.
    *    it_final-pswsl = it_bseg-pswsl.
    *    READ TABLE it_bkpf WITH KEY belnr = it_bseg-belnr BINARY SEARCH.
    *    IF sy-subrc = 0.
    *      it_final-budat = it_bkpf-budat.
    *      it_final-bldat = it_bkpf-bldat.
    *      it_final-xblnr = it_bkpf-xblnr.
    *      it_final-bktxt = it_bkpf-bktxt.
    *    ENDIF.
    *    APPEND it_final.
    *    CLEAR it_final.
    *  ENDLOOP.
    *ENDFORM.                    " data_move
    *&      Form  alv_get_data
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM alv_get_data .
      CLEAR it_fieldcat.
    ***************** Document number
    *  wa_fieldcat-col_pos    = '1'.                    " ALV O/P COL-1
      wa_fieldcat-fieldname  = 'XBLNR_007'.
      wa_fieldcat-seltext_m  = 'Document number'.
      wa_fieldcat-just       = 'L'.
      wa_fieldcat-no_zero(1) = 'X'.
      wa_fieldcat-outputlen  = 15.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    ***************** Posting Date
    *  wa_fieldcat-col_pos    = '2'.                    " ALV O/P COL-1
      wa_fieldcat-fieldname  = 'BUDAT_004'.
      wa_fieldcat-seltext_m  = 'Posting Date'.
      wa_fieldcat-just       = 'L'.
      wa_fieldcat-no_zero(1) = 'X'.
      wa_fieldcat-outputlen  = 20.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    ******************** Document Date
    *  wa_fieldcat-col_pos    = '3'.                     " ALV O/P COL-2
      wa_fieldcat-fieldname  = 'BLDAT_001'.
      wa_fieldcat-seltext_m  = 'Document Date'.
      wa_fieldcat-just       = 'L'.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      wa_fieldcat-outputlen  = 15.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    ********************* REFERENCE DOCUMENT
    **  wa_fieldcat-col_pos    = '4'.                     " ALV O/P COL-2
    *  wa_fieldcat-fieldname  = 'XBLNR'.
    *  wa_fieldcat-seltext_m  = 'REFERENCE DOCUMENT'.
    *  wa_fieldcat-just       = 'L'.
    *  wa_fieldcat-tabname    = 'IT_EXCEL'.
    **  wa_fieldcat-outputlen  = 15.
    *  APPEND wa_fieldcat TO it_fieldcat.
    *  CLEAR wa_fieldcat.
    ***************** DOCUMENT HEADER TEXT
    *  wa_fieldcat-col_pos    = '5'.                     " ALV O/P COL-3
      wa_fieldcat-fieldname  = 'SGTXT_017'.
      wa_fieldcat-seltext_m  = 'DOCUMENT HEADER TEXT'.
      wa_fieldcat-just       = 'L'.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
    *  wa_fieldcat-outputlen  = 15.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    *******************Invoice Net amount
    *  wa_fieldcat-col_pos    = '6'.                     " ALV O/P COL-4
      wa_fieldcat-fieldname  = 'WRBTR_012'.
      wa_fieldcat-seltext_m  = 'Invoice Net amount'.
      wa_fieldcat-just       = 'L'.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
    *  wa_fieldcat-outputlen  = 15.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    *********** Tax Amount
    *  wa_fieldcat-col_pos    = '7'.                     " ALV O/P COL-5
      wa_fieldcat-fieldname  = 'WRBTR_025'.
      wa_fieldcat-seltext_m  = 'Tax Amount'.
      wa_fieldcat-just       = 'L'.
    * wa_fieldcat-no_zero(1) = 'X'.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    *********** NEt Amount
    *  wa_fieldcat-col_pos    = '7'.                     " ALV O/P COL-5
      wa_fieldcat-fieldname  = 'WRBTR_020'.
      wa_fieldcat-seltext_m  = 'Net Amount'.
      wa_fieldcat-just       = 'L'.
    * wa_fieldcat-no_zero(1) = 'X'.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    *********** General ledger currency
    *  wa_fieldcat-col_pos    = '7'.                     " ALV O/P COL-5
      wa_fieldcat-fieldname  = 'WAERS_006'.
      wa_fieldcat-seltext_l  = 'General ledger currency'.
      wa_fieldcat-just       = 'L'.
    * wa_fieldcat-no_zero(1) = 'X'.
      wa_fieldcat-outputlen  = 25.
      wa_fieldcat-tabname    = 'IT_EXCEL'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    ENDFORM.                    " alv_get_data
    *&      Form  alv_grid
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM alv_grid .
    *  PERFORM fill_list_header USING it_top_of_page[].
    *  PERFORM event-build USING gt_events[].
      PERFORM fill_layout USING ls_layout.
    MESSAGE 'Please press F3 to generate a session or call transaction method after getting report!' TYPE 'I'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = sy-repid
          is_layout          = ls_layout
          it_fieldcat        = it_fieldcat
          it_events          = gt_events[]
          i_save             = 'A'
        TABLES
          t_outtab           = it_excel
        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.
    ENDFORM.                    " alv_grid
    *                                     FORM FILL_LAYOUT                      *
    FORM fill_layout  USING    p_ls_layout  TYPE slis_layout_alv.
      p_ls_layout-zebra       = 'X'.
      p_ls_layout-cell_merge  = 'X'.
    ENDFORM.                                                         "fill_layout
    *&      Form  sub_calc_excel
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM sub_calc_excel .
          data: idate TYPE sy-datum,
              tdat8 type string.
      LOOP AT it_excel.
        CONCATENATE  it_excel-blart_002 '/' it_excel-monat_005 '/' it_excel-bktxt_008 INTO
            it_excel-sgtxt_017.
        it_excel-bukrs_003 = p_bukrs.
    *    it_excel-budat_004 = p_budat.
        it_excel-waers_006 = p_waers.
        it_excel-newko_011 = p_hkont.
        it_excel-kunnr_019 = p_kunnr.
        it_excel-mwskz     = p_mwskz.
        it_excel-prctr     = p_prctr.
        idate              = p_budat.
        CALL FUNCTION 'DATUMSAUFBEREITUNG'
         EXPORTING
    *       FLAGM                 = ' '
    *       FLAGW                 = ' '
           IDATE                 = idate
    *       IMONT                 = ' '
    *       IWEEK                 = ' '
         IMPORTING
    *       MDAT4                 =
    *       MDAT6                 =
    *       TDAT4                 =
    *       TDAT6                 =
            TDAT8                 = tdat8
    *       WDAT4                 =
    *       WDAT6                 =
    *     EXCEPTIONS
    *       DATFM_UNGUELTIG       = 1
    *       DATUM_UNGUELTIG       = 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.
          it_excel-budat_004 = tdat8.
    *    CONCATENATE it_excel-budat_004+4(2) '/' it_excel-budat_004+6(2) '/'  it_excel-budat_004+0(4)
    *                INTO it_excel-budat_004.
    *    SPLIT it_excel-bldat_001 AT '/' INTO it_excel-month it_excel-date.
    *    CONCATENATE it_excel-date '.' it_excel-month '.' it_excel-bldat_001+6(4) INTO it_excel-bldat_001.
        MODIFY it_excel.
        CLEAR it_excel.
      ENDLOOP.
    ENDFORM.                    " sub_calc_excel
    *&      Form  write
    *       text
    *  -->  p1        text
    *  <--  p2        text
    *form write .
    *OPEN DATASET dataset FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    *data: wa_excel like line of it_excel.
    *loop at it_excel into wa_excel.
    *TRANSFER wa_excel to dataset.
    *endloop.
    *CLOSE DATASETdataset.
    *endform.                    " write

  • Adding a field in a report

    Hi SDN
        i have a small problem where iam unable to add fields in the final internal table
      i have to add two fields i.e., COMMITMENT AND ACTVALUE from ESUH TABLE
    AND the final internal table is l_i_ekpo.
    we have to add only two fields COMMITMENT and a ....variable = COMMITMENT - ACTVALUE. which is already done in the program.
    here iam attaching a program.
    TABLES: ekpo.
    DATA: i_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
    DATA: i_directory_sel LIKE popuptext OCCURS 0 WITH HEADER LINE.
    *{ INSERT PS010306UPGR
    CLASS cl_abap_char_utilities DEFINITION LOAD.
    *} INSERT
    DATA: BEGIN OF tab,
    *{ REPLACE PS010306UPGR
           T(1) TYPE X VALUE '09',  "HEX!
            t(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,  "Unicode
    *} REPLACE
    END OF tab.
    DATA: ekpo_konnr LIKE ekpo-konnr.
    DATA: ekpo_ktpnr LIKE ekpo-ktpnr.
    DATA: BEGIN OF t_bapiessrc OCCURS 0.
            INCLUDE STRUCTURE zbapiessrc_chars.
    DATA: END OF t_bapiessrc.
    DATA: t_bapiessrc_tab(301)  OCCURS 0." with header line.
    DATA: wa_bapiessrc_tab(301).
    DATA: BEGIN OF t_headertext OCCURS 0,
           ext_number LIKE zbapiessrc_chars-ext_number,
           linno(4) TYPE n,
           tcode(20),
           recordname(30),
           txpargraph(2),
           txline(72),
           text_mark,
          END OF t_headertext.
    DATA: BEGIN OF t_itemtext OCCURS 0,
           ext_number LIKE zbapiessrc_chars-ext_number,
           ext_line(18),
           linno(4) TYPE n,
           tcode(20),
           recordname(30),
           txpargraph(2),
           txline(72),
           text_mark,
           ext_linno(6),         
          END OF t_itemtext.
    DATA: t_headertext_tab(180) OCCURS 0.
    DATA: wa_headertext_tab(180).
    DATA: t_itemtext_tab(190) OCCURS 0.
    DATA: wa_itemtext_tab(190).
    DATA: BEGIN OF t_bapiesllc OCCURS 0.
           ext_number like bapiessrc-ext_number.
            INCLUDE STRUCTURE zbapiesllc_chars.
    DATA: END OF t_bapiesllc.
    DATA: t_bapiesllc_tab(650)  OCCURS 0." with header line.
    DATA: wa_bapiesllc_tab(650).
    DATA: no_of_files LIKE sy-index.
    DATA: perc_uploaded TYPE i.
    DATA: text_uploaded(50).
    DATA: text_fi_not_upl1(30), text_fi_not_upl2(30).
    DATA: continue_yn.
    DATA: file TYPE localfile.
    FIELD-SYMBOLS .
    DATA: BEGIN OF clbp_content OCCURS 0.
            INCLUDE STRUCTURE solisti1.
    DATA: END OF clbp_content.
    DATA w_mode VALUE 'A'.
    CONSTANTS:           c_update        VALUE 'S'.
    DATA: BEGIN OF bdcdata OCCURS 0.       " BDC Table
            INCLUDE STRUCTURE bdcdata.
    DATA: END   OF bdcdata.
    DATA: BEGIN OF bdcmsgcoll OCCURS 0.    " BDC Messages
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END   OF bdcmsgcoll.
    DATA params LIKE pri_params.
    DATA list_text LIKE pri_params-prtxt.
    DATA: days(1)  TYPE n VALUE 2,
          count(3) TYPE n VALUE 1,
          valid    TYPE c.
    DATA t_bapi_essr LIKE bapiessrc OCCURS 0.
    DATA t_bapi_essr_log LIKE bapiessrc OCCURS 0 WITH HEADER LINE.
    DATA t_bapi_esll LIKE bapiesllc OCCURS 0.
    DATA t_bapi_esll_log LIKE bapiesllc OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF output_prot OCCURS 0.
            INCLUDE STRUCTURE essr.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF output_prot.
    DATA: BEGIN OF i_sgcses_struc OCCURS 0,
             po_number   LIKE zbapiessrc_chars-po_number,
             po_item     LIKE zbapiessrc_chars-po_item,
             short_text  LIKE zbapiessrc_chars-short_text,
             xblnr       LIKE essr-xblnr,
             ref_date    LIKE zbapiessrc_chars-ref_date,
             service     LIKE zbapiesllc_chars-service,
             flag,
             quantity    LIKE zbapiesllc_chars-quantity,
             final,
          END OF i_sgcses_struc.
    start of insert >>>                                     
    DATA: l_ses_no LIKE essr-lblni.
    TYPES: BEGIN OF t_ekpo,
             ebeln LIKE ekpo-ebeln,
             ebelp LIKE ekpo-ebelp,
             werks LIKE ekpo-werks,
             packno LIKE ekpo-packno,
           END OF t_ekpo.
    DATA: i_ekpo TYPE STANDARD TABLE OF t_ekpo.
    end of insert <<<                                       
    $$----
    S E L E C T I O N   S C R E E N -
    PARAMETERS: p_path TYPE localfile DEFAULT
      'C:     empBasellInterfacesSesSES-Daten'.
    ***parameters:     p_dismod type ctu_mode      default 'A'.
    PARAMETERS:     p_dismod TYPE ctu_mode      DEFAULT 'E'.
    PARAMETERS:     p_spnam  TYPE tsp01-rq2name DEFAULT 'SES_UPL.....'
                                                          OBLIGATORY.
    PARAMETERS:     cb_serv AS CHECKBOX DEFAULT 'X'.
    PARAMETERS:     cb_text AS CHECKBOX DEFAULT 'X'.
    PARAMETERS:     cb_chck AS CHECKBOX DEFAULT 'X'.
    $$----
    A T   S E L E C T I O N   S C R E E N -
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
      DATA: len TYPE i,
            testchar(1).
      CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
        EXPORTING
          mask      = 'C:*.txt'
          static    = 'X'
        CHANGING
          file_name = p_path.
      DESCRIBE FIELD p_path LENGTH len IN CHARACTER MODE.
      DO len TIMES.
        len = len - 1.
        testchar =  p_path+len(1).
        IF testchar = ''.
          len = len + 1.
          p_path = p_path(len).
          EXIT.
        ENDIF.
      ENDDO.
    $$----
    S T A R T   O F   S E L E C T I O N -
    START-OF-SELECTION.
      PERFORM select_files.
    PERFORM spool_settings.                   
      PERFORM upload_files.
      PERFORM select_additional_data.                        
    $$----
    E N D   O F   S E L E C T I O N -
    END-OF-SELECTION.
    PERFORM spool_settings.                                
      CLEAR: perc_uploaded, no_of_files, text_uploaded.
      DESCRIBE TABLE t_bapiessrc LINES no_of_files.
    Loop over header-records: for each header-record one call transaction:
      LOOP AT t_bapiessrc.
        perc_uploaded = ( 100 * sy-tabix ) / no_of_files.
        IF cb_serv = 'X'.
          PERFORM prepare_clipboard.
        Upload Service Entry Sheets:
          PERFORM call_transaction_upload.
        Italian Version begin
          IMPORT output_prot FROM MEMORY ID 'OUT_PROT'.
          PERFORM write_prot_to_spool.
          FREE MEMORY ID 'OUT_PROT'.
          REFRESH: output_prot.
        Italian Version end
          PERFORM find_ses_number.                            
          PERFORM check_estimated_value.                     
        ENDIF.
        IF cb_text = 'X'.
        Upload SES Texts:
          PERFORM upload_texts.
        ENDIF.
      start of insert >>>                                   
        PERFORM change_account.                               
        IF cb_serv = 'X'.
          PERFORM release_ses.
        ENDIF.
      end of insert <<<                                     
      ENDLOOP.
    In case only text and no services shall be uploaded:
      IF NOT cb_text IS INITIAL.
      In case also services are uploaded this loop won't apply cause
         t_headertext-entries are deleted after they were processed in the
         loop above!
        LOOP AT t_headertext.
          MOVE t_headertext-ext_number TO t_bapiessrc-ext_number.
    *only for test cases since data file is not correct:
    move t_headertext-ext_number to t_bapiessrc-ref_doc_no.
    *only for test cases since data file is not correct:END
          PERFORM upload_texts.
        ENDLOOP.
      ENDIF.
      PERFORM log_upload_success.
    NEW-PAGE PRINT OFF.                                    
      PERFORM delete_files.
    WRITE: / text-001.                                     
    write: / 'Check spools for correct processing (Transaction SP01)!'.
    $$----
    T O P   O F   P A G E -
    TOP-OF-PAGE.
    *--at user-command--
    AT USER-COMMAND.
    *--top of page-during line selection--
    TOP-OF-PAGE DURING LINE-SELECTION.
    $$----
    F O R M - R O U T I N E S -
    *&      Form  SPLIT_BAPIESSRC
    FORM split_bapiessrc.
      DATA: l_score_time(3),
            l_score_qual(3),
            l_essr_lblni LIKE essr-lblni.
    start of insert >>>                                     
      TABLES: esuc.
      DATA: l_packno LIKE ekpo-packno.
    end of insert <<<                                       
      CLEAR: t_bapiessrc, ekpo_konnr, ekpo_ktpnr, ekpo.
       TRANSLATE doc_content-line USING '#;'.   ZBAPIESSRC_CHARS
      SPLIT  AT '§' INTO
            t_bapiessrc-sheet_no      t_bapiessrc-ext_number
            t_bapiessrc-person_int    t_bapiessrc-person_ext
            t_bapiessrc-location      t_bapiessrc-ref_date
            t_bapiessrc-begdate       t_bapiessrc-enddate
            t_bapiessrc-pckg_no       t_bapiessrc-short_text
    Only for testing due to wrong data
            t_bapiessrc-po_number     t_bapiessrc-po_item 
           ekpo_konnr ekpo_ktpnr                        
    Only for testing due to wrong data  END
            t_bapiessrc-block_ind     t_bapiessrc-score_time
            t_bapiessrc-score_qual    t_bapiessrc-doc_date
            t_bapiessrc-post_date     t_bapiessrc-ref_doc_no
    Only for testing due to wrong data
           t_bapiessrc-po_number     t_bapiessrc-po_item
    Only for testing due to wrong data  END
            t_bapiessrc-accasscat     t_bapiessrc-comm_no
            t_bapiessrc-user_field    t_bapiessrc-acceptance
    Only for testing due to wrong data
            ekpo_konnr ekpo_ktpnr  t_bapiessrc-final.      
    Only for testing due to wrong data  END
      MOVE '0000000001' TO t_bapiessrc-pckg_no.                
      SHIFT t_bapiessrc-po_item RIGHT DELETING TRAILING space.
      TRANSLATE t_bapiessrc-po_item USING ' 0'.
    start of delete >>>                                     
    IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.
       SELECT SINGLE konnr ktpnr FROM ekpo
                     INTO (ekpo-konnr, ekpo-ktpnr)
                     WHERE ebeln = t_bapiessrc-po_number
                     AND   ebelp = t_bapiessrc-po_item.
       IF NOT sy-subrc IS INITIAL.
         WRITE:/  text-101, t_bapiessrc-ext_number,
                  text-102,
                  t_bapiessrc-po_number,
                  text-103,
                  t_bapiessrc-po_item,
                  text-104.
         WRITE: / text-105.
         EXIT.
       ELSE.
         IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.
           WRITE:/ text-101, t_bapiessrc-ext_number,
                   text-106,
                   ekpo_konnr, '/',
                   ekpo_ktpnr,
                   text-107,
                   t_bapiessrc-po_number,
                   text-103, t_bapiessrc-po_item, ')'.
           WRITE: / text-105.
           EXIT.
         ENDIF.
       ENDIF.
    ENDIF.
    end of delete <<<                                     
    start of insert >>>                                   
      " check contract number
      IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.
        SELECT SINGLE konnr ktpnr packno
          FROM ekpo
          INTO (ekpo-konnr, ekpo-ktpnr, l_packno)
          WHERE ebeln = t_bapiessrc-po_number
          AND   ebelp = t_bapiessrc-po_item.
        IF sy-subrc NE 0.
          " no corresponding PO, no update will be performed
          WRITE:/  text-101, t_bapiessrc-ext_number,
                   text-102,
                   t_bapiessrc-po_number,
                   text-103,
                   t_bapiessrc-po_item,
                   text-104.
          WRITE: / text-105.
          EXIT.
        ELSE.
          " check contract number against table ESUC first.
          SELECT SINGLE *
            FROM esuc
            WHERE packno EQ l_packno
              AND ebeln EQ ekpo_konnr
              AND ebelp EQ ekpo_ktpnr.
          IF sy-subrc NE 0.
            " check against PO line
            IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.
              WRITE:/ text-101, t_bapiessrc-ext_number,
                      text-106,
                      ekpo_konnr, '/',
                      ekpo_ktpnr,
                      text-107,
                      t_bapiessrc-po_number,
                      text-103, t_bapiessrc-po_item, ')'.
              WRITE: / text-105.
              EXIT.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    end of insert <<<                                       
      IF cb_chck = 'X'.
        SELECT SINGLE lblni FROM essr INTO l_essr_lblni
                                      WHERE loekz = ' '
                                      AND   user1 = t_bapiessrc-ext_number.
        IF sy-subrc IS INITIAL.
          WRITE:/ 'External SES', t_bapiessrc-ext_number,
                  'is already uploaded. SES-Number: ', l_essr_lblni.
          WRITE: / 'No update of this sheet was accomplished!'.
          EXIT.
        ENDIF.
      ENDIF.
      APPEND t_bapiessrc.
    ENDFORM.                    " SPLIT_BAPIESSRC
    *&      Form  SPLIT_BAPIESLLC
    FORM split_bapiesllc.
      DATA: l_outl_level(3), l_ovf_tol(3), l_price_unit(5), l_gr_price(23),
            l_target_val(23), l_userf2_num(13), l_quantity(13),
            l_form_val1(13), l_form_val2(13), l_form_val3(13),
            l_form_val4(13), l_form_val5(13), l_ext_number(16).
      CLEAR: t_bapiesllc.
       TRANSLATE doc_content-line USING '#;'.
      SPLIT  AT '§' INTO
            t_bapiesllc-ext_number
            t_bapiesllc-pckg_no        t_bapiesllc-line_no
            t_bapiesllc-ext_line       t_bapiesllc-outl_level
            t_bapiesllc-outl_no        t_bapiesllc-outl_ind
            t_bapiesllc-subpckg_no     t_bapiesllc-service
            t_bapiesllc-serv_type      t_bapiesllc-edition
            t_bapiesllc-ssc_item       t_bapiesllc-ext_serv
            t_bapiesllc-quantity       t_bapiesllc-base_uom
            t_bapiesllc-uom_iso        t_bapiesllc-ovf_tol
            t_bapiesllc-ovf_unlim      t_bapiesllc-price_unit
            t_bapiesllc-gr_price       t_bapiesllc-from_line
            t_bapiesllc-to_line        t_bapiesllc-short_text
            t_bapiesllc-distrib        t_bapiesllc-pers_no
            t_bapiesllc-wagetype       t_bapiesllc-pln_pckg
            t_bapiesllc-pln_line       t_bapiesllc-con_pckg
            t_bapiesllc-con_line       t_bapiesllc-tmp_pckg
            t_bapiesllc-tmp_line       t_bapiesllc-ssc_lim
            t_bapiesllc-limit_line     t_bapiesllc-target_val
            t_bapiesllc-basline_no     t_bapiesllc-basic_line
            t_bapiesllc-alternat       t_bapiesllc-bidder
            t_bapiesllc-supp_line      t_bapiesllc-open_qty
            t_bapiesllc-inform         t_bapiesllc-blanket
            t_bapiesllc-eventual       t_bapiesllc-tax_code
            t_bapiesllc-taxjurcode     t_bapiesllc-price_chg
            t_bapiesllc-matl_group     t_bapiesllc-date
            t_bapiesllc-begintime      t_bapiesllc-endtime
            t_bapiesllc-extpers_no     t_bapiesllc-formula
            t_bapiesllc-form_val1      t_bapiesllc-form_val2
            t_bapiesllc-form_val3      t_bapiesllc-form_val4
            t_bapiesllc-form_val5      t_bapiesllc-userf1_num
            t_bapiesllc-userf2_num     t_bapiesllc-userf1_txt
            t_bapiesllc-userf2_txt     t_bapiesllc-hi_line_no.
    start of insert  >>>                                     "AP13022007i
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = t_bapiesllc-line_no
        IMPORTING
          output = t_bapiesllc-line_no.
    end of insert <<<                                        "AP13022007i
      TRANSLATE t_bapiesllc-quantity USING ',.'.
      MOVE '0000000002' TO t_bapiesllc-pckg_no.                 "TS20082002
      APPEND t_bapiesllc.
    ENDFORM.                    " SPLIT_BAPIESLLC
    *&      Form  SELECT_FILES
    FORM select_files.
      CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
           EXPORTING
                i_path              = p_path
       IMPORTING
            E_PURE_PATH         =
           TABLES
                e_directory         = i_directory_list
          EXCEPTIONS
               download            = 1
               upload              = 2
               execute             = 3
               directory_not_exist = 4
               directory           = 5
               OTHERS              = 6
      IF sy-subrc <> 0.
    *{ REPLACE PS010306UPGR
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        MESSAGE w208(00) WITH 'Enter existing directory'(003).
    *} REPLACE
        EXIT.
      ENDIF.
      LOOP AT i_directory_list.
        CHECK i_directory_list(1) CA 'KPLT'.
       check i_directory_list cs '.XLS' or i_directory_list cs '.TXT'.
        CHECK i_directory_list CS '.TXT'.
        CLEAR i_directory_sel.
        MOVE  'X' TO  i_directory_sel-text(1).
        MOVE  i_directory_list(79) TO  i_directory_sel-text+1(79).
        APPEND i_directory_sel.
      ENDLOOP.
      CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'
        EXPORTING
          popup_title  = 'Select Files for SES-Upload'
          start_column = 10
          start_row    = 1
          end_column   = 50
          end_row      = 16
        IMPORTING
          sy_ucomm     = sy-ucomm
        TABLES
          x_popuptext  = i_directory_sel.
    *Check which Files shall be uploaded:
      LOOP AT  i_directory_sel.
        CHECK i_directory_sel-text(1) NE 'Y'.
        DELETE  i_directory_sel.
      ENDLOOP.
      SORT i_directory_sel.
      DESCRIBE TABLE i_directory_sel LINES no_of_files.
    ENDFORM.                    " SELECT_FILES
    *&      Form  UPLOAD_FILES
    FORM upload_files.
    *{ INSERT PS010306UPGR
      DATA: fname TYPE string.
    *} INSERT
      LOOP AT i_directory_sel.
        CLEAR: file.
        UNASSIGN: .
        perc_uploaded = ( 100 * sy-tabix ) / no_of_files.
        CONCATENATE i_directory_sel-text+1(31) 'uploaded from disk'
                                                         INTO text_uploaded
                                                SEPARATED BY space.
        CONCATENATE p_path i_directory_sel-text+1(31) INTO file.
    Choose the right structure for <doc_content> and <wa_doc_content>
    depending on file type K, P, T or L via assignment of field symbols:
        CASE i_directory_sel-text+1(1).
          WHEN 'K'. "Kopfdaten
            ASSIGN t_bapiessrc_tab   TO .
        ENDCASE.
    *{ REPLACE PS010306UPGR
       CALL FUNCTION 'WS_UPLOAD'
            EXPORTING
                 FILENAME                = FILE
            TABLES
                 DATA_TAB                = <DOC_CONTENT>
            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
                 CUSTOMER_ERROR          = 9
                 OTHERS                  = 10.
        fname = file.
        CALL METHOD cl_gui_frontend_services=>gui_upload
          EXPORTING
            filename = fname
          CHANGING
            data_tab =  0.
          CLEAR: text_fi_not_upl1, text_fi_not_upl2, continue_yn.
          CONCATENATE 'File' i_directory_sel-text+1(21) ': upload failed!'
                       INTO text_fi_not_upl1 SEPARATED BY space.
          MOVE 'Continue Program?' TO text_fi_not_upl2.
          CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
            EXPORTING
              defaultoption  = 'N'
              textline1      = text_fi_not_upl1
              textline2      = text_fi_not_upl2
              titel          = 'Upload Failed'
              start_column   = 25
              start_row      = 6
              cancel_display = ' '
            IMPORTING
              answer         = continue_yn.
          IF continue_yn = 'N'.
            EXIT.
          ENDIF.
            MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ELSE.
    Move uploaded File records line by line into correct internal table:
           t_bapiessrc  for K__.txt
           t_bapiesllc  for P__.txt
           t_headertext for T__.txt
           t_itemtext   for L__.txt
          LOOP AT .
              IF NOT sy-subrc IS INITIAL. EXIT. ENDIF.
            ENDDO.
            CASE i_directory_sel-text+1(1).
              WHEN 'K'. "Kopfdaten
                PERFORM split_bapiessrc.
              WHEN 'T'.
                PERFORM split_headertext.
              WHEN 'P'.
                PERFORM split_bapiesllc.
              WHEN 'L'.
                PERFORM split_itemtext.
            ENDCASE.
          ENDLOOP.
        ENDIF.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage = perc_uploaded
            text       = text_uploaded.
      ENDLOOP.
      SORT t_bapiessrc BY ext_number.
      SORT t_headertext BY ext_number linno.
    SORT t_bapiesllc BY ext_number.                         "
      SORT t_bapiesllc BY ext_number pckg_no line_no.         
    sort t_bapiesllc by ext_number line_no.
      SORT t_itemtext BY ext_number ext_linno ext_line linno.
    ENDFORM.                    " UPLOAD_FILES
    *&      Form  PREPARE_CLIPBOARD
    FORM prepare_clipboard.
      CLEAR:   clbp_content.
      REFRESH: clbp_content.
      DATA: l_line TYPE n.
      DATA: l_tabix LIKE sy-tabix.
      CLEAR l_tabix.
    *Assemble the File-Structure out of the internal tables t_bapiessrc
      and t_bapiesllc which is expected by the user exit
      exit_saplmlsx_002 and move it to the clipboard:
      MOVE 'K' TO clbp_content(1).  "Flag for header record
      MOVE t_bapiessrc TO clbp_content+1(246).
      APPEND clbp_content.
      READ TABLE t_bapiesllc WITH KEY ext_number = t_bapiessrc-comm_no
                                  BINARY SEARCH.
      CHECK sy-subrc IS INITIAL.
      MOVE sy-tabix TO l_tabix.
    insert dummy row for connection between pach_no and sub_packno:
      CLEAR l_line.
      CLEAR: clbp_content, t_bapiesllc.
      ADD 1 TO l_line.
      MOVE 'P' TO clbp_content(1).  "Flag for service-record
      MOVE l_line TO clbp_content+1(1).
      MOVE '0000000001' TO t_bapiesllc-pckg_no.
      MOVE '0000000002' TO t_bapiesllc-subpckg_no.
      WRITE t_bapiesllc16(245) TO clbp_content3(245).
      APPEND clbp_content.
      CLEAR clbp_content.
      ADD 1 TO l_line.
      MOVE 'P' TO clbp_content(1).
      MOVE l_line TO clbp_content+1(1).
      WRITE t_bapiesllc261(245) TO clbp_content3(245).
      APPEND clbp_content.
      APPEND clbp_content.
      CLEAR clbp_content.
      ADD 1 TO l_line.
      MOVE 'P' TO clbp_content(1).
      MOVE l_line TO clbp_content+1(1).
      MOVE 'E' TO clbp_content+2(1).
      WRITE t_bapiesllc506(27) TO clbp_content3(245).
      APPEND clbp_content.
      CLEAR clbp_content.
    end insert
      LOOP AT t_bapiesllc FROM l_tabix.
        CLEAR l_line.
        CLEAR clbp_content.
        IF t_bapiesllc-ext_number NE t_bapiessrc-ext_number.
          EXIT.
        ENDIF.
        ADD 1 TO l_line.
        MOVE 'P' TO clbp_content(1).  "Flag for service-record
      'P'-service records are split into three clipbord-lines since
        structure t_bapiesllc is too long for one line
        MOVE l_line TO clbp_content+1(1).
        WRITE t_bapiesllc16(245) TO clbp_content3(245).
        APPEND clbp_content.
        CLEAR clbp_content.
        ADD 1 TO l_line.
        MOVE 'P' TO clbp_content(1).
        MOVE l_line TO clbp_content+1(1).
        WRITE t_bapiesllc261(245) TO clbp_content3(245).
        APPEND clbp_content.
        CLEAR clbp_content.
        ADD 1 TO l_line.
        MOVE 'P' TO clbp_content(1).
        MOVE l_line TO clbp_content+1(1).
        MOVE 'E' TO clbp_content+2(1).
        WRITE t_bapiesllc506(27) TO clbp_content3(245).
        APPEND clbp_content.
        CLEAR clbp_content.
      ENDLOOP.
    ******Italy version of upload
      PERFORM include_italy.
    export t_bapiessrc to memory id 'GER_ESSRC'.
    export t_bapiesllc to memory id 'GER_ESLLC'.
      EXPORT t_bapi_essr TO MEMORY ID 'GER_ESSRC'.
      EXPORT t_bapi_esll TO MEMORY ID 'GER_ESLLC'.
      CHECK 1 = 2.
    ******Italy version of upload END
      CALL FUNCTION 'CLPB_EXPORT'
        TABLES
          data_tab   = clbp_content
        EXCEPTIONS
          clpb_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.
    ENDFORM.                    " PREPARE_CLIPBOARD
    *&      Form  CALL_TRANSACTION_UPLOAD
    FORM call_transaction_upload.
      REFRESH bdcdata.
      PERFORM bdc_dynpro USING: 'RM11RL00'      '1000'.
      PERFORM bdc_field  USING: 'BDC_OKCODE'    '=UPL'.
      PERFORM bdc_field  USING: 'S_LBLNI-LOW'    '          '.
      PERFORM bdc_field  USING: 'S_LBLNI-HIGH'   '          '.
      PERFORM bdc_field  USING: 'P_BSTNR'        '          '.
      PERFORM bdc_field  USING: 'S_BSTPO-LOW'    '     '.
      PERFORM bdc_field  USING: 'S_BSTPO-HIGH'   '     '.
    *Italian upload version -> comments set|remove comments for Germ.Version
    perform bdc_dynpro using: 'SAPLMLSX'      '0480'.
    perform bdc_field  using: 'BDC_OKCODE'    '=EXEC'.
    perform bdc_dynpro using: 'SAPLGRAP'      '0210'.
    perform bdc_field  using: 'BDC_OKCODE'    '=UPL_FR_CLP'.
      PERFORM bdc_dynpro USING: 'SAPMSSY0'      '0120'.
    perform bdc_field  using: 'MARKIERT'      'X'.
    *Italian upload version -> comments set; END
      CASE p_dismod.
        WHEN 'A'.
          PERFORM bdc_field  USING: 'BDC_OKCODE'    '=LITE'.
        WHEN 'N'.
          PERFORM bdc_field  USING: 'BDC_OKCODE'    '=HIND'.
        WHEN 'E'.
          PERFORM bdc_field  USING: 'BDC_OKCODE'    '=DARK'.
      ENDCASE.
    Here the call transcation of SAP-standard takes place for creating the
      service entry sheet
    After SAP-standard call transaction: analyze the popup with the
    *Italian upload version -> comments set|remove comments for Germ.Version
      PERFORM bdc_dynpro USING: 'SAPMSSY0'      '0120'.
    perform bdc_field  using: 'BDC_OKCODE'    '=PRI'.
    perform bdc_dynpro using: 'SAPLSPRI'      '0100'.
    perform bdc_field  using: 'BDC_OKCODE'    '=PRIN'.
    perform bdc_field  using: 'PRI_PARAMS-PLIST'    p_spnam.
    perform bdc_field  using: 'PRI_PARAMS-PRIMM'    ' '.
    perform bdc_field  using: 'PRI_PARAMS-PRREL'    ' '.
    perform bdc_field  using: 'PRI_PARAMS-PRNEW'    ' '.
    perform bdc_dynpro using: 'SAPMSSY0'      '0120'.
    perform bdc_field  using: 'BDC_OKCODE'    '=EXEC'.
    *Italian upload version -> remove the following line for Germ. version:
      PERFORM bdc_field  USING: 'BDC_OKCODE'    '/00'.
      w_mode = p_dismod.
    currently w_mode and p_dismod are set to the same value:
    foregroud, background or error. But it could also be set to differnt
    values: Foreground for upload clipboard,
      CALL TRANSACTION 'ML81' USING bdcdata MODE w_mode UPDATE c_update
         MESSAGES INTO bdcmsgcoll.
    ENDFORM.                    " CALL_TRANSACTION_UPLOAD
    *&      Form  BDC_DYNPRO
    FORM bdc_dynpro
         USING program TYPE c
               dynpro  TYPE c.
      CLEAR bdcdata.
      bdcdata-program  = program.
      bdcdata-dynpro   = dynpro.
      bdcdata-dynbegin = 'X'.
      APPEND bdcdata.
    ENDFORM.                    " BDC_DYNPRO
    *&      Form  BDC_FIELD
    FORM bdc_field
          USING fnam TYPE c
                fval TYPE c.
      CLEAR bdcdata.
      bdcdata-fnam = fnam.
      bdcdata-fval = fval.
      APPEND bdcdata.
    ENDFORM.                    " BDC_FIELD
    *&      Form  UPLOAD_TEXTS
    FORM upload_texts.
      DATA l_lblni LIKE essr-lblni.
      DATA l_tabix_header_start LIKE sy-tabix.
      DATA l_tabix_item_start LIKE sy-tabix.
      DATA:  p(2) TYPE c.
      DATA:  w  LIKE sy-index.
      DATA:  w_field(20) TYPE c.
      DATA: l_ext_line_save LIKE t_itemtext-ext_line.
      DATA: l_ext_linno_save LIKE t_itemtext-ext_linno.
      DATA: l_extrow(10)."  like ml_esll-extrow.
      DATA: l_messg LIKE message.
      DATA: l_msgno LIKE sy-msgno.
    *only for test cases since data file is not correct:
    read table t_headertext with key ext_number = t_bapiessrc-ref_doc_no.
      READ TABLE t_headertext WITH KEY ext_number = t_bapiessrc-ext_number
                                       BINARY SEARCH.
    *only for test cases since data file is not correct:END
      IF NOT sy-subrc IS INITIAL.
       MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'                
            WITH text-202.                                  
        WRITE: / text-202.                                    
        EXIT.
      ENDIF.
      l_tabix_header_start = sy-tabix.
      SELECT SINGLE MAX( lblni ) FROM essr INTO l_lblni
                   where xblnr = t_headertext-ext_number.
                    WHERE user1 = t_headertext-ext_number
                    AND   loekz = ' '.
      IF NOT sy-subrc IS INITIAL.
       MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'               
            WITH text-203.                                  
        WRITE: / text-203.                                    
        EXIT.
      ENDIF.
      CLEAR: bdcdata, bdcmsgcoll.
      REFRESH: bdcdata, bdcmsgcoll.
      PERFORM bdc_dynpro USING 'RM11RL00' '1000'.
      PERFORM bdc_field USING 'BDC_OKCODE'  '=ONLI'.
      PERFORM bdc_field USING 'S_LBLNI-LOW' l_lblni. " '1000001748'.
      PERFORM bdc_field USING 'BDC_CURSOR'  'P_LIST'.
      PERFORM bdc_field USING 'P_LIST'      ' '.
      PERFORM bdc_field USING 'P_DIRECT'    'X'.
      PERFORM bdc_field USING 'P_LISTU'     ' '.
      PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.
      PERFORM bdc_field USING 'BDC_OKCODE'  '=TXT'.
    perform bdc_field using 'ESSR-TXZ01'  t_headertext-txline(40).
      PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.
      PERFORM bdc_field USING 'BDC_OKCODE'  '=TXBA'.
      CLEAR w.
      ADD 1 TO w.
      LOOP AT t_headertext FROM l_tabix_header_start.
    Is t_bapiessrc-ext_number really filled?
        IF t_headertext-ext_number NE t_bapiessrc-ext_number.
          EXIT.
        ENDIF.
        ADD 1 TO w.
        UNPACK w TO p.
        CLEAR w_field.
        w_field+00(17) = 'RSTXT-TXPARGRAPH('.
        w_field+17(02) = p.
        w_field+19(01) = ')'.
        PERFORM bdc_field USING w_field t_headertext-txpargraph.
        CLEAR w_field.
        w_field+00(13) = 'RSTXT-TXLINE('.
        w_field+13(02) = p.
        w_field+15(01) = ')'.
        PERFORM bdc_field USING w_field t_headertext-txline .
      delete line from internal table so that Upload Texts is not
          processed twice when perform_upload_texts is called without up-
          loading services:
        DELETE t_headertext.
      ENDLOOP.
      PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.
      PERFORM bdc_field USING 'BDC_OKCODE'  '=SERV'.
      PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
      PERFORM bdc_field USING 'BDC_OKCODE'  'ENTER'.
      READ TABLE t_itemtext WITH KEY
                            ext_number = t_bapiessrc-ext_number.
      l_tabix_item_start = sy-tabix.
      CLEAR l_ext_line_save.
      LOOP AT t_itemtext FROM l_tabix_item_start.
        IF t_itemtext-ext_number NE t_bapiessrc-ext_number.
          EXIT.
        ENDIF.
        SHIFT t_itemtext-ext_line RIGHT DELETING TRAILING space.
        TRANSLATE t_itemtext-ext_line USING ' 0'.
        IF ( t_itemtext-ext_line NE l_ext_line_save )
            OR ( t_itemtext-ext_linno NE l_ext_linno_save ).
    ***find line number:
         break michalska.                                    
          SELECT SINGLE extrow FROM ml_esll INTO l_extrow
                                WHERE extrow = t_itemtext-ext_linno
                                  AND srvpos = t_itemtext-ext_line
                                  AND ebeln = l_lblni.
          IF NOT sy-subrc IS INITIAL.
            CONTINUE.
          ENDIF.
          PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
          PERFORM bdc_field USING 'BDC_OKCODE'  'ENTER'.
          PERFORM bdc_field USING 'RM11P-NEW_ROW'  l_extrow.
          PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
          PERFORM bdc_field USING 'BDC_OKCODE'  '=ZLT'.
          PERFORM bdc_field USING 'BDC_CURSOR'  'ESLL-EXTROW(01)'.
          PERFORM bdc_field USING 'RM11P-SELKZ(01)'  'X'.
          PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.
          PERFORM bdc_field USING 'BDC_OKCODE'  '=TXBA'.
          CLEAR w.
          ADD 1 TO w.
        ENDIF.
        ADD 1 TO w.
        UNPACK w TO p.
        CLEAR w_field.
        w_field+00(17) = 'RSTXT-TXPARGRAPH('.
        w_field+17(02) = p.
        w_field+19(01) = ')'.
        PERFORM bdc_field USING w_field t_itemtext-txpargraph.
        CLEAR w_field.
        w_field+00(13) = 'RSTXT-TXLINE('.
        w_field+13(02) = p.
        w_field+15(01) = ')'.
        PERFORM bdc_field USING w_field t_itemtext-txline .
        l_ext_line_save = t_itemtext-ext_line.
        l_ext_linno_save = t_itemtext-ext_linno.
      ENDLOOP.
      PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
      PERFORM bdc_field USING 'BDC_OKCODE'  '=SAV'.
      CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update
         MESSAGES INTO bdcmsgcoll.
      LOOP AT bdcmsgcoll.
        IF sy-tabix = 1.
          WRITE AT: /1 text-002,
         write at: /1 'Log for text uploads of entry sheet ',
                                               37 l_lblni, 48 ':'.
        ENDIF.
      check bdcmsgcoll-msgtyp = 'E' or bdcmsgcoll-msgtyp = 'A'.
        CHECK bdcmsgcoll-msgnr CO ' 0123456789'.
        MOVE  bdcmsgcoll-msgnr TO l_msgno.
        CALL FUNCTION 'WRITE_MESSAGE'
          EXPORTING
            msgid = bdcmsgcoll-msgid
            msgno = l_msgno
            msgty = bdcmsgcoll-msgtyp
            msgv1 = bdcmsgcoll-msgv1
            msgv2 = bdcmsgcoll-msgv2
            msgv3 = bdcmsgcoll-msgv3
            msgv4 = bdcmsgcoll-msgv4
          IMPORTING
            messg = l_messg.
        WRITE AT: /3 l_messg-msgtx.
      ENDLOOP.
    ENDFORM.                    " UPLOAD_TEXTS
    *&      Form  SPLIT_HEADERTEXT
    FORM split_headertext.
      DATA:  l_essr_lblni LIKE essr-lblni.
      CLEAR: t_headertext.
       TRANSLATE doc_content-line USING '#;'.   ZBAPIESSRC_CHARS
      SPLIT  AT '§' INTO
            t_headertext-ext_number
            t_headertext-linno
            t_headertext-tcode
            t_headertext-recordname
            t_headertext-txpargraph
            t_headertext-txline
            t_headertext-text_mark.
    start of insert  >>>                                    
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = t_headertext-linno
        IMPORTING
          output = t_headertext-linno.
    end of insert <<<                                       
      IF cb_chck = 'X'.
        SELECT SINGLE lblni FROM essr INTO l_essr_lblni
                                      WHERE loekz = ' '
                                      AND   user1 = t_headertext-ext_number.
        IF sy-subrc IS INITIAL.
          IF t_headertext-linno = 1.
            WRITE:/ 'External SES', t_headertext-ext_number,
                    'is already uploaded. SES-Number: ', l_essr_lblni.
            WRITE: / 'No update of this sheet-texts was accomplished!'.
          ENDIF.
          EXIT.
        ENDIF.
      ENDIF.
    start of insert >>>                                     
      IF NOT cb_serv IS INITIAL.
        " check
        READ TABLE t_bapiessrc WITH KEY ext_number = t_headertext-ext_number
                               BINARY SEARCH.
        IF sy-subrc NE 0.
          EXIT.
        ENDIF.
      ENDIF.
    end of insert <<<                                      
      APPEND t_headertext.
    ENDFORM.                    " SPLIT_HEADERTEXT
    *&      Form  SPLIT_ITEMTEXT
    FORM split_itemtext.
      DATA: l_essr_lblni LIKE essr-lblni.
      CLEAR: t_itemtext.
       TRANSLATE doc_content-line USING '#;'.   ZBAPIESSRC_CHARS
      SPLIT  AT '§' INTO
            t_itemtext-ext_number
            t_itemtext-ext_line
            t_itemtext-linno
            t_itemtext-tcode
            t_itemtext-recordname
            t_itemtext-txpargraph
            t_itemtext-txline
            t_itemtext-text_mark
            t_itemtext-ext_linno.           
    start of insert  >>>                                    
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = t_itemtext-ext_linno
        IMPORTING
          output = t_itemtext-ext_linno.
    end of insert <<<                                      
      IF cb_chck = 'X'.
        SELECT SINGLE lblni FROM essr INTO l_essr_lblni
                                      WHERE loekz = ' '
                                      AND   user1 = t_itemtext-ext_number.
        IF sy-subrc IS INITIAL.
         write:/ 'External SES', t_itemtext-ext_number,
                 'is already uploaded. SES-Number: ', l_essr_lblni.
         write: / 'No update of this sheet was accomplished!'.
          EXIT.
        ENDIF.
      ENDIF.
      APPEND t_itemtext.
    ENDFORM.                    " SPLIT_ITEMTEXT
    start of delete >>>                                     
    *&      Form  SPOOL_SETTINGS
    *FORM spool_settings.
    MOVE p_spnam TO list_text.
    CALL FUNCTION 'GET_PRINT_PARAMETERS'
       EXPORTING  " destination = 'dest'
         copies         = 1
         list_name      = p_spnam
         list_text      = list_text
         immediately    = ' '
         release        = ' '
         new_list_id    = ' '
         expiration     = 9
         line_size      = 125
         line_count     = 23
         layout         = 'X_65_132'
         sap_cover_page = ' '
         receiver       = 'SAP*'
         department     = 'System'
         no_dialog      = 'X'
       IMPORTING
         out_parameters = params
         valid          = valid.
    IF valid <> space.
       NEW-PAGE PRINT ON PARAMETERS params NO DIALOG.
    ENDIF.
    *ENDFORM.                    " SPOOL_SETTINGS
    end of delete <<<                                       
    *&      Form  DELETE_FILES
          text
    -->  p1        text
    <--  p2        text
    FORM delete_files.
    *{ REPLACE PS010306UPGR
    DATA: l_return.
      DATA: l_return TYPE i.
      DATA: fname TYPE string.
    *} REPLACE
      LOOP AT  i_directory_sel.
       move space to i_directory_sel-text(1).
        MOVE 'X' TO i_directory_sel-text(1).
        MODIFY i_directory_sel.
      ENDLOOP.
    *{ REPLACE                                                 
    CLEAR i_directory_sel.
    MOVE'Xdir_file.bat' TO i_directory_sel-text.
    APPEND i_directory_sel.
    CLEAR i_directory_sel.
    MOVE'Xdir_file.txt' TO i_directory_sel-text.
    APPEND i_directory_sel.
      DATA: l_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
      CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
        EXPORTING
          i_path      = p_path
        TABLES
          e_directory = l_directory_list
        EXCEPTIONS
          OTHERS      = 6.
      IF sy-subrc <> 0.
        LOOP AT l_directory_list.
          IF l_directory_list CS 'dir_file.bat'.
            CLEAR i_directory_sel.
            MOVE'Xdir_file.bat' TO i_directory_sel-text.
            APPEND i_directory_sel.
          ELSEIF l_directory_list CS 'dir_file.txt'.
            CLEAR i_directory_sel.
            MOVE'Xdir_file.txt' TO i_directory_sel-text.
            APPEND i_directory_sel.
          ENDIF.
        ENDLOOP.
      ENDIF.
      CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'
        EXPORTING
          popup_title  = 'Select Files for DELETION'
          start_column = 10
          start_row    = 1
          end_column   = 50
          end_row      = 16
        IMPORTING
          sy_ucomm     = sy-ucomm
        TABLES
          x_popuptext  = i_directory_sel.
    *Check which Files shall be uploaded:
      CHECK sy-ucomm = 'OK'.
      LOOP AT  i_directory_sel.
        CHECK i_directory_sel-text(1) = 'Y'.
        CLEAR file.
        CONCATENATE p_path i_directory_sel-text+1(31) INTO file.
    *{ REPLACE PS010306UPGR
       CALL FUNCTION 'WS_FILE_DELETE'
            EXPORTING
                 FILE   = FILE
            IMPORTING
                 RETURN = L_RETURN.
        fname = file.
        CALL METHOD cl_gui_frontend_services=>file_delete
          EXPORTING
            filename = fname
          CHANGING
            rc  

    HI
    add that fileds in the all locations where you need it like
    in internal table declaration , write statement , select statement
    these are the main areas where you have to add that 2 fileds

  • Hi all..very urgent..error fixing..full marks wud be given for the answers.

    Hi guys..facing problem in error fixing.in bdc...prgm is in ECC 6.0..
    prgm is
    *& Report  ZCJI_CNV_POSTGOODSRECEIPT_ALT1
    REPORT  ZCJI_CNV_POSTGOODSRECEIPT_ALT1.
    *REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT NO STANDARD PAGE HEADING
                      LINE-SIZE 255.
    *Program:  ZCJI_CNV_POSTGOODSRECEIPT_ALT                               *
    *Function: This program is used to carry out GR transaction MB0A for
             CJI import logistics purchase orders. The objective is to
             choose only those purchase orders for which billing has been
             carried out already. Once GR document is posted, the status
             of delivery document items is also updated.
    DATE        AUTHOR      SCR #         CHANGE DESCRIPTION
    11/04/03   Ohm Reddy   BRD # 90      Initial version
                           DEVK928402
    02/25/04   Ohm Reddy                 In BDC session for posting Goods
                           DEVK929329    Receipt document, update document
                                         date with system local date
                                         (SYST-DATLO) rather than with
                                         system date(SYST-DATUM)
    06/23/04   Ohm Reddy                 Post GR only when sales order
                           DEVK931359    item SKU and PO item SKU matches
    03/21/05   Alex Mutia  13829/DEVK934135                              *
                           Phase II modifications:                       *
                           1. Added criteria in the selection screen;    *
                           2. Modified record selection logic;           *
                           3. Added fields in the Control Report;        *
    04/08/05   Alex Mutia  13829/DEVK934262                              *
                           Fixed bug in processing MFRGR field;          *
    04/13/05   Alex Mutia  13829/DEVK934283                              *
                           1.Fixed bug in assigning error record pointers*
                             to part-success part-error POs;             *
                           2.Added SO and SO line item numbers in report;*
                           3.Compressed report to fit in 255 columns;    *
    04/27/05   Alex Mutia  13829/DEVK934384                              *
                           1.Material documents retrieval changed from   *
                             MSEG to EKBE for performance.               *
                           2.Display empty ALV columns when no records   *
                             were selected for processing;               *
    TYPE-POOLS: SLIS.
    DATA:   GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
    DATA:   G_LAYOUT_ALV_SPEC TYPE SLIS_LAYOUT_ALV.
    *INCLUDE ZMMCJI_CNV_POSTGR_BDC2.
    INCLUDE ZCJI_CNV_PGR_DATA_ALT.
    $--"DEVK934135 Begin;-$
    INITIALIZATION.                                  "DEVK934135
      PERFORM INITIALIZE_VENDOR.                     "DEVK934135
      PERFORM INITIALIZE_PRICE.                      "DEVK934135
    $--"DEVK934135 End;---$
    START-OF-SELECTION.
      IF P_LIFNR IS INITIAL.                         "DEVK934135
        PERFORM INITIALIZE_VENDOR.                   "DEVK934135
      ENDIF.                                         "DEVK934135
      IF P_NETPR IS INITIAL.                         "DEVK934135
        PERFORM INITIALIZE_PRICE.                    "DEVK934135
      ENDIF.                                         "DEVK934135
      PERFORM 100_SELECT_DATA.
    END-OF-SELECTION.
    CHECK: g_return_code IS INITIAL.               "DEVK934384
    IF NOT itab[] IS INITIAL.                      "DEVK934384
      IF G_RETURN_CODE IS INITIAL  AND               "DEVK934384
         NOT ITAB[] IS INITIAL.                      "DEVK934384
        PERFORM 200_PROCESS_DATA.
        PERFORM 300_POST_DOCUMENTS.
        PERFORM 399_RETRIEVE_DOCUMENTS.
        PERFORM REORG_ITAB.
        PERFORM BUILD_HEADER_CATALOG.
        PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
        SY_COPY = SYST.
        PERFORM SHOW_TRANSACTION_ERRORS.
      ELSE.                                          "DEVK934384
        PERFORM SHOW_EMPTY_LIST.                     "DEVK934384
      ENDIF.
    *&      Form  SELECT_DATA
    FORM 100_SELECT_DATA.
      PERFORM 110_SELECT_OPEN_PO_QTY.
      CHECK: G_RETURN_CODE IS INITIAL.
      PERFORM 120_SELECT_PO_BILLED_QTY.
    ENDFORM.                    " 100_SELECT_DATA
    *&      Form  110_SELECT_OPEN_PO_QTY
    FORM 110_SELECT_OPEN_PO_QTY.
    $--"DEVK934135 Begin;-$
      SELECT T1~VGBEL
             T1~VGPOS
             T1~VBELN
             T1~POSNR
             T1~MATNR
             T1~LFIMG
             T1~MFRGR
             T2~LIFEX
             T2~LFDAT
             FROM       LIPS AS T1
             INNER JOIN LIKP AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1VBELN EQ T2VBELN
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB_LIPS
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~VBELN IN S_VBELN          "billing doc in criteria
              AND  T1~VGBEL IN S_EBELN          "po reference in criteria
              AND  T1~PSTYV EQ 'ELN'            "billing item category
              AND  T1~WERKS EQ 'JDC1'           "plant
              AND  T1~MFRGR NE 'C'              "material freight group
              AND  T2~LIFNR EQ  P_LIFNR.        "vendor is param vendor
      LOOP AT ITAB_LIPS.
        ITAB_LIPS-EBELN = ITAB_LIPS-VGBEL.
        ITAB_LIPS-EBELP = ITAB_LIPS-VGPOS.
        ITAB_LIPS-CHARG = ITAB_LIPS-LIFEX.
        ITAB_LIPS-OLDMFRGR
                        = ITAB_LIPS-MFRGR.
        MODIFY ITAB_LIPS.
      ENDLOOP.
      IF ITAB_LIPS[] IS INITIAL.
      MESSAGE i032(zm) WITH text-m11.              "DEVK934384
        G_RETURN_CODE = 'X'.
        EXIT.
      ENDIF.
      SELECT T1~EBELN
             T1~EBELP
             T1~LICHA
             T2~MATNR
             T2~MENGE
             T2~LOEKZ
             T2~ELIKZ
             T2~NETPR
             T3~IHREZ
             FROM       EKET AS T1
             INNER JOIN EKPO AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1EBELN EQ T2EBELN  AND
                T1EBELP EQ T2EBELP
             INNER JOIN EKKO AS T3
             ON T1MANDT EQ T3MANDT  AND
                T1EBELN EQ T3EBELN
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB
             FOR ALL ENTRIES IN ITAB_LIPS
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~EBELN EQ ITAB_LIPS-EBELN  "po# matches w/ billing
              AND  T3~BSART IN ('YT', 'YN').    "po type
      IF ITAB[] IS INITIAL.
      MESSAGE i032(zm) WITH text-m11.              "DEVK934384
        G_RETURN_CODE = 'X'.
        EXIT.
      ENDIF.
    $--"DEVK934135 End;---$
    delete any duplicate entries in itab table
      SORT ITAB BY EBELN EBELP.
      DELETE ADJACENT DUPLICATES FROM ITAB COMPARING EBELN EBELP.
      LOOP AT ITAB.
        ITAB-RECID = SY-TABIX.
        IF NOT ITAB-IHREZ IS INITIAL.
          WHILE ITAB-IHREZ+0(1) EQ ' '.
            SHIFT ITAB-IHREZ.
          ENDWHILE.
          WHILE ITAB-IHREZ+9(1) EQ ' '.
            SHIFT ITAB-IHREZ RIGHT.
            ITAB-IHREZ+0(1) = '0'.
          ENDWHILE.
        ENDIF.
        MODIFY ITAB.
      ENDLOOP.
    delete  ITAB_LIPS entries that are not there in ITAB
      LOOP AT ITAB_LIPS.
        SY_COPY-TABIX = SY-TABIX.
        CLEAR ITAB.
        READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                 EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
        SY_COPY-INDEX = SY-TABIX.
        IF SY-SUBRC NE 0.
          DELETE ITAB_LIPS.
        ELSE.
          ITAB_LIPS-IHREZ = ITAB-IHREZ.
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
          ITAB-MFRGR = ITAB_LIPS-MFRGR.
          ITAB-LIFEX = ITAB_LIPS-LIFEX.
          ITAB-OLDMFRGR
                     = ITAB_LIPS-OLDMFRGR.
          MODIFY ITAB      INDEX SY_COPY-INDEX.
        ENDIF.
      ENDLOOP.
    select the goods receipts documents created for the above deliveries
      SELECT EBELN EBELP BELNR GJAHR
                     INTO TABLE ITAB_EKBE FROM EKBE
                                FOR ALL ENTRIES IN ITAB_LIPS
                                WHERE EBELN = ITAB_LIPS-EBELN
                                AND   EBELP = ITAB_LIPS-EBELP.
    select Goods receipt data from MSEG table for the above deliveries
      IF NOT ITAB_EKBE[] IS INITIAL.
        SELECT EBELN EBELP CHARG BWART MENGE MBLNR MJAHR ZEILE
                       INTO TABLE ITAB_MSEG FROM MSEG
                                  FOR ALL ENTRIES IN ITAB_EKBE
                                  WHERE MBLNR = ITAB_EKBE-BELNR
                                  AND   MJAHR = ITAB_EKBE-GJAHR.
      ENDIF.
      SORT ITAB_MSEG BY EBELN EBELP CHARG.
    calculate the GR qty eligible to be posted
      SORT ITAB_LIPS BY EBELN EBELP.
      LOOP AT ITAB_LIPS.
        ITAB_LIPS-POSTQTY = ITAB_LIPS-LFIMG.
        CLEAR ITAB_MSEG.
        LOOP AT ITAB_MSEG WHERE EBELN = ITAB_LIPS-EBELN
                          AND   EBELP = ITAB_LIPS-EBELP
                          AND   CHARG = ITAB_LIPS-CHARG.
          IF ITAB_MSEG-BWART = '101'.
            ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY - ITAB_MSEG-MENGE.
          ELSEIF ITAB_MSEG-BWART = '102'.
            ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY + ITAB_MSEG-MENGE.
          ENDIF.
        ENDLOOP.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
      LOOP AT ITAB.
        ITAB-RECID = SY-TABIX.
        MODIFY ITAB.
        LOOP AT ITAB_LIPS WHERE EBELN EQ ITAB-EBELN
                           AND  EBELP EQ ITAB-EBELP.
          ITAB_LIPS-RECID = ITAB-RECID.
          MODIFY ITAB_LIPS.
        ENDLOOP.
      ENDLOOP.
    free the memory of unnecessary internal tables
    $--"DEVK934135 Begin;-$
      CLEAR: ITAB_EKBE.
      FREE:  ITAB_EKBE.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 110_SELECT_OPEN_PO_QTY
    *&      Form  120_SELECT_PO_BILLED_QTY
    FORM 120_SELECT_PO_BILLED_QTY.
    $--"DEVK934135 Begin;-$
      SELECT T1~VBELN
             T1~POSNR
             T1~FKIMG
             T1~AUBEL
             T1~AUPOS
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB_VBRP
             FROM       VBRP AS T1
             INNER JOIN VBRK AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1VBELN EQ T2VBELN
             FOR ALL ENTRIES IN ITAB
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~VBELN EQ ITAB-IHREZ+0(10) "billing doc = your ref.
              AND  T2~FKSTO EQ ' '.             "status NOT cancelled
    Match ITAB-IHREZ <-> ITAB_VBRP-VBELN...
           ITAB-LICHA <-> ITAB_VBRP-POSNR...
      LOOP AT ITAB.
        SY_COPY-TABIX = SY-TABIX.
      Check your reference (IHREZ) field;
        IF ITAB-IHREZ IS INITIAL.                    "your-ref blank
          ITAB-ERRFA = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-E0A.
          APPEND GT_ERROR.
        ELSE.                                        "your-ref NOT blank
          IF ITAB-IHREZ CO ' 0123456789'.            "your-ref numeric
          ENDIF.                                     "your-ref numeric
          IF SY-FDPOS NE 12.                         "your-ref NOT numeric
            ITAB-ERRFA = 'X'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-E0A.
            APPEND GT_ERROR.
          ELSE.                                      "your-ref NOT numeric
          Check PO line item (LICHA) field;
            IF ITAB-LICHA IS INITIAL.                "line item blank
              ITAB-ERRFA = 'X'.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-E01.
              APPEND GT_ERROR.
            ELSE.                                    "line item NOT blank
              IF ITAB-LICHA CO ' 0123456789'.        "line item numeric
              ENDIF.                                 "line item numeric
              IF SY-FDPOS NE 15.                     "line item NOT numeric
                ITAB-ERRFA = 'X'.
                GT_ERROR-RECID = ITAB-RECID.
                GT_ERROR-ERRTX = TEXT-E01.
                APPEND GT_ERROR.
              ELSE.                                  "line item NOT numeric
                SY_COPY-SUBRC = 4.
                READ TABLE ITAB_VBRP
                     WITH KEY VBELN = ITAB-IHREZ+0(10)
                              POSNR = ITAB-LICHA+0(6)    BINARY SEARCH.
                SY_COPY-SUBRC = SY-SUBRC.
                IF SY_COPY-SUBRC NE 0.
                  ITAB-ERRFA = 'X'.
                  GT_ERROR-RECID = ITAB-RECID.
                  GT_ERROR-ERRTX = TEXT-E01.
                  APPEND GT_ERROR.
                ELSE.                                "DEVK934283
                  ITAB-AUBEL = ITAB_VBRP-AUBEL.      "DEVK934283
                  ITAB-AUPOS = ITAB_VBRP-AUPOS.      "DEVK934283
                ENDIF.
              ENDIF.                                 "line item NOT numeric
            ENDIF.                                   "line item blank
          ENDIF.                                     "your-ref NOT numeric
        ENDIF.                                       "your-ref blank
      Check ID - LIFEX;
        IF ITAB-LIFEX EQ ' '.                        "LIFEX is blank
          ITAB-ERRFB = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERB.
          APPEND GT_ERROR.
        ELSE.                                        "LIFEX is NOT blank
        Check ID - MFRGR;
          IF ITAB-MFRGR NE 'G'.                      "MFRGR NOT G
            ITAB-ERRFC = 'X'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-ERC.
            APPEND GT_ERROR.
          ENDIF.                                     "MFRGR NOT G
        ENDIF.                                       "LIFEX is blank
      Check PO - Deletion indicator;
        IF ITAB-LOEKZ NE ' '.                        "LOEKZ NOT blank
          ITAB-ERRFD = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERD.
          APPEND GT_ERROR.
        ENDIF.                                       "LOEKZ NOT blank
      Check PO - Delivery completed flag;
        IF ITAB-ELIKZ NE ' '.                        "ELIKZ NOT blank
          ITAB-ERRFE = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERE.
          APPEND GT_ERROR.
        ENDIF.                                       "ELIKZ NOT blank
      Check PO - Net price;
        IF ITAB-NETPR LT P_NETPR.                    "price < parameter
          ITAB-ERRFF = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          CONCATENATE TEXT-ERF
                      G_NETPR
                      TEXT-USD
                      INTO GT_ERROR-ERRTX SEPARATED BY SPACE.
          APPEND GT_ERROR.
        ENDIF.                                       "ELIKZ NOT blank
        IF ITAB-AUPOS EQ '000000'.
          CLEAR: ITAB-AUPOS.
        ENDIF.
        MODIFY ITAB INDEX SY_COPY-TABIX.
      ENDLOOP.
      LOOP AT ITAB.                                  "DEVK934283
        READ TABLE ITAB_LIPS                         "DEVK934283
             WITH KEY VGBEL = ITAB-EBELN             "DEVK934283
                      VGPOS = ITAB-EBELP             "DEVK934283
             BINARY SEARCH.                          "DEVK934283
        SY_COPY-TABIX = SY-TABIX.                    "DEVK934283
        IF SY-SUBRC EQ 0.                            "DEVK934283
          ITAB_LIPS-AUBEL = ITAB-AUBEL.              "DEVK934283
          ITAB_LIPS-AUPOS = ITAB-AUPOS.              "DEVK934283
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.      "DEVK934283
        ENDIF.                                       "DEVK934283
      ENDLOOP.                                       "DEVK934283
    Transfer errors from ITAB to ITAB_LIPS;
      LOOP AT ITAB WHERE ERRFA EQ 'X'
                    OR   ERRFB EQ 'X'
                    OR   ERRFC EQ 'X'
                    OR   ERRFD EQ 'X'
                    OR   ERRFE EQ 'X'
                    OR   ERRFF EQ 'X'.
        READ TABLE ITAB_LIPS
             WITH KEY VGBEL = ITAB-EBELN
                      VGPOS = ITAB-EBELP  BINARY SEARCH.
        SY_COPY-TABIX = SY-TABIX.
        IF SY-SUBRC EQ 0.
          ITAB_LIPS-ERRFA    = ITAB-ERRFA.
          ITAB_LIPS-ERRFB    = ITAB-ERRFB.
          ITAB_LIPS-ERRFC    = ITAB-ERRFC.
          ITAB_LIPS-ERRFD    = ITAB-ERRFD.
          ITAB_LIPS-ERRFE    = ITAB-ERRFE.
          ITAB_LIPS-ERRFF    = ITAB-ERRFF.
          ITAB_LIPS-NEWMFRGR = 'E'.
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
        ENDIF.
      ENDLOOP.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 120_SELECT_PO_BILLED_QTY
    *&      Form  200_PROCESS_DATA
    FORM 200_PROCESS_DATA.
      PERFORM 210_CONSOLIDATE_DATA.
      PERFORM 220_PROCESS_DATA.
    ENDFORM.                    " 200_PROCESS_DATA
    *&      Form  210_consolidate_data
    FORM 210_CONSOLIDATE_DATA.
    Get the PO item open qty and billed qty into one table
      LOOP AT ITAB.
        CLEAR ITAB_LIPS.
        LOOP AT ITAB_LIPS WHERE EBELN = ITAB-EBELN
                          AND   EBELP = ITAB-EBELP.
         ITAB-IDQTY = ITAB-IDQTY + ITAB_LIPS-POSTQTY.      "inbound delv qty
        ENDLOOP.
        CLEAR ITAB_VBRP.
        LOOP AT ITAB_VBRP WHERE VBELN = ITAB-IHREZ
                          AND   POSNR = ITAB-LICHA.
          ITAB-FKIMG = ITAB-FKIMG + ITAB_VBRP-FKIMG.    "PO item billed qty
        ENDLOOP.
        CLEAR ITAB_MSEG.
        LOOP AT ITAB_MSEG WHERE EBELN = ITAB-EBELN
                          AND   EBELP = ITAB-EBELP.
          IF ITAB_MSEG-BWART = '101'.
           ITAB-GRQTY = ITAB-GRQTY + ITAB_MSEG-MENGE.        "PO item GR qty
          ELSEIF ITAB_MSEG-BWART = '102'.
           ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE.        "PO item GR qty
          ELSEIF ITAB_MSEG-BWART = '122'.            "DEVK934135
           ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE.        "PO item GR qty
          ENDIF.
        ENDLOOP.
        ITAB-RCVQTY = ITAB-FKIMG - ITAB-GRQTY.  "qty billed but not received
    calculate the quantity to be processed for which GRs are to be posted
        IF ITAB-RCVQTY > 0 AND ITAB-RCVQTY > ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-IDQTY.
        ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY < ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-RCVQTY.
        ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY = ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-IDQTY.
        ENDIF.
        MODIFY ITAB.
        CLEAR ITAB.
      ENDLOOP.
    free the memory of unnecessary internal tables
    $--"DEVK934135 Begin;-$
      CLEAR: ITAB_MSEG.
      FREE:  ITAB_MSEG.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 210_consolidate_data
    *&      Form  220_PROCESS_DATA
    FORM 220_PROCESS_DATA.
      DATA: L0_FISCAL_PERIOD  LIKE BAPI0002_4-FISCAL_PERIOD,
            L0_FISCAL_YEAR    LIKE BAPI0002_4-FISCAL_YEAR,
            L0_RETURN         LIKE BAPIRETURN1,
            L1_FISCAL_PERIOD  LIKE BAPI0002_4-FISCAL_PERIOD,
            L1_FISCAL_YEAR    LIKE BAPI0002_4-FISCAL_YEAR,
            L1_RETURN         LIKE BAPIRETURN1.
      SORT ITAB_LIPS BY VGBEL VGPOS EBELN EBELP
                        LFDAT DESCENDING POSNR ASCENDING.
      SORT ITAB BY EBELN EBELP.
    Calculate the GR quanities to be posted for all inbound deliveries
      LOOP AT ITAB_LIPS.
        AT NEW EBELP.
          CLEAR ITAB.
          CLEAR V_RCVQTY.
          READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                   EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
          V_RCVQTY = ITAB-RCVQTY.
        ENDAT.
        IF ITAB-PROCQTY GT 0.
          IF ITAB_LIPS-POSTQTY GT ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB-PROCQTY.
            ITAB_LIPS-NEWMFRGR = 'B'.
            ITAB-PROCQTY = 0.
          ELSEIF ITAB_LIPS-POSTQTY LT ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
            ITAB_LIPS-NEWMFRGR = 'C'.
            ITAB-PROCQTY = ITAB-PROCQTY - ITAB_LIPS-POSTQTY.
          ELSEIF ITAB_LIPS-POSTQTY EQ ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
            ITAB_LIPS-NEWMFRGR = 'C'.
            ITAB-PROCQTY = 0.
          ENDIF.
    Compare the Inbound delivery processing quantity with the pending
    billing quantity to write it in the report log
          IF ITAB_LIPS-POSTQTY LT V_RCVQTY.
            ITAB_LIPS-GRIND = 'D'.            "GR will be created for ID qty
            V_RCVQTY = V_RCVQTY - ITAB_LIPS-POSTQTY.
          ELSEIF ITAB_LIPS-POSTQTY GT V_RCVQTY.
            ITAB_LIPS-GRIND = 'B'.       "GR will be created for Billied qty
            V_RCVQTY = 0.
          ELSEIF ITAB_LIPS-POSTQTY EQ V_RCVQTY.
            ITAB_LIPS-GRIND = 'S'.            "Billed qty is equal to ID qty
            V_RCVQTY = 0.
          ENDIF.
        ELSE.
    Decide why this inbound delivery could not have GR quantity -
    excess GR quantity or unavailable Billing quantity
          IF ITAB-RCVQTY LT ITAB-IDQTY.
            ITAB_LIPS-GRIND = 'C'.      "GR not created - Lack of Billed qty
          ENDIF.
          IF ITAB-RCVQTY LT 0.
            ITAB_LIPS-GRIND = 'A'.       "GR not created - GR qty > Bill qty
          ENDIF.
        ENDIF.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
    $--"DEVK934135-Begin;-$
      LOOP AT ITAB_LIPS.
        AT NEW EBELP.
          CLEAR ITAB.
          CLEAR V_RCVQTY.
          READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                   EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
          V_RCVQTY = ITAB-FKIMG - ITAB-GRQTY.
        ENDAT.
        IF ITAB_LIPS-ERRFA IS INITIAL.
          IF V_RCVQTY EQ 0.
            ITAB_LIPS-ERRF1    = 'X'.
            ITAB_LIPS-NEWMFRGR = 'E'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-R01.
            APPEND GT_ERROR.
          ELSEIF V_RCVQTY LT 0.
            ITAB_LIPS-ERRF2    = 'X'.
            ITAB_LIPS-NEWMFRGR = 'E'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-R02.
            APPEND GT_ERROR.
          ELSEIF V_RCVQTY GT 0.
            IF V_RCVQTY EQ ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF3    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'C'.
            ELSEIF V_RCVQTY GT ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF4    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'C'.
              ITAB_LIPS-PROCQTY  =  ITAB_LIPS-LFIMG.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-R04.
              APPEND GT_ERROR.
            ELSEIF V_RCVQTY LT ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF5    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'E'.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-R05.
              APPEND GT_ERROR.
            ENDIF.
          ENDIF.
        ENDIF.
        CLEAR: ITAB_LIPS-BLDAT.
        READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-VGBEL
                                 EBELP = ITAB_LIPS-VGPOS BINARY SEARCH.
        SELECT SINGLE FKDAT
               FROM  VBRK
               INTO (ITAB_LIPS-BLDAT)
               WHERE VBELN EQ ITAB-IHREZ+0(10).
        CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
             EXPORTING
                  COMPANYCODEID = 'C800'
                  POSTING_DATE  =  ITAB_LIPS-BLDAT
             IMPORTING
                  FISCAL_YEAR   =  L0_FISCAL_YEAR
                  FISCAL_PERIOD =  L0_FISCAL_PERIOD
                  RETURN        =  L0_RETURN.
        CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
             EXPORTING
                  COMPANYCODEID = 'C800'
                  POSTING_DATE  =  SY-DATLO
             IMPORTING
                  FISCAL_YEAR   =  L1_FISCAL_YEAR
                  FISCAL_PERIOD =  L1_FISCAL_PERIOD
                  RETURN        =  L1_RETURN.
        IF L0_FISCAL_YEAR   EQ L1_FISCAL_YEAR  AND
           L0_FISCAL_PERIOD EQ L1_FISCAL_PERIOD.
          ITAB_LIPS-BUDAT = ITAB_LIPS-BLDAT.
        ELSE.
          ITAB_LIPS-BUDAT = SY-DATLO.
        ENDIF.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
    $--"DEVK934135-End;---$
    collect all the inbound deliveries for which goods receipt are to be
    made / material freight status  are to be updated
      LOOP AT ITAB_LIPS    WHERE ERRFA IS INITIAL       "DEVK934135
                            AND  ERRFB IS INITIAL       "DEVK934135
                            AND  ERRFC IS INITIAL       "DEVK934135
                            AND  ERRFD IS INITIAL       "DEVK934135
                            AND  ERRFE IS INITIAL       "DEVK934135
                            AND  ERRFF IS INITIAL       "DEVK934135
                            AND  ERRF1 IS INITIAL       "DEVK934135
                            AND  ERRF2 IS INITIAL       "DEVK934135
                            AND  ERRF5 IS INITIAL.      "DEVK934135
        IF ITAB_LIPS-PROCQTY GT 0 AND ITAB_LIPS-LFIMG NE 0.
          ITAB_LIPS_G-VBELN = ITAB_LIPS-VBELN.
          ITAB_LIPS_G-BLDAT = ITAB_LIPS-BLDAT.       "DEVK934135
          ITAB_LIPS_G-BUDAT = ITAB_LIPS-BUDAT.       "DEVK934135
          ITAB_LIPS_G-IHREZ = ITAB_LIPS-IHREZ.       "DEVK934135
          APPEND ITAB_LIPS_G.
        ENDIF.
      ENDLOOP.
      SORT ITAB_LIPS_G BY VBELN.
      DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_G.
      LOOP AT ITAB_LIPS    WHERE NOT ERRFA IS INITIAL       "DEVK934135
                            OR   NOT ERRFB IS INITIAL       "DEVK934135
                            OR   NOT ERRFC IS INITIAL       "DEVK934135
                            OR   NOT ERRFD IS INITIAL       "DEVK934135
                            OR   NOT ERRFE IS INITIAL       "DEVK934135
                            OR   NOT ERRFF IS INITIAL       "DEVK934135
                            OR   NOT ERRF1 IS INITIAL       "DEVK934135
                            OR   NOT ERRF2 IS INITIAL       "DEVK934135
                            OR   NOT ERRF3 IS INITIAL       "DEVK934135
                            OR   NOT ERRF4 IS INITIAL       "DEVK934135
                            OR   NOT ERRF5 IS INITIAL.      "DEVK934135
          ITAB_LIPS_X-VBELN = ITAB_LIPS-VBELN.
          ITAB_LIPS_X-BLDAT = ITAB_LIPS-BLDAT.       "DEVK934135
          ITAB_LIPS_X-BUDAT = ITAB_LIPS-BUDAT.       "DEVK934135
          ITAB_LIPS_X-IHREZ = ITAB_LIPS-IHREZ.       "DEVK934135
          APPEND ITAB_LIPS_X.
      ENDLOOP.
      SORT ITAB_LIPS_X BY VBELN.
      DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_X.
      LOOP AT ITAB_LIPS.
          READ TABLE ITAB WITH KEY RECID = ITAB_LIPS-RECID.
          SY_COPY-INDEX = SY-TABIX.
          IF SY-SUBRC EQ 0.
            ITAB-ERRFA = ITAB_LIPS-ERRFA.
            ITAB-ERRFB = ITAB_LIPS-ERRFB.
            ITAB-ERRFC = ITAB_LIPS-ERRFC.
            ITAB-ERRFD = ITAB_LIPS-ERRFD.
            ITAB-ERRFE = ITAB_LIPS-ERRFE.
            ITAB-ERRFF = ITAB_LIPS-ERRFF.
            ITAB-ERRF1 = ITAB_LIPS-ERRF1.
            ITAB-ERRF2 = ITAB_LIPS-ERRF2.
            ITAB-ERRF3 = ITAB_LIPS-ERRF3.
            ITAB-ERRF4 = ITAB_LIPS-ERRF4.
            ITAB-ERRF5 = ITAB_LIPS-ERRF5.
            MODIFY ITAB INDEX SY_COPY-INDEX.
          ENDIF.
      ENDLOOP.
    Decide the goods receipt item number for the delivery items that are
    to be processed. Delivery items with zero quantities are not shown up
    in MB0A transaction for GR
      CLEAR V_DEL_ZERO.
      IF NOT ITAB_LIPS_G[] IS INITIAL.
        SELECT VBELN POSNR LFIMG
                  INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
                                  FOR ALL ENTRIES IN ITAB_LIPS_G
                                  WHERE VBELN = ITAB_LIPS_G-VBELN
                                  AND LFIMG EQ 0.
        IF SY-SUBRC EQ 0.
          V_DEL_ZERO = 'X'.
          CLEAR ITAB_LIPS_Z.
          FREE ITAB_LIPS_Z.
          SELECT VBELN POSNR LFIMG
                   INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
                                    FOR ALL ENTRIES IN ITAB_LIPS_G
                                    WHERE VBELN = ITAB_LIPS_G-VBELN.
          SORT ITAB_LIPS_Z BY VBELN POSNR.
          LOOP AT ITAB_LIPS_Z.
            AT NEW VBELN.
              CLEAR V_ZEILE.
            ENDAT.
            IF ITAB_LIPS_Z-LFIMG NE 0.
              V_ZEILE = V_ZEILE + 1.
            ENDIF.
            ITAB_LIPS_Z-ZEILE = V_ZEILE.
            MODIFY ITAB_LIPS_Z.
          ENDLOOP.
        ELSE.
          V_DEL_ZERO = ' '.
        ENDIF.
      ENDIF.
      SORT ITAB_LIPS_Z BY VBELN POSNR.
      LOOP AT ITAB_LIPS.
        IF V_DEL_ZERO = ' '.
          ITAB_LIPS-ZEILE = ITAB_LIPS-POSNR.
        ELSE.
          CLEAR ITAB_LIPS_Z.
          READ TABLE ITAB_LIPS_Z WITH KEY VBELN = ITAB_LIPS-VBELN
                                    POSNR = ITAB_LIPS-POSNR BINARY SEARCH.
          ITAB_LIPS-ZEILE = ITAB_LIPS_Z-ZEILE.
        ENDIF.
        MODIFY ITAB_LIPS.
      ENDLOOP.
      SORT ITAB_LIPS BY VBELN DESCENDING POSNR ASCENDING.
    ENDFORM.                    " 220_PROCESS_DATA
    *&      Form  300_post_documents
    FORM 300_POST_DOCUMENTS.
      LOOP AT ITAB_LIPS_G.
        PERFORM 310_POST_GR_DOC.
        MODIFY ITAB_LIPS_G.
        CLEAR ITAB_LIPS_G.
      ENDLOOP.
      CLEAR: BDCDATA, BDCDATA[].
      ITAB_LIPS_R[] = ITAB_LIPS_G[].
      ITAB_LIPS_G[] = ITAB_LIPS_X[].
      LOOP AT ITAB_LIPS_G.
        PERFORM 350_UPDATE_DELIVERY_DOC.
        MODIFY ITAB_LIPS_G.
        CLEAR ITAB_LIPS_G.
      ENDLOOP.
    PERFORM close_group.
    ENDFORM.                    " 300_post_documents
    *&      Form  310_POST_GR_DOC
    FORM 310_POST_GR_DOC.
      PERFORM 320_POST_GR_HEADER.
      LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
                        AND   LFIMG NE 0
                        AND PROCQTY NE 0
                        AND ERRFA   IS INITIAL
                        AND ERRFB   IS INITIAL
                        AND ERRFC   IS INITIAL
                        AND ERRFD   IS INITIAL
                        AND ERRFE   IS INITIAL
                        AND ERRFF   IS INITIAL
                        AND ERRF1   IS INITIAL
                        AND ERRF2   IS INITIAL
                        AND ERRF5   IS INITIAL.
        IF ITAB_LIPS-ZEILE EQ 1.
          PERFORM 335_POST_GR_ITEMS.
        ELSE.
          PERFORM 330_POST_GR_ITEMS.
        ENDIF.
      ENDLOOP.
      PERFORM 340_SAVE_GR_DOC.
    ENDFORM.                    " 310_POST_GR_DOC
    *&      Form  320_POST_GR_HEADER
    FORM 320_POST_GR_HEADER.
      DATA: L_BLDAT    TYPE SYDATUM,
            L_BUDAT    TYPE SYDATUM.
      WRITE: ITAB_LIPS_G-BLDAT TO L_BLDAT,
             ITAB_LIPS_G-BUDAT TO L_BUDAT.
      IF ITAB_LIPS_G-IHREZ+0(10) NE '0000000000'  AND
         ITAB_LIPS_G-IHREZ+0(10) NE '          '.
        WHILE ITAB_LIPS_G-IHREZ+0(1) EQ '0'.
          SHIFT ITAB_LIPS_G-IHREZ.
        ENDWHILE.
      ENDIF.
      perform bdc_dynpro      using 'SAPMM07M' '0201'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM07M-VLIEF'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      PERFORM BDC_FIELD       USING 'MKPF-BKTXT'
                                    ITAB_LIPS_G-IHREZ.
      perform bdc_field       using 'MKPF-BLDAT'
                                    L_BLDAT.
      perform bdc_field       using 'MKPF-BUDAT'
                                    L_BUDAT.
      perform bdc_field       using 'RM07M-BWARTWE'
                                    '101'.
      perform bdc_field       using 'RM07M-WERKS'
      perform bdc_field       using 'RM07M-LGORT'
      perform bdc_field       using 'RM07M-XNUVO'
                                    'X'.
      perform bdc_field       using 'XFULL'
      perform bdc_field       using 'RM07M-VLIEF'
                                    ITAB_LIPS_G-VBELN.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SELN'.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MSEG-ERFMG(01)'.
    ENDFORM.                    " 320_POST_GR_HEADER
    *&      Form  330_POST_GR_ITEMS
    FORM 330_POST_GR_ITEMS.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=KLA'.
      perform bdc_dynpro      using 'SAPMM07M' '1501'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=OK'.
      VV_ZEILE = ITAB_LIPS-ZEILE.
      PERFORM BDC_FIELD       USING 'RM07M-ZEILE'
                                    VV_ZEILE.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'RM07M-XSELK(01)'
                                    'X'.
      VV_PROCQTY = ITAB_LIPS-PROCQTY.
      perform bdc_field       using 'MSEG-ERFMG(01)'
                                    VV_PROCQTY.
      perform bdc_field       using 'MSEG-CHARG(01)'
                                    ITAB_LIPS-CHARG.
      perform bdc_field       using 'MSEG-INSMK(01)'
                                    'S'.
    ENDFORM.                    " 330_POST_GR_ITEMS
    *&      Form  340_SAVE_GR_DOC
    FORM 340_SAVE_GR_DOC.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=BU'.
      CLEAR V_FAIL_IND.
      PERFORM BDC_TRANSACTION USING 'MB0A'
                              CHANGING V_FAIL_IND.
    ENDFORM.                    " 340_SAVE_GR_DOC
    *&      Form  350_UPDATE_DELIVERY_DOC
    FORM 350_UPDATE_DELIVERY_DOC.
      PERFORM 360_UPDATE_DELIVERY_HEADER.
      LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
                         AND  ERRFA IS INITIAL
                         AND  ERRFB IS INITIAL
                         AND  ERRFC IS INITIAL.
                       AND  errfd IS INITIAL
                       AND  errfe IS INITIAL.
        PERFORM 370_UPDATE_DELIVERY_ITEMS.
      ENDLOOP.
      PERFORM 380_SAVE_DELIVERY_DOC.
    ENDFORM.                    " 350_UPDATE_DELIVERY_DOC
    *&      Form  360_UPDATE_DELIVERY_HEADER
    FORM 360_UPDATE_DELIVERY_HEADER.
      perform bdc_dynpro      using 'SAPMV50A' '0108'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIKP-VBELN'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=UELA'.
      perform bdc_field       using 'LIKP-VBELN'
                                    ITAB_LIPS_G-VBELN.
    ENDFORM.                    " 360_UPDATE_DELIVERY_HEADER
    *&      Form  370_UPDATE_DELIVERY_ITEMS
    FORM 370_UPDATE_DELIVERY_ITEMS.
      IF ITAB_LIPS-ERRFD EQ 'X'  OR
         ITAB_LIPS-ERRFE EQ 'X'  OR
         ITAB_LIPS-ERRFF EQ 'X'.
        ITAB_LIPS-NEWMFRGR = 'E'.
      ENDIF.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-VERUR_LA'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POPO'.
      perform bdc_dynpro      using 'SAPMV50A' '0111'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-POSNR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POPO'.
      VV_POSNR =  ITAB_LIPS-POSNR.
      perform bdc_field       using 'RV50A-POSNR'
                                    VV_POSNR.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIPS-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=LAPD'.
      perform bdc_field       using 'RV50A-LIPS_SELKZ(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPMV50A' '0570'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIPS-MFRGR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=BACK'.
      perform bdc_field       using 'LIPS-MFRGR'
                                    ITAB_LIPS-NEWMFRGR.
    ENDFORM.                    " 370_UPDATE_DELIVERY_ITEMS
    *&      Form  380_SAVE_DELIVERY_DOC
    FORM 380_SAVE_DELIVERY_DOC.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-VERUR_LA'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SICH'.
    If GR document is not posted successfully, then do not update the
    status of delivery document
      CLEAR V_FAIL_IND.
      PERFORM BDC_TRANSACTION USING 'VL32'
                              CHANGING V_FAIL_IND.
      IF V_FAIL_IND = 'X'.
        CALL FUNCTION 'BDC_INSERT'
             EXPORTING
                  TCODE     = 'VL32'
             TABLES
                  DYNPROTAB = BDCDATA.
        REFRESH BDCDATA.
      ENDIF.
    ENDFORM.                    " 380_SAVE_DELIVERY_DOC
           Start new transaction according to parameters                 *
    FORM BDC_TRANSACTION USING TCODE
                         CHANGING V_FAILURE_IND.
      DATA: L_MSTRING(480).
      DATA: L_SUBRC LIKE SY-SUBRC.
      REFRESH MESSTAB.
      CALL TRANSACTION TCODE USING BDCDATA
                       MODE   CTUMODE
                       UPDATE CUPDATE
                       MESSAGES INTO MESSTAB.
      L_SUBRC = SY-SUBRC.
      CLEAR V_FAILURE_IND.
      IF L_SUBRC NE 0.
        V_FAILURE_IND = 'X'.
        CLEAR V_IND.
        LOOP AT MESSTAB.
          SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
                                    AND   ARBGB = MESSTAB-MSGID
                                    AND   MSGNR = MESSTAB-MSGNR.
          IF SY-SUBRC = 0.
            L_MSTRING = T100-TEXT.
            IF L_MSTRING CS '&1'.
              REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
              REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
              REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
              REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
            ELSE.
              REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
            ENDIF.
            CONDENSE L_MSTRING.
            IF MESSTAB-MSGTYP = 'E'.
              ERRORTAB-TCODE       = TCODE.
              ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
              ERRORTAB-ERROR_TEXT  = L_MSTRING.
              APPEND ERRORTAB.
              V_IND = 'X'.
            ENDIF.
          ELSE.
            IF MESSTAB-MSGTYP = 'E'.
              ERRORTAB-TCODE       = TCODE.
              ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
              ERRORTAB-ERROR_TEXT  = TEXT-U01.
              APPEND ERRORTAB.
              V_IND = 'X'.
            ENDIF.
          ENDIF.
        ENDLOOP.
        IF V_IND IS INITIAL.
          ERRORTAB-TCODE       = TCODE.
          ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
          ERRORTAB-ERROR_TEXT  = TEXT-U01.
          APPEND ERRORTAB.
        ENDIF.
      ELSE.
        IF TCODE = 'MB0A'.
          LOOP AT MESSTAB WHERE MSGTYP = 'S'
                          AND   MSGID = 'M7'
                          AND   MSGNR = '060'.
            IF NOT MESSTAB-MSGV1 IS INITIAL.
              ITAB_LIPS_G-MBLNR = MESSTAB-MSGV1.
            ENDIF.
          ENDLOOP.
        ELSEIF TCODE = 'VL32'.
          ITAB_LIPS_G-DLVIND = 'X'.
        ENDIF.
      ENDIF.
      IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
        IF E_GROUP_OPENED = ' '.
          CALL FUNCTION 'BDC_OPEN_GROUP'
               EXPORTING
                    CLIENT   = SY-MANDT
                    GROUP    = E_GROUP
                    USER     = E_USER
                    KEEP     = E_KEEP
                    HOLDDATE = E_HDATE.
          E_GROUP_OPENED = 'X'.
        ENDIF.
        CALL FUNCTION 'BDC_INSERT'
             EXPORTING
                  TCODE     = TCODE
             TABLES
                  DYNPROTAB = BDCDATA.
      ENDIF.
      REFRESH BDCDATA.
    ENDFORM.
    *&      Form  335_POST_GR_ITEMS
    FORM 335_POST_GR_ITEMS.
      VV_ZEILE = ITAB_LIPS-ZEILE.
      perform bdc_field       using 'RM07M-XSELK(01)'
                                    'X'.
      VV_PROCQTY = ITAB_LIPS-PROCQTY.
      perform bdc_field       using 'MSEG-ERFMG(01)'
                                    VV_PROCQTY.
      perform bdc_field       using 'MSEG-CHARG(01)'
                                    ITAB_LIPS-CHARG.
      perform bdc_field       using 'MSEG-INSMK(01)'
                                    'S'.
    ENDFORM.                    " 335_POST_GR_ITEMS
    *&      Form  399_RETRIEVE_DOCUMENTS
    &----

    that is a warning message only ... But if you want to fix it then replace all 000 with 001 in your write statement. The position instead of 000 you have to give 001
    write : /000(10)....instead of this
    write : /1(10) or write : /(10) or write : /001(10) any thing you can use.
    regards
    shiba dutta

  • Logic needed Pls help

    Hi
    I have to add 'Upload excel file' option in Material consumption program. Current logic is Uploading Unix file. Can any one give me some idea pls.
    following is my coding
    PROGRAM ZMDM0081 MESSAGE-ID ZM.
    TABLES: MARA.
    * Resource file record structure
    DATA: BEGIN OF RECORD,
            MATERIAL_NUMBER(10),
            PLANT(5),
            CORRECTED_VALUE_19(11),
            CORRECTED_VALUE_18(11),
            CORRECTED_VALUE_17(11),
            CORRECTED_VALUE_16(11),
            CORRECTED_VALUE_15(11),
            CORRECTED_VALUE_14(11),
            CORRECTED_VALUE_13(11),
            CORRECTED_VALUE_12(11),
            CORRECTED_VALUE_11(11),
            CORRECTED_VALUE_10(11),
            CORRECTED_VALUE_09(11),
            CORRECTED_VALUE_08(11),
            CORRECTED_VALUE_07(11),
            CORRECTED_VALUE_06(11),
            CORRECTED_VALUE_05(11),
            CORRECTED_VALUE_04(11),
            CORRECTED_VALUE_03(11),
            CORRECTED_VALUE_02(11),
            CORRECTED_VALUE_01(11),
          END OF RECORD.
    * Working variables
    DATA: RECORD_READ(6)   TYPE P,
          RECORD_INSERT(6) TYPE P,
          RECORD_OMIT(6)   TYPE P,
          MATERIAL_NUMBER  LIKE MARA-MATNR,
          G_BRGEW          LIKE MARA-BRGEW,
          N_NTGEW          LIKE MARA-NTGEW,
          PLANT            LIKE MARC-WERKS,
          REMARKS(50),
          FLAG(1),
          RECORD_FLAG(1),
          INTENSIFIED_FLAG(1),
          NUMBER(6)        TYPE P.
    * Constant variables
    CONSTANTS: VALID   VALUE '1',
               INVALID VALUE '0',
               ON      VALUE '1',
               OFF     VALUE '0'.
    * Reporting groups
    FIELD-GROUPS HEADER.
    * Insert into groups
    INSERT MATERIAL_NUMBER
           PLANT
           REMARKS
           INTO HEADER.
    * BDC parameters
    SELECTION-SCREEN BEGIN OF BLOCK ONE WITH FRAME TITLE TEXT-010.
    PARAMETERS: FILE(30) TYPE C
                          DEFAULT '/export/remote/data.txt'
                          LOWER CASE
                          OBLIGATORY,
                 SESSION  LIKE RL04I-MAPPE
                          OBLIGATORY
                          DEFAULT '8301_MM02',
                          UNAME LIKE SY-UNAME DEFAULT SY-UNAME.
    SELECTION-SCREEN END OF BLOCK ONE.
    * Data conversion parameters
    SELECTION-SCREEN BEGIN OF BLOCK TWO WITH FRAME TITLE TEXT-020.
    PARAMETERS MONTH(2) TYPE N DEFAULT 1.
    SELECTION-SCREEN END OF BLOCK TWO.
    * Notes to user
    SELECTION-SCREEN BEGIN OF BLOCK THREE WITH FRAME TITLE TEXT-030.
    SELECTION-SCREEN COMMENT /5(70) TEXT-040.
    SELECTION-SCREEN COMMENT /5(70) TEXT-050.
    SELECTION-SCREEN END OF BLOCK THREE.
    MOVE UNAME TO SY-UNAME.
    * Including SAP R/3 BDC customized include
    INCLUDE ZSIN0001.
    * Verifying the path & file name
    AT SELECTION-SCREEN ON FILE.
      PERFORM RESOURCE_FILE_OPEN.
    * Processing BDC
    START-OF-SELECTION.
      PERFORM SESSION_OPEN.
      PERFORM SESSION_GENERATION.
      PERFORM SESSION_CLOSE.
      CLOSE DATASET FILE.
    * Printing execution report
    END-OF-SELECTION.
      SKIP.
      WRITE  /15 'BDC & SYSTEM PARAMETERS -' COLOR 3.
      SKIP.
      WRITE: /15 'Resource path & filename ..........', FILE,
             /15 'Session name ......................', SESSION,
             /15 'ABAP/4 Program name ...............', SY-REPID,
             /15 'Client ............................', SY-MANDT,
             /15 'SAP System ID .....................', SY-SYSID,
             /15 'SAP Release .......................', SY-SAPRL,
             /15 'Host ..............................', SY-HOST,
             /15 'Operating system ..................', SY-OPSYS,
             /15 'Database system ...................', SY-DBSYS,
             /15 'User ID ...........................', SY-UNAME,
             /15 'Date ..............................', SY-DATUM,
             /15 'Time ..............................', SY-UZEIT.
      SKIP 3.
      WRITE  /15 'DATA CONVERSION DEFAULT PARAMETERS -' COLOR 3.
      SKIP.
      WRITE: /15 'Start at previous month ............', MONTH.
      SKIP 3.
      WRITE  /15 'EXECUTION REPORT -' COLOR 3.
      SKIP.
      WRITE: /15 'Total records read form file ......', RECORD_READ,
             /15 'Total records insert to BDC .......', RECORD_INSERT,
             /15 'Total records omitted .............', RECORD_OMIT.
      NEW-PAGE.
      SORT.
      LOOP.
        ADD 1 TO NUMBER.
        IF INTENSIFIED_FLAG EQ ON.
          FORMAT COLOR 2 INTENSIFIED ON.
          MOVE OFF TO INTENSIFIED_FLAG.
        ELSE.
          FORMAT COLOR 2 INTENSIFIED OFF.
          MOVE ON TO INTENSIFIED_FLAG.
        ENDIF.
        WRITE: /1 NUMBER, MATERIAL_NUMBER, PLANT, REMARKS.
        POSITION SY-LINSZ.
        WRITE ' '.
      ENDLOOP.
    * Reading resource file and generating BDC session
    FORM SESSION_GENERATION.
      DO.
        READ DATASET FILE INTO RECORD.
        IF SY-SUBRC NE 0 OR RECORD IS INITIAL.
          EXIT.
        ENDIF.
        ADD 1 TO RECORD_READ.
        PERFORM RECORD_CONDENSATION.
        PERFORM RECORD_VERIFICATION.
        CHECK RECORD_FLAG EQ VALID.
        REFRESH BDCDATA.
        PERFORM SCREEN_SEQUENCE.
        PERFORM BDC_TRANSACTION USING 'MM02'.
        IF SY-SUBRC EQ 0 .
          ADD 1 TO RECORD_INSERT.
        ELSE.
          ADD 1 TO RECORD_OMIT.
        ENDIF.
      ENDDO.
    ENDFORM.                    "SESSION_GENERATION
    * Condensing the record fields
    FORM RECORD_CONDENSATION.
      CONDENSE: RECORD-MATERIAL_NUMBER,
                RECORD-PLANT,
                RECORD-CORRECTED_VALUE_19,
                RECORD-CORRECTED_VALUE_18,
                RECORD-CORRECTED_VALUE_17,
                RECORD-CORRECTED_VALUE_16,
                RECORD-CORRECTED_VALUE_15,
                RECORD-CORRECTED_VALUE_14,
                RECORD-CORRECTED_VALUE_13,
                RECORD-CORRECTED_VALUE_12,
                RECORD-CORRECTED_VALUE_11,
                RECORD-CORRECTED_VALUE_10,
                RECORD-CORRECTED_VALUE_09,
                RECORD-CORRECTED_VALUE_08,
                RECORD-CORRECTED_VALUE_07,
                RECORD-CORRECTED_VALUE_06,
                RECORD-CORRECTED_VALUE_05,
                RECORD-CORRECTED_VALUE_04,
                RECORD-CORRECTED_VALUE_03,
                RECORD-CORRECTED_VALUE_02,
                RECORD-CORRECTED_VALUE_01.
    ENDFORM.                    "RECORD_CONDENSATION
    * Verifying record fields
    FORM RECORD_VERIFICATION.
      MOVE VALID TO RECORD_FLAG.
      UNPACK RECORD-MATERIAL_NUMBER TO MATERIAL_NUMBER.
      SELECT SINGLE * FROM MARA
                          WHERE MATNR EQ MATERIAL_NUMBER.
      IF SY-SUBRC NE 0.
        ADD 1 TO RECORD_OMIT.
        MOVE: RECORD-PLANT TO PLANT,
              TEXT-060     TO REMARKS,
              INVALID      TO RECORD_FLAG.
        EXTRACT HEADER.
        EXIT.
      ELSE.
        IF MARA-NTGEW > MARA-BRGEW.     "add to check for net weight > grow
          MOVE '1' TO FLAG.
        ELSE.
          MOVE ' ' TO FLAG.
        ENDIF.
      ENDIF.
      MOVE RECORD-PLANT TO PLANT.
      SELECT SINGLE MATNR WERKS INTO  (PLANT, MATERIAL_NUMBER)
                                FROM  ('MARC')
                                WHERE MATNR EQ MATERIAL_NUMBER
                                AND   WERKS EQ PLANT.
      IF SY-SUBRC NE 0.
        ADD 1 TO RECORD_OMIT.
        MOVE: TEXT-070 TO REMARKS,
              INVALID  TO RECORD_FLAG.
        EXTRACT HEADER.
      ENDIF.
    ENDFORM.                    "RECORD_VERIFICATION
    * Performing the screen sequence
    FORM SCREEN_SEQUENCE.
      PERFORM SCREEN_SAPLMGMM_0060.
      PERFORM SCREEN_SAPLMGMM_0070.
      PERFORM SCREEN_SAPLMGMM_3005.
      PERFORM SCREEN_SAPLMGMM_0081.
      PERFORM SCREEN_SAPLMGMM_3006.
      PERFORM SCREEN_SAPLMGMM_3110.
    ENDFORM.                    "SCREEN_SEQUENCE
    * Change Material: Initial Screen
    FORM SCREEN_SAPLMGMM_0060.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM'   '0060'.
      PERFORM BDC_FIELD  USING 'RMMG1-MATNR' RECORD-MATERIAL_NUMBER.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE'  '/5'. " Select view(s)
    ENDFORM.                    "SCREEN_SAPLMGMM_0060
    * Select view(s)
    FORM SCREEN_SAPLMGMM_0070.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM'            '0070'.
      PERFORM BDC_FIELD  USING 'MSICHTAUSW-KZSEL(01)' 'X'.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE'           '/0'. " Enter
    ENDFORM.                    "SCREEN_SAPLMGMM_0070
    * Change Material: Basic data
    FORM SCREEN_SAPLMGMM_3005.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM'   '3005'.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE' 'SP08'.             " MRP 1
      IF FLAG EQ '1'.
        PERFORM BDC_DYNPRO USING 'SAPLMGMM'   '3005'.
        PERFORM BDC_FIELD  USING 'BDC_OKCODE'           '/0'.
      ENDIF.
    ENDFORM.                    "SCREEN_SAPLMGMM_3005
    * Organizational levels
    FORM SCREEN_SAPLMGMM_0081.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM'    '0081'.
      PERFORM BDC_FIELD  USING 'RMMG1-WERKS' RECORD-PLANT.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE'  '=ENTR'.  "Continue
    ENDFORM.                    "SCREEN_SAPLMGMM_0081
    * Change Material: MRP 1
    FORM SCREEN_SAPLMGMM_3006.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM'   '3006'.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE' 'ZU11'. " Consumption
    ENDFORM.                    "SCREEN_SAPLMGMM_3006
    * Change Material: Consumption
    FORM SCREEN_SAPLMGMM_3110.
      CONSTANTS: PREVIOUS_MONTH VALUE 'X',
                 THIS_MONTH     VALUE ' '.
      DATA: ROW_POSITION(2)      TYPE N VALUE 0,
            WS_POSITION(2)       TYPE C,
            FIELDNAME            LIKE BDCDATA-FNAM,
            CONSUMPTION_QUANTITY LIKE RECORD-CORRECTED_VALUE_01.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3110'.
    *  if month eq previous_month.
    *    move 1 to row_position.
    *  elseif month eq this_month.
    *    move 0 to row_position.
    *  endif.
      MOVE MONTH TO ROW_POSITION.
      DO 19 TIMES VARYING CONSUMPTION_QUANTITY
                  FROM RECORD-CORRECTED_VALUE_01
                  NEXT RECORD-CORRECTED_VALUE_02.
        IF ROW_POSITION GT 11.
          MOVE 1 TO ROW_POSITION.
          PERFORM BDC_FIELD  USING 'BDC_OKCODE' 'VWNP'. " Page down
          PERFORM BDC_DYNPRO USING 'SAPLMGMM'   '3110'.
        ENDIF.
        UNPACK ROW_POSITION TO WS_POSITION.
        CONCATENATE 'RM03M-VBWRT(' WS_POSITION ')' INTO FIELDNAME.
        IF CONSUMPTION_QUANTITY+0(1) EQ '-'.
          SHIFT CONSUMPTION_QUANTITY LEFT BY 1 PLACES.
          CONCATENATE CONSUMPTION_QUANTITY '-' INTO CONSUMPTION_QUANTITY.
        ENDIF.
        PERFORM BDC_FIELD USING FIELDNAME CONSUMPTION_QUANTITY.
        ADD 1 TO ROW_POSITION.
      ENDDO.
      PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3110'.
      PERFORM BDC_FIELD  USING 'BDC_OKCODE' '/11'. " Save
    ENDFORM.                    "SCREEN_SAPLMGMM_3110
    Include Program
    * BDC data table and record structure defination
    DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    * Opening a resource file
    FORM RESOURCE_FILE_OPEN.
      DATA ERROR_MESSAGE(40).
    *Begin of changes Mod01
    *  OPEN DATASET FILE FOR INPUT IN TEXT MODE MESSAGE ERROR_MESSAGE.
      OPEN DATASET FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT MESSAGE
                                                          ERROR_MESSAGE.
    *End of changes Mod01
      IF SY-SUBRC NE 0.
        MESSAGE E000 WITH FILE ERROR_MESSAGE.
      ENDIF.
    ENDFORM.
    * Opening of BDC session
    FORM SESSION_OPEN.
      CALL FUNCTION 'BDC_OPEN_GROUP'
           EXPORTING  CLIENT              = SY-MANDT
                      DEST                = SY-HOST
                      GROUP               = SESSION
                      USER                = SY-UNAME
                      KEEP                = 'X'
           EXCEPTIONS CLIENT_INVALID      = 01
                      DESTINATION_INVALID = 02
                      GROUP_INVALID       = 03
                      HOLDDATE_INVALID    = 04
                      INTERNAL_ERROR      = 05
                      QUEUE_ERROR         = 06
                      RUNNING             = 07
                      USER_INVALID        = 08.
      CASE SY-SUBRC.
        WHEN 01. MESSAGE E001 WITH SY-MANDT.
        WHEN 02. MESSAGE E002.
        WHEN 03. MESSAGE E003.
        WHEN 04. MESSAGE E004.
        WHEN 05. MESSAGE E005.
        WHEN 06. MESSAGE E006.
        WHEN 07. MESSAGE E007.
        WHEN 08. MESSAGE E007.
      ENDCASE.
    ENDFORM.
    * Closing BDC session
    FORM SESSION_CLOSE.
      CALL FUNCTION 'BDC_CLOSE_GROUP'
        EXCEPTIONS NOT_OPEN    = 01
                   QUEUE_ERROR = 02.
      CASE SY-SUBRC.
        WHEN 01. MESSAGE E009.
        WHEN 02. MESSAGE E010.
      ENDCASE.
    ENDFORM.
    * Inserting data into BDC
    FORM BDC_TRANSACTION USING TRANSACTION_CODE.
      CALL FUNCTION 'BDC_INSERT'
           EXPORTING  TCODE          = TRANSACTION_CODE
           TABLES     DYNPROTAB      = BDCDATA
           EXCEPTIONS INTERNAL_ERROR = 1
                      NOT_OPEN       = 2
                      QUEUE_ERROR    = 3
                      TCODE_INVALID  = 4
                      OTHERS         = 5.
    ENDFORM.
    * Insert program name & screen number
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      MOVE: PROGRAM TO BDCDATA-PROGRAM,
            DYNPRO  TO BDCDATA-DYNPRO,
            'X'     TO BDCDATA-DYNBEGIN.
      APPEND BDCDATA.
    ENDFORM.
    * Inserting field name/BDC_OKCODE/BDC_CUESOR and value
    FORM BDC_FIELD USING FNAM FVAL.
      CLEAR BDCDATA.
      MOVE: FNAM TO BDCDATA-FNAM,
            FVAL TO BDCDATA-FVAL.
      APPEND BDCDATA.
    ENDFORM.

    i have changed the selection screen as follows
    SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text-010.
    *                                                          "1)
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS p_unix RADIOBUTTON GROUP rad1 .                 "
    SELECTION-SCREEN COMMENT 5(26) text-008.
    SELECTION-SCREEN POSITION 33.                              "
    PARAMETERS: file(128) TYPE c
                          DEFAULT '/export/remote/data.txt' LOWER CASE.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS p_xls RADIOBUTTON GROUP rad1 .                 "excel file
    SELECTION-SCREEN COMMENT 5(26) text-009.
    SELECTION-SCREEN POSITION 33.                              "
    PARAMETERS: filf(128).
    SELECTION-SCREEN END OF LINE.
    *>>
    *PARAMETERS: file(128) TYPE c
    *                      DEFAULT '/export/remote/data.txt' LOWER CASE OBLIGATORY,
    PARAMETERS:  session  LIKE rl04i-mappe OBLIGATORY
                          DEFAULT '8301_MM02',
                 uname LIKE sy-uname DEFAULT sy-uname.
    SELECTION-SCREEN END OF BLOCK one.
    * Data conversion parameters
    SELECTION-SCREEN BEGIN OF BLOCK two WITH FRAME TITLE text-020.
    PARAMETERS month(2) TYPE n DEFAULT 1.
    SELECTION-SCREEN END OF BLOCK two.
    * Notes to user
    SELECTION-SCREEN BEGIN OF BLOCK three WITH FRAME TITLE text-030.
    SELECTION-SCREEN COMMENT /5(70) text-040.
    SELECTION-SCREEN COMMENT /5(70) text-050.
    SELECTION-SCREEN END OF BLOCK three.

  • Add Multiple records to G/L account group.

    Dear ABAP Experts,
    i have requirement that is using  BDC recording file  the Functional People wants to add records to the G/L Account group. The FI consultant gave the recording file, based on the recording file i developed a BDC program. This BDC program will work for single record. After creating single record system will ask for transport request .
    REPORT  ZDP_ACC_GRP.
    TYPES: BEGIN OF TY_TAB,
            KTOPL TYPE KTOPL,
            KTOKS TYPE KTOKS,
            TXT30 TYPE TXT30,
            VONNR TYPE VONNR,
            BISNR TYPE BISNR,
           TRKORR TYPE TRKORR,
       END OF TY_TAB.
    data: lt_tab type table of ty_tab,
           wa_tab type ty_tab.
    data: begin of record,
    * data element: KTOPL
             KTOPL_01_001(004),
    * data element: KTOKS
             KTOKS_01_002(004),
    * data element: TXT30_077T
             TXT30_01_003(030),
    * data element: VONNR_077S
             VONNR_01_004(010),
    * data element: BISNR_077S
             BISNR_01_005(010),
    * data element: TRKORR
             TRKORR_006(020),
           end of record.
    *       Batchinputdata of single transaction
    DATA:   BDCDATA type table of BDCDATA  WITH HEADER LINE.
    *       messages of call transaction
    DATA:   MESSTAB type table of BDCMSGCOLL  WITH HEADER LINE.
    *       error session opened (' ' or 'X')
    DATA:   E_GROUP_OPENED.
    *       message texts
    TABLES: T100.
    data:lv_file type string.
    parameters: p_fname type IBIPPARMS-PATH.
    at selection-screen on value-request for p_fname.
    CALL FUNCTION 'F4_FILENAME'
      EXPORTING
        PROGRAM_NAME        = SYST-CPROG
        DYNPRO_NUMBER       = SYST-DYNNR
        FIELD_NAME          = 'P_FNAME'
      IMPORTING
        FILE_NAME           = p_fname .
    start-of-selection.
    lv_file = p_fname.
    CALL FUNCTION 'GUI_UPLOAD'
       EXPORTING
         FILENAME                      = LV_FILE
    *   FILETYPE                      = 'ASC'
        HAS_FIELD_SEPARATOR           = 'X'
       TABLES
         DATA_TAB                      = LT_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
        OTHERS                        = 17  .
    LOop at  lt_tab into wa_tab.
    perform bdc_dynpro      using 'SAPL0F09' '0020'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'V_T077S-TXT30(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=NEWL'.
    perform bdc_dynpro      using 'SAPL0F09' '0020'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'V_T077S-BISNR(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=SAVE'.
    perform bdc_field       using 'V_T077S-KTOPL(01)'
                                   WA_TAB-KTOPL."record-KTOPL_01_001.
    perform bdc_field       using 'V_T077S-KTOKS(01)'
                                   WA_TAB-KTOKS."record-KTOKS_01_002.
    perform bdc_field       using 'V_T077S-TXT30(01)'
                                   WA_TAB-TXT30."record-TXT30_01_003.
    perform bdc_field       using 'V_T077S-VONNR(01)'
                                   WA_TAB-VONNR."record-VONNR_01_004.
    perform bdc_field       using 'V_T077S-BISNR(01)'
                                   WA_TAB-BISNR."record-BISNR_01_005.
    perform bdc_dynpro      using 'SAPLSTRD' '0300'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'KO008-TRKORR'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=LOCK'.
    perform bdc_field       using 'KO008-TRKORR'
                                   WA_TAB-TRKORR."record-TRKORR_006.
    perform bdc_dynpro      using 'SAPL0F09' '0020'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'V_T077S-KTOPL(02)'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=BACK'.
    perform bdc_dynpro      using 'SAPL0F09' '0020'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'V_T077S-KTOPL(02)'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=BACK'.
    perform bdc_transaction using 'OBD4'.
    ENDLOOP.
    FORM BDC_TRANSACTION USING TCODE.
       DATA: L_MSTRING(480).
       DATA: L_SUBRC LIKE SY-SUBRC.
    * batch input session
    * call transaction using
         REFRESH MESSTAB.
         CALL TRANSACTION 'OBD4' USING BDCDATA
                          MODE  'A'" CTUMODE
                          UPDATE 'S'"CUPDATE
                          MESSAGES INTO MESSTAB.
         L_SUBRC = SY-SUBRC.
           LOOP AT MESSTAB.
             SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
                                       AND   ARBGB = MESSTAB-MSGID
                                       AND   MSGNR = MESSTAB-MSGNR.
             IF SY-SUBRC = 0.
               L_MSTRING = T100-TEXT.
               IF L_MSTRING CS '&1'.
                 REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                 REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                 REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                 REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
               ELSE.
                 REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                 REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                 REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                 REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
               ENDIF.
               CONDENSE L_MSTRING.
               WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
             ELSE.
               WRITE: / MESSTAB.
             ENDIF.
           ENDLOOP.
       REFRESH BDCDATA.
    ENDFORM.
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
       CLEAR BDCDATA.
       BDCDATA-PROGRAM  = PROGRAM.
       BDCDATA-DYNPRO   = DYNPRO.
       BDCDATA-DYNBEGIN = 'X'.
       APPEND BDCDATA.
    ENDFORM.
    FORM BDC_FIELD USING FNAM FVAL.
         CLEAR BDCDATA.
         BDCDATA-FNAM = FNAM.
         BDCDATA-FVAL = FVAL.
         APPEND BDCDATA.
    ENDFORM.
    But the FI consultant wants to add multiple records to 'G/L account group'.After adding records before saving the system need to ask transport request at the last.
    How can I write code ...??
    Please help me.

    Hi Srikanth,
    Thanks for reply,
    You  are right we need to load hierarchy for G/L then we can see all the G/L's for all G/L groups.
    I have one more question when I check in RSA3 for the G/L account numbers, I could not find them.
    I am using the datasource fi_gl_4 and in rsa3 I can see 1000 records data and when I put filter on G/L account and search for the G/L number I needed I cant see it, but it is there in the functional transaction(f.01)?
    How to check for the required G/L's in rsa3 ?
    Thx

  • Get and Set Parameter ID in BDC Call transaction

    Hi all
    I have written this BDC program to run a transaction eg33  to install meter. After meter get installled System generates  Device location number. I need to use this device location number in calling another transaction il03.  but my data fetching using get and set parameter id is not giving accurate result. Kindly check my code and suggest where should I improve. Or whatelse can I do to fullfill this type of requirement other than GET and SET PARAMETER ID.
    REPORT  ZAC_EG33 NO STANDARD PAGE HEADING
                     LINE-SIZE 100.
    TABLES: EABL,
            BUT000,
            ZISUH0003.
    DATA :
          XYZ LIKE IFLO-TPLNR.
    DATA: IT_STATUS TYPE ZISUH0003.
    DATA: G_INDEX TYPE I,
          G_START_COL TYPE I VALUE '1',      "start column
          G_START_ROW TYPE I VALUE '14',      "start row
          G_END_COL   TYPE I VALUE '18',     "maximum column
          G_END_ROW   TYPE I VALUE '75',  "maximum row
          G_TEXT(20),                         "stores error messages
          G_PAGES        TYPE I,
          G_CURRENT_PAGE TYPE I,
          G_COUNT LIKE SY-DBCNT.
    data: l_file   type file_table,
          file1    type string,
          l_title  type string,
          LENGTH   TYPE I,
          FILES    type filetable,
          SUBRC    type i,
          STR_FILE type STRING,
          D_FILE   type RLGRAP-FILENAME,
          filename TYPE String,
          L_itab_date(10).
    FIELD-SYMBOLS : <FS>.
    DATA: IT_EXCEL LIKE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE,
          IT_MESS TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE.
    TYPES: BEGIN OF TY_OPEN,
            HAUS LIKE REG30-HAUS,
            EADAT(10),
            GERAETNEU LIKE REG30-GERAETNEU,
            MESSDRCK LIKE REG30-MESSDRCK,
            ZWSTANDCE LIKE REG30-ZWSTANDCE,
            END OF TY_OPEN.
    DATA : T_ANLAGE LIKE EANLD-ANLAGE,
           VSTELLE LIKE EVBS-VSTELLE,
           S_ANLAGE LIKE EANLD-ANLAGE,
           temp_c(7).
    DATA: IT_OPEN TYPE STANDARD TABLE OF TY_OPEN WITH HEADER LINE.
    DATA: BDCDATA TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE.
    SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
    SELECTION-SCREEN SKIP 2.
    PARAMETERS: P_FILE like RLGRAP-FILENAME OBLIGATORY.
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN END OF BLOCK 1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE  .
      PERFORM GET_FILE_NAME.
      MOVE FILENAME TO P_FILE.
    START-OF-SELECTION.
    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        FILENAME                      = p_file
        I_BEGIN_COL                   = 1  "VF_START_COL
        I_BEGIN_ROW                   = 2  "VF_START_ROW
        I_END_COL                     = 5  "VF_END_COL
        I_END_ROW                     = 10000  "VF_END_ROW
      TABLES
        INTERN                        = IT_EXCEL
      EXCEPTIONS
        INCONSISTENT_PARAMETERS       = 1
        UPLOAD_OLE                    = 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.
    IF IT_EXCEL[] IS INITIAL.
      G_TEXT = 'No Data Uploaded'.
    ELSE.
      SORT IT_EXCEL BY ROW COL.
      LOOP AT IT_EXCEL.
        MOVE : IT_EXCEL-COL TO G_INDEX.
        ASSIGN COMPONENT G_INDEX OF STRUCTURE IT_OPEN TO <FS>.
        MOVE IT_EXCEL-VALUE TO <FS>.
        AT END OF ROW.
          IF NOT IT_OPEN IS INITIAL.
          APPEND IT_OPEN." TO IT_LINE.
          CLEAR IT_OPEN.
          CLEAR IT_EXCEL.
          ENDIF.
        ENDAT.
      ENDLOOP.
    ENDIF.
    REFRESH IT_EXCEL.
    ULINE.
    FORMAT COLOR 3 ON.
    WRITE: /1 sy-vline ,
           2 'Material No.' ,
           25 sy-vline,
            2 'Logs' ,
            100 sy-vline.
    uline.
    FORMAT COLOR OFF.
    PERFORM BDC_OPEN_READING.
    MESSAGE S013(ZPS).
    *&      Form  GET_FILE_NAME
          text
    -->  p1        text
    <--  p2        text
    FORM GET_FILE_NAME .
    REFRESH FILES.
    call method cl_gui_frontend_services=>file_open_dialog
                exporting
                  window_title            = l_title
                changing
                  file_table              = files
                  rc                      = subrc
                exceptions
                  file_open_dialog_failed = 1
                  cntl_error              = 2
                  error_no_gui            = 3
                  others                  = 4.
              check sy-subrc = 0.
              loop at files into l_file.
                str_file = l_file.
                move str_file to filename.
                exit.
              endloop.
    ENDFORM.                    " GET_FILE_NAME
    *&      Form  BDC_OPEN_READING
          text
    -->  p1        text
    <--  p2        text
    FORM BDC_OPEN_READING .
    LOOP AT IT_OPEN.
    REFRESH BDCDATA.
    clear : temp_c.
    move it_open-MESSDRCK to temp_c.
    condense : temp_c.
    PERFORM MAP1.
    CALL TRANSACTION 'EG33' USING BDCDATA MODE 'A' MESSAGES INTO IT_MESS.
    +***changes by added on 28/02/08 +
    get parameter id 'IFL' FIELD XYZ.
    PERFORM MAP2.
    set parameter id 'IFL' FIELD XYZ.
    ++*
    CALL TRANSACTION 'IL03' USING BDCDATA MODE 'A' MESSAGES INTO IT_MESS.
    +****end change added on 28.02.08+DATA: G_INSNO LIKE IT_OPEN-HAUS.
    IF NOT IT_MESS[] IS INITIAL.
      G_INSNO = IT_OPEN-HAUS.
      PERFORM GET_MESSAGES  TABLES IT_MESS USING G_INSNO." IT_LINE.
    ENDIF.
    READ TABLE IT_MESS WITH KEY MSGTYP = 'E'.
    IF SY-SUBRC NE 0.
    READ TABLE IT_MESS WITH KEY MSGTYP = 'S'  MSGNR = '622'.
    IF SY-SUBRC EQ 0.
    SELECT SINGLE VSTELLE FROM EVBS INTO VSTELLE WHERE HAUS = IT_OPEN-HAUS.
    SELECT SINGLE ANLAGE FROM EANL INTO T_ANLAGE WHERE VSTELLE = VSTELLE.
    MOVE T_ANLAGE TO IT_STATUS-ANLAGE.
    MOVE 'X' TO IT_STATUS-RFC.
    *perform get_date_format using IT_OPEN-EADAT.
    MOVE IT_OPEN-EADAT TO IT_STATUS-ADATE.
    SELECT SINGLE ANLAGE FROM ZISUH0003 INTO  S_ANLAGE WHERE ANLAGE =
    T_ANLAGE.
      IF SY-SUBRC EQ 4.
        INSERT ZISUH0003 FROM IT_STATUS.
      ELSE.
        UPDATE ZISUH0003 FROM IT_STATUS.
      ENDIF.
      ENDIF.
      ENDIF.
      REFRESH IT_MESS.
      CLEAR   IT_MESS.
    ENDLOOP.
    ENDFORM.                    " BDC_OPEN_READING
           Start new screen                                              *
    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 <> SPACE.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
      ENDIF.
    ENDFORM.
    *&      Form  MAP1
          text
    -->  p1        text
    <--  p2        text
    FORM MAP1 .
    perform bdc_dynpro      using 'SAPLE30D' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'REG30-GERAETNEU'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'REG30-HAUS'
                                  IT_OPEN-HAUS.  "'100000000033'.
    perform bdc_field       using 'REG30-EADAT'
                                  IT_OPEN-EADAT.  "'18.02.2006'.
    perform bdc_field       using 'REG30-GERAETNEU'
                                  IT_OPEN-GERAETNEU.  "'66a'.
    perform bdc_dynpro      using 'SAPLE30D' '0220'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'REG30-TEMP_AREA(02)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SAVE'.
    perform bdc_field       using 'REG30-MESSDRCK'
                                   temp_c. "IT_OPEN-MESSDRCK'0.0125'.
    perform bdc_field       using 'REG30-GERWECHS'
                                  '05'.
    perform bdc_field       using 'REG30-ANZDAYSOFPERIOD(01)'
                                  '30'.
    perform bdc_field       using 'REG30-ZWSTANDCE(01)'
                                  IT_OPEN-ZWSTANDCE.  "'10'.
    perform bdc_field       using 'REG30-ZWSTANDCE(02)'
                                  '0'.
    perform bdc_field       using 'REG30-PERVERBR(01)'
                                  '0'.
    perform bdc_field       using 'REG30-PERVERBR(02)'
                                  '0'.
    perform bdc_field       using 'REG30-TEMP_AREA(01)'
                                  '0001'.
    perform bdc_field       using 'REG30-TEMP_AREA(02)'
                                  '0001'.
    perform bdc_field       using 'REG30-PR_AREA_AI(01)'
                                  '0001'.
    perform bdc_field       using 'REG30-PR_AREA_AI(02)'
                                  '0001'.
    ENDFORM.                    " MAP1
    ****CHANGEs added BY ALKA 28.02.08
    *&      Form  MAP2
          text
    -->  p1        text
    <--  p2        text
    FORM MAP2 .
    perform bdc_dynpro      using 'SAPMILO0' '1110'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'IFLO-TPLNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'IFLO-TPLNR'
                                  XYZ..
    perform bdc_field       using 'RILO0-TPLKZ'
                                  'AO_GP'.
    perform bdc_dynpro      using 'SAPMILO0' '2100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'IFLO-PLTXT'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=T\04'.
    perform bdc_field       using 'IFLO-PLTXT'
                                  'DEVICE LOCATION'.
    perform bdc_dynpro      using 'SAPMILO0' '2100'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BU'.
    perform bdc_field       using 'IFLO-PLTXT'
                                  'DEVICE LOCATION'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'ITOBATTR-EINZL'.
    perform bdc_field       using 'ITOBATTR-IEQUI'
                                  'X'.
    perform bdc_field       using 'ITOBATTR-EINZL'
                                  'X'.
    ENDFORM.                    " MAP2
    *****END CHANGE added on 28.02.08
    *&      Form  get_date_format
          text
         -->P_IT_ORDER_TABLE_C_DATE  text
    FORM get_date_format USING L_ITAB_DATE." LIKE SY-DATUM.
    data: d_temp(4),
          m_temp(2),
          y_temp(4).
    *move L_ITAB_DATE to L_ITAB_DATE.
    y_temp = L_ITAB_DATE(4).
    m_temp = L_ITAB_DATE+4(2).
    d_temp = L_ITAB_DATE+6(2).
    CONCATENATE d_temp '.' m_temp '.' y_temp into L_ITAB_DATE.
    ENDFORM.                    " get_date_format
    *&      Form  GET_MESSAGES
          text
         -->P_IT_MESS  text
         -->P_G_INSNO  text
    FORM GET_MESSAGES  TABLES IT_MESS STRUCTURE BDCMSGCOLL USING G_INSNO .TABLES T100.
    DATA: L_MSTRING(255).
    LOOP AT IT_MESS WHERE MSGTYP = 'E'   OR MSGTYP = 'S'.
          SELECT SINGLE * FROM T100 WHERE SPRSL = IT_MESS-MSGSPRA
                                    AND   ARBGB = IT_MESS-MSGID
                                    AND   MSGNR = IT_MESS-MSGNR.
          IF SY-SUBRC = 0.
            L_MSTRING = T100-TEXT.
            IF L_MSTRING CS '&1'.
              REPLACE '&1' WITH IT_MESS-MSGV1 INTO L_MSTRING.
              REPLACE '&2' WITH IT_MESS-MSGV2 INTO L_MSTRING.
              REPLACE '&3' WITH IT_MESS-MSGV3 INTO L_MSTRING.
              REPLACE '&4' WITH IT_MESS-MSGV4 INTO L_MSTRING.
            ELSE.
              REPLACE '&' WITH IT_MESS-MSGV1 INTO L_MSTRING.
              REPLACE '&' WITH IT_MESS-MSGV2 INTO L_MSTRING.
              REPLACE '&' WITH IT_MESS-MSGV3 INTO L_MSTRING.
              REPLACE '&' WITH IT_MESS-MSGV4 INTO L_MSTRING.
            ENDIF.
            CONDENSE L_MSTRING.
          ENDIF.
          CONDENSE G_INSNO.
          CONCATENATE 'For' ' ' G_INSNO ',' L_MSTRING INTO L_MSTRING SEPARATED BY SPACE.
    FORMAT COLOR 2 ON.
    *IF IT_MESS-MSGTYP = 'S' AND IT_MESS-MSGNR = '622'.
    *WRITE: 1 sy-vline,
            L_MSTRING    under 'Error Messages',
           100 sy-vline.
    *ULINE.
    *ELSEIF IT_MESS-MSGTYP = 'E'.
    WRITE: 1 sy-vline,
             L_MSTRING    under 'Logs',
            100 sy-vline.
    ULINE.
    *ENDIF.
    ENDLOOP.
    ENDFORM.                    " GET_MESSAGES

    i think there might be some time gap between CALL TRANSACTION and GET PARAMETER ID.....,that is to say,the new No. has not been generated and what you fetch is an old No..
    i think you should use the "CALL TRANSACTION" like the following one:
    CALL TRANSACTION 'EG33' USING BDCDATA MODE 'A'  UPDATE 'L'  MESSAGES INTO IT_MESS .
    then i think you can get the right value.
    P.S: the different update model(from SAP document)
           upd Effect
    "A"   Asynchronous update. Updates of called programs are executed in the same way as if in the             COMMIT WORK statement the AND WAIT addition was not specified.
    "S" Synchronous processing. Updates of the called programs are executed in the same way as if in the COMMIT WORK statement the AND WAIT addition had been specified.
    "L" Local update. Updates of the called program are executed in such a way as if the SET UPDATE TASK LOCAL statement had been executed in it.
    Other As for "A".

  • Data is not uploding for the following code in bdc

    DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
    *       messages of call transaction
    DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
    *       error session opened (' ' or 'X')
    DATA:   e_group_opened.
    *       message texts
    TABLES: t100,
            cosp.
    *** Generated data section with specific formatting - DO NOT CHANGE  ***
    DATA: BEGIN OF record OCCURS 0,
    * data element: KPP_VALUE
            bdc00(032),                              "Cost Center
    * data element:
            bdc01(032),                              "Cost Element
    * data element:
            bdc02(032),                              "January
    * data element:
            bdc03(032),                              "february
    * data element:
            bdc04(032),                              "March
    * data element:
            bdc05(032),                              "April
    * data element:
            bdc06(032),                              "may
    * data element:
            bdc07(032),                              "june
    * data element:
            bdc08(032),                              "july
    * data element:
            bdc09(032),                              "august
    * data element:
            bdc10(032),                              "september
    * data element:
            bdc11(032),                              "october
    * data element:
            bdc12(032),                              "november
    * data element:
            bdc13(032),                              "december
          END OF record.
    *** End generated data section ***
    DATA: g_file TYPE string,                        "Input file var for FM
          g_count(4) TYPE n VALUE 0000,              "Counter
          g_flag(1),                                 "Flag
          g_bdc01(11),
          g_bdc02(11),
          g_bdc03(11),
          g_bdc04(11),
          g_bdc05(11),
          g_bdc06(11),
          g_bdc07(11),
          g_bdc08(11),
          g_bdc09(11),
          g_bdc10(11),
          g_bdc11(11),
          g_bdc12(11),
          g_bdc13(11).
    DATA: g_objnr LIKE cosp-objnr. "Object Number
    DATA: g_record TYPE string,    "work area to read from app server
          g_tab TYPE string.       "tab variable to separate the columns
    *   Selection Screen Variables
    PARAMETERS ctumode LIKE ctu_params-dismode DEFAULT 'A' OBLIGATORY.
    PARAMETERS: user(12) DEFAULT sy-uname OBLIGATORY.     "user for session in batch
    PARAMETERS cupdate LIKE ctu_params-updmode DEFAULT 'L' OBLIGATORY.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
    PARAMETERS: p_file(256) LOWER CASE OBLIGATORY,   "Input file
                p_ver(3) OBLIGATORY,                 "version
                p_gjahr(4) OBLIGATORY,               "Fiscal Year
                p_prof(8) OBLIGATORY,                "Planner Profile
                p_lines(4) OBLIGATORY,               "No. of Lines
                p_kokrs(4) OBLIGATORY.               "Controlling area
    SELECTION-SCREEN END OF BLOCK b1.
    *   Initialization
    INITIALIZATION.
    *Shiva-Change -01/03/2007 Costom Authorization check.
    INITIALIZATION.
      INCLUDE zauthocheck.
    *End.
      CLASS cl_abap_char_utilities DEFINITION LOAD.
      g_tab = cl_abap_char_utilities=>horizontal_tab.
    *  Start of Selection
    START-OF-SELECTION.
    *Set the Controlling area
      PERFORM bdc_dynpro USING 'SAPLSPO4'     '0300'.
      PERFORM bdc_field  USING 'SVALD-VALUE(001)' p_kokrs. "Contr.area
      PERFORM bdc_transaction USING 'OKKS'.
    *Set the planner profile
      PERFORM bdc_dynpro USING 'SAPLKPP6'     '1007'.
      PERFORM bdc_field  USING 'RKPP6-PLPROF' p_prof. "Planner profile
      PERFORM bdc_transaction USING 'KP04'.
    *Number of lines
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = p_lines
        IMPORTING
          output = p_lines.
    *For use in FM g_file should be of type string
       g_file = p_file.
    *Open the app server file
      PERFORM sub_get_data.
    *read all data one by one
    *  DO.
    *    READ DATASET p_file INTO g_record.
    *    IF sy-subrc <> 0.
    *      EXIT.
    *    ENDIF.
    **Split the record at tab
    *    SPLIT g_record AT g_tab INTO
    *     record-bdc00 record-bdc01 record-bdc02
    *     record-bdc03 record-bdc04 record-bdc05
    *     record-bdc06 record-bdc07 record-bdc08
    *     record-bdc09 record-bdc10 record-bdc11
    *     record-bdc12 record-bdc13.
    *    IF sy-subrc = 0.
    *      APPEND record.
    *      CLEAR record.
    *    ENDIF.
    *  ENDDO.
    *For every new cost center, check whether there is already some plan data
    *that is existing. If yes, delete them and replace with new plan data. Else,
    *upload the new data.
      LOOP AT record.
    *Start of every new transaction
        AT NEW bdc00.
          READ TABLE record INDEX sy-tabix.
          CLEAR cosp.
          CONCATENATE 'KS' p_kokrs record-bdc00 INTO g_objnr.
          SELECT SINGLE * FROM cosp WHERE objnr = g_objnr AND
                                          gjahr = p_gjahr AND
                                          wrttp = '01' AND
                                          vrgng = 'RKP1'.
          IF sy-subrc = 0.
            PERFORM bdc_dynpro      USING 'SAPLKPP0' '1000'.
            PERFORM bdc_field       USING 'BDC_CURSOR'
                                          'KPP0B-VALUE(03)'.
            PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=CSUB'.
            PERFORM bdc_field       USING 'KPP0B-VALUE(01)'
                                          p_ver.
            PERFORM bdc_field       USING 'KPP0B-VALUE(02)'
                                          p_gjahr.
            PERFORM bdc_field       USING 'KPP0B-VALUE(03)'
                                          record-bdc00.
            PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
            PERFORM bdc_field       USING 'BDC_CURSOR'
                                          'Z-BDC02(01)'.
            PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=CMAL'.
            PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
            PERFORM bdc_field       USING 'BDC_CURSOR'
                                          'Z-BDC02(01)'.
            PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=CDEL'.
            PERFORM bdc_dynpro      USING 'SAPLSPO1' '0200'.
            PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=YES'.
            PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
            PERFORM bdc_field       USING 'BDC_CURSOR'
                                          'Z-BDC02(01)'.
            PERFORM bdc_field       USING 'BDC_OKCODE'
                                          '=CBUC'.
            PERFORM bdc_transaction USING 'KP06'.
          ENDIF.
    *The line count should be set to 0001 first
          g_count = 0001.
          PERFORM bdc_dynpro      USING 'SAPLKPP0' '1000'.
          PERFORM bdc_field       USING 'BDC_CURSOR'
                                        'KPP0B-VALUE(03)'.
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '=CSUB'.
          PERFORM bdc_field       USING 'KPP1B-ONLY'
                                        'X'.
          PERFORM bdc_field       USING 'KPP0B-VALUE(01)'
                                        p_ver.
          PERFORM bdc_field       USING 'KPP0B-VALUE(02)'
                                        p_gjahr.
          PERFORM bdc_field       USING 'KPP0B-VALUE(03)'
                                        record-bdc00.
        ENDAT.
    *End of every new transaction
    *If the line count increases what was specified in sel screen, reset it to 1
        IF g_count > p_lines.
          g_count = 0001.
          g_flag = 'X'.
        ENDIF.
        CONCATENATE 'Z-BDC01(' g_count+2(2) ')' INTO g_bdc01.
        CONCATENATE 'Z-BDC02(' g_count+2(2) ')' INTO g_bdc02.
        CONCATENATE 'Z-BDC03(' g_count+2(2) ')' INTO g_bdc03.
        CONCATENATE 'Z-BDC04(' g_count+2(2) ')' INTO g_bdc04.
        CONCATENATE 'Z-BDC05(' g_count+2(2) ')' INTO g_bdc05.
        CONCATENATE 'Z-BDC06(' g_count+2(2) ')' INTO g_bdc06.
        CONCATENATE 'Z-BDC07(' g_count+2(2) ')' INTO g_bdc07.
        CONCATENATE 'Z-BDC08(' g_count+2(2) ')' INTO g_bdc08.
        CONCATENATE 'Z-BDC09(' g_count+2(2) ')' INTO g_bdc09.
        CONCATENATE 'Z-BDC10(' g_count+2(2) ')' INTO g_bdc10.
        CONCATENATE 'Z-BDC11(' g_count+2(2) ')' INTO g_bdc11.
        CONCATENATE 'Z-BDC12(' g_count+2(2) ')' INTO g_bdc12.
        CONCATENATE 'Z-BDC13(' g_count+2(2) ')' INTO g_bdc13.
    *Trigger a new page when the limit reaches.
        IF g_flag = 'X'.
          PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
          PERFORM bdc_field       USING 'BDC_CURSOR'
                                        g_bdc01.
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '=CP+'.
          g_flag = space.
        ENDIF.
        PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                        g_bdc01.
        PERFORM bdc_field       USING g_bdc01
                                      record-bdc01.
        PERFORM bdc_field       USING g_bdc02
                                      record-bdc02.
        PERFORM bdc_field       USING g_bdc03
                                      record-bdc03.
        PERFORM bdc_field       USING g_bdc04
                                      record-bdc04.
        PERFORM bdc_field       USING g_bdc05
                                      record-bdc05.
        PERFORM bdc_field       USING g_bdc06
                                      record-bdc06.
        PERFORM bdc_field       USING g_bdc07
                                      record-bdc07.
        PERFORM bdc_field       USING g_bdc08
                                      record-bdc08.
        PERFORM bdc_field       USING g_bdc09
                                      record-bdc09.
        PERFORM bdc_field       USING g_bdc10
                                      record-bdc10.
        PERFORM bdc_field       USING g_bdc11
                                      record-bdc11.
        PERFORM bdc_field       USING g_bdc12
                                      record-bdc12.
        PERFORM bdc_field       USING g_bdc13
                                      record-bdc13.
        g_count = g_count + 1.
    *at end of all records of a transaction
        AT END OF bdc00.
          PERFORM bdc_dynpro      USING 'SAPLKPP2' '0106'.
          PERFORM bdc_field       USING 'BDC_CURSOR'
                                        g_bdc13.
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '=CBUC'.
          SKIP.
          WRITE:/ 'Cost Center:', 15 record-bdc00.
          PERFORM bdc_transaction USING 'KP06'.
        ENDAT.
      ENDLOOP.
    *&      Form  sub_get_data
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM sub_get_data .
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                = g_file
          filetype                = 'ASC'
          has_field_separator     = 'X'
        TABLES
          data_tab                = record
        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.                    " sub_get_data
    *   open dataset                                                       *
    *FORM open_dataset USING p_dataset.
    *  OPEN DATASET p_dataset
    *               FOR INPUT IN TEXT MODE
    *               ENCODING DEFAULT.
    *  IF sy-subrc <> 0.
    *    WRITE: / text-e00, sy-subrc.
    *    STOP.
    *  ENDIF.
    *ENDFORM.                    "OPEN_DATASET
    **   close dataset                                                      *
    *FORM close_dataset USING p_dataset.
    *  CLOSE DATASET p_dataset.
    *ENDFORM.                    "CLOSE_DATASET
    *        Start new transaction according to parameters                 *
    FORM bdc_transaction USING tcode.
      DATA: l_mstring(480).
      DATA: l_subrc LIKE sy-subrc.
    * batch input session
    * call transaction using
      REFRESH messtab.
      CALL TRANSACTION tcode USING bdcdata
                       MODE   ctumode
                       UPDATE cupdate
                       MESSAGES INTO messtab.
      l_subrc = sy-subrc.
      WRITE: / 'CALL_TRANSACTION',
               tcode,
               'returncode:'(i05),
               l_subrc,
               'RECORD:',
               sy-index.
      LOOP AT messtab.
        SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
                                  AND   arbgb = messtab-msgid
                                  AND   msgnr = messtab-msgnr.
        IF sy-subrc = 0.
          l_mstring = t100-text.
          IF l_mstring CS '&1'.
            REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
          ELSE.
            REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
          ENDIF.
          CONDENSE l_mstring.
          WRITE: / messtab-msgtyp, l_mstring(250).
        ELSE.
          WRITE: / messtab.
        ENDIF.
      ENDLOOP.
      SKIP.
      REFRESH bdcdata.
    ENDFORM.                    "BDC_TRANSACTION
    *        Start new screen                                              *
    FORM bdc_dynpro USING program dynpro.
      CLEAR bdcdata.
      bdcdata-program  = program.
      bdcdata-dynpro   = dynpro.
      bdcdata-dynbegin = 'X'.
      APPEND bdcdata.
    ENDFORM.                    "BDC_DYNPRO
    *        Insert field                                                  *
    FORM bdc_field USING fnam fval.
    *  IF fval <> nodata.
      CLEAR bdcdata.
      bdcdata-fnam = fnam.
      bdcdata-fval = fval.
      APPEND bdcdata.
    *  ENDIF.
    from the flat file its reading first record in to the tab strip but not the second record for  the same costcenter

    So your sparse upper level members are dynamically calculated?
    I wonder if that is interacting with the calc order of the attribute dimension and not valuing the way you want.
    The DBAG has lots of good stuff on attributes: http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_dbag/dattrib.htm
    You might want to think about making the upper level members in Function stored/never share and see if you get the result you're looking for. If Function is sparse, I would think long and hard about whether I really want those members to be dynamically calculated because of retrieval performance impact.
    Regards,
    Cameron Lackpour

  • I want in LSMW SAME CODING. THIS IS USING BDC CALL TRANSACTION

    REPORT  ZXX_BDC_PRA NO STANDARD PAGE HEADING LINE-COUNT 20
                                                LINE-SIZE 150 .
    Program Name  :ZXX_BDC_PRA                             *
    Object Id     :                                        *
    Develper Name : praveen                                *
    Start Date    : 25.06.07                               *
    Description   : uploading flat file to sap system      *
    *--structure for Data Uploading.
    DATA: BEGIN OF IT_STR ,
            VKORG LIKE RF02D-VKORG,
            VTWEG LIKE RF02D-VTWEG,
            SPART LIKE RF02D-SPART,
            KTOKD LIKE RF02D-KTOKD,
            NAME1 LIKE KNA1-NAME1,     
            SORTL LIKE  KNA1-SORTL,     
            ORT01 LIKE KNA1-ORT01,     
            PSTLZ     LIKE KNA1-PSTLZ,     
            LAND1 LIKE KNA1-LAND1,     
            SPRAS LIKE KNA1-SPRAS,
            END OF IT_STR.
    *--Internal Table for Data Uploading.
    DATA: ITAB  LIKE IT_STR OCCURS 0.
    *--Internal Table to sucessfull Records.
    DATA:   ITAB1 LIKE IT_STR OCCURS 0.
    *--Internal Table to Store Error Records.
    DATA:    ITAB2 LIKE STANDARD TABLE OF IT_STR WITH HEADER LINE.
    *--Internal Table for Storing the BDC data.
    DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    *--Internal Table for storing the messages.
    DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    DATA:   COUNT TYPE I VALUE 1,
            S VALUE 0, E VALUE 0.
    Selection screen *
    SELECTION-SCREEN BEGIN OF BLOCK b1
                     WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_FILE TYPE IBIPPARMS-PATH.
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
    *functionality to use drill down list
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          PROGRAM_NAME  = SYST-CPROG
          DYNPRO_NUMBER = SYST-DYNNR
        IMPORTING
          FILE_NAME     = P_FILE.
    Start-of-selection *
    START-OF-SELECTION.
      DATA FILENAME TYPE STRING.
      FILENAME = P_FILE.
    *-- Form to upload flatfile data into the internal table.
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          FILENAME                = FILENAME
          FILETYPE                = 'ASC'
          HAS_FIELD_SEPARATOR     = 'X'
        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.
    *--Generating the BDC table for the fields of the internal table.
      LOOP AT ITAB INTO IT_STR.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0107'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'RF02D-KTOKD'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM BDC_FIELD       USING 'RF02D-VKORG'
                                      IT_STR-VKORG.
        PERFORM BDC_FIELD       USING 'RF02D-VTWEG'
                                       IT_STR-VTWEG.
        PERFORM BDC_FIELD       USING 'RF02D-SPART'
                                      IT_STR-SPART.
        PERFORM BDC_FIELD       USING 'RF02D-KTOKD'
                                        IT_STR-KTOKD.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0110'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNA1-SPRAS'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM BDC_FIELD       USING 'KNA1-NAME1'
                                    IT_STR-NAME1.
        PERFORM BDC_FIELD       USING 'KNA1-SORTL'
                                        IT_STR-SORTL.
        PERFORM BDC_FIELD       USING 'KNA1-ORT01'
                                        IT_STR-ORT01.
        PERFORM BDC_FIELD       USING 'KNA1-PSTLZ'
                                      IT_STR-PSTLZ.
        PERFORM BDC_FIELD       USING 'KNA1-LAND1'
                                      IT_STR-LAND1.
        PERFORM BDC_FIELD       USING 'KNA1-SPRAS'
                                        IT_STR-SPRAS.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0120'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNA1-TXJCD'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0125'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNA1-NIELS'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0360'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNVK-NAMEV(01)'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '=ENTR'.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0310'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNVV-BEGRU'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM BDC_DYNPRO      USING 'SAPMF02D' '0324'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                      'KNVP-PARVW(01)'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                      '=ENTR'.
    *--Calling the transaction 'Vd01'.
        CALL TRANSACTION 'VD01' USING BDCDATA MODE 'N' UPDATE 'S'
        MESSAGES INTO MESSTAB.
        PERFORM MESSAGES.
        REFRESH : BDCDATA, MESSTAB.
      ENDLOOP.
    END-OF-SELECTION.
    *--Populating the Success records internal table.
      IF ITAB1[] IS NOT INITIAL.
    format color 5.
        WRITE: /'SUCCESSFUL RECORDS'.
        format color off.
        LOOP AT ITAB1 INTO IT_STR.
          WRITE:/ IT_STR-VKORG,IT_STR-VTWEG,
                  IT_STR-SPART,IT_STR-KTOKD,
                  IT_STR-NAME1,IT_STR-SORTL,     
                  IT_STR-ORT01,
                  IT_STR-PSTLZ,
                  IT_STR-LAND1,      
                  IT_STR-SPRAS.
          S = S + 1.
        ENDLOOP.
    REFRESH : ITAB1.
        WRITE:/ 'TOTAL RECORDS',S.
      ENDIF.
    *--Populating the error records internal table.
      IF ITAB2[] IS NOT INITIAL.
    FORMAT COLOR 3.
        WRITE :/ 'ERRORS RECORDS ARE'.
    FORMAT COLOR OFF.
        LOOP AT ITAB2.
          WRITE:/ ITAB2-VKORG,
                  ITAB2-VTWEG,
                  ITAB2-SPART,ITAB2-KTOKD,
                  ITAB2-NAME1,ITAB2-SORTL,     
                  ITAB2-ORT01,
                  ITAB2-PSTLZ,
                  ITAB2-LAND1,      
                  ITAB2-SPRAS.
            E = E + 1.
        ENDLOOP.
    REFRESH : ITAB2.
        WRITE: / 'TOTAL RECORDS',E.
    REFRESH : ITAB2.
      ENDIF.
    End of Selection *
    END-OF-SELECTION.
    TOP-OF-PAGE *
    TOP-OF-PAGE.
      WRITE:/ SY-ULINE.
      WRITE:/10 'REPORT ID',21 SY-REPID,35 'USERNAME',46 SY-UNAME,
      60 'SYSTEM DATE',70 SY-DATUM,80 'SYSTEM TIME',90 SY-UZEIT,
      100 'PAGE NO',108 SY-PAGNO.
      WRITE:/ SY-ULINE.
    FOrm to Populate the BDC table.
           Start new screen                                              *
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.                    "BDC_DYNPRO
           Insert field                                                  *
    FORM BDC_FIELD USING FNAM FVAL.
      IF FVAL <> SPACE.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
      ENDIF.
    ENDFORM.                    "BDC_FIELD
    *&      Form  messages
    FORM MESSAGES .
      LOOP AT MESSTAB.
        IF MESSTAB-MSGTYP = 'I'.
         WRITE : / MESSTAB-MSGV1.
        ELSEIF
    MESSTAB-MSGTYP = 'S'.
          INSERT LINES OF ITAB FROM COUNT TO COUNT INTO TABLE ITAB1 .
          COUNT = COUNT + 1.
         WRITE : / MESSTAB-MSGV1.
        ELSEIF
        MESSTAB-MSGTYP = 'E'.
          INSERT LINES OF ITAB FROM COUNT TO COUNT INTO TABLE ITAB2.
          COUNT = COUNT + 1.
         WRITE : / MESSTAB-MSGV1.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " messages

    Hi
    Go through the doc and do the same using LSMW
    BDC is the way to transfer data by writing a batch input program which can use either session or call transaction method.
    LSMW used to transfer data without/less code.
    What type of data we transfer using LSMW?
    LSMW is best suited for transferring master data.
    Actually BDC and LSMW are not comparable at all.
    for example LSMW itself can use BDC as a way of mass data transfer.
    BDC is a mass data transfer technique via screen logic of existing SAP Data entry transactions. It behaves as if you are manually making thousand of entires into sap system as a background job. And that is probably the reason why BAPI's are preffered over BDC's.
    On the other hand LSMW is a tool to facilitate DATA migration from other legacy systems ... It contains step by step procedure for data migration.
    Like Managing Data Migration Projects , Creating Source Structures , Mapping Source structures wid Target structures , etc etc
    LSMW internally might well be using the following techniqes for data transfer..
    1. IDOX
    2. Direct Input / BDC
    4. BAPI's
    LSMW is an encapsulated data transfer tool. It can provide the same functionality as BDC infact much more but when coming to techinical perspective most the parameters are encapulated. To listout some of the differences :
    LSMW is basicaly designed for a fuctional consultant who do not do much coding but need to explore the fuctionality while BDC is designed for a technical consultant.
    LSMW offers different techinque for migrating data: Direct input ,BAPI,Idoc,Batch input recording. While bdc basically uses recording.
    LSMW mapping is done by SAP while in BDC we have to do it explicitly .
    LSMW is basically for standard SAP application while bdc basically for customized application.
    Coding can be done flexibly in BDC when compared to LSMW
    1. Maintain Attributes:
    Here you have to choose the second option and you can do the recording how this should work. Then assign the same to the Batch Input Recording name.
    2. Maintain Source structure:
    Create a structure name
    3. Maintain Source field:
    In this you have to create a structure same as that of the input file
    eg: name
    age
    4. Maintain structure relations:
    This will link the structure to the input file.
    5. Maintain field mapping and conversion rules:
    Here is the place where you can do coding, depending upon the code you have written or assignment you have done the values will get picked up from the file and get processed.
    6. Maintain field mapping and conversion rules:
    If you have any fixed values you can define here.
    7. Specify files:
    Specify the input file path and type.
    8. Assign files:
    This will assign ur file to the Input file
    9. Read Data:
    This will read ur data from teh file.
    10. Dispaly Read Data:
    You can see the uploaded data
    11. Convert Data
    This will convert the data to the corresponding format for processing
    12. Display Converted data:
    13. Create batch input session
    Here this will create a batch input session for processing
    14. Run Batch Input session:
    By clicking on the session and process the same you can do teh needfu.
    http://www.sapbrain.com/TOOLS/LSMW/SAP_LSMW_steps_introduction.html
    http://esnips.com/doc/8e732760-5548-44cc-a0bb-5982c9424f17/lsmw_sp.ppt
    http://esnips.com/doc/f55fef40-fb82-4e89-9000-88316699c323/Data-Transfer-Using-LSMW.zip
    http://esnips.com/doc/1cd73c19-4263-42a4-9d6f-ac5487b0ebcb/LSMW-with-Idocs.ppt
    http://esnips.com/doc/ef04c89f-f3a2-473c-beee-6db5bb3dbb0e/LSMW-with-BAPI.ppt
    http://esnips.com/doc/7582d072-6663-4388-803b-4b2b94d7f85e/LSMW.pdf
    for Long texts Upload
    Please take a look at this..
    http://help.sap.com/saphelp_erp2005/helpdata/en/e1/c6d30210e6cf4eac7b054a73f8fb1d/frameset.htm
    Reward points for useful Answers
    Regards
    Anji

  • No batch input data for screen  for VF01

    Hi All,
    Iam trying to to create billing document using  BDC for VF01 with  sales order. For single line item it is working fine and that to in Mode 'A'. But while  creating invoices using multiple sales orders  , Iam getting the following error.
    No batch input data for screen 'SAPMV60A' '0102' . Error  - 0344. 
    Kindly help me as I was strucked here.
    My code .
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'KOMFK-VBELN(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'KOMFK-VBELN(01)'
                                      gwa_bdc-vbeln.
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'VBRK-FKART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'VBRK-FKART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=SICH'.
        REFRESH messtab[].
        CALL TRANSACTION 'VF01' USING bdcdata
                         OPTIONS FROM wa_options
                         MESSAGES INTO messtab.
    Please <removed by moderator> help.
    Thanks ,
    Srikanth.A
    Edited by: Thomas Zloch on Sep 15, 2011 1:47 PM

    Hi Jurgen
      LOOP AT git_bdc INTO gwa_bdc.
       refresh messtab[].
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'KOMFK-VBELN(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'KOMFK-VBELN(01)'
                                      gwa_bdc-vbeln.
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'VBRK-FKART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'VBRK-FKART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'VBRK-FKART'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=SICH'.
        REFRESH messtab[].
        CALL TRANSACTION 'VF01' USING bdcdata
                         OPTIONS FROM wa_options
                         MESSAGES INTO messtab.
    Error message population....
    REFRESH bdcdata[].
    ENDLOOP.
    Thanks,
    Srikanth.A

  • BDC using call transaction

    Hi ,
    This is vijay...
    can anyone help me plz
    Hi,
    Iam uploading data using call transaction.Tcode is ff67.In this TCode we have the begining balance(ssald) and ending balance(esald).The new record we are uploading will take the begining balance as the previous record ending balance, if we give the begining balance wrong then the record does not saved it will show error(the begining balance does not match with the prior ending balance).
    while uploading the data using MODE A iam able to get the desired output but by using the MODE N iam not able to get the desired output i,e if there is any error in the begining balance also the record is being saved iam not getting the error message.
    Iam attaching the code below..please help me
    report Z_BRS_BDC no standard page heading line-size 255.
            INTERNAL TABLES DECLARATIONS
    DATA : BEGIN OF bdcdata OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA : END OF bdcdata.
    DATA:  LV_OUT TYPE STRING.
    DATA : iopt LIKE ctu_params.
    DATA : wa_rec_err   TYPE i.
    DATA : wa_rec_wri TYPE i.
    DATA : wa_tot_rec TYPE i.
    DATA : amt(16) type c.
    DATA : BEGIN OF gu_upload OCCURS 0,
           hbkid LIKE febmka-hbkid,
           hktid LIKE febmka-hktid,
           aznum LIKE febmka-aznum,
           azdat LIKE febmka-azdat,
           ssald LIKE amt,
           esald LIKE amt,
           budtm LIKE febmka-budtm,
           mnam1 LIKE febmka-mnam1,
           jname LIKE febmka-jname,
           vgman LIKE febmka-vgman,
           valut LIKE febep-valut,
           kwbtr(13) TYPE c,
           chect_kf LIKE febmkk-chect_kf,
          END OF gu_upload.
    DATA:GU_DOWNLOAD LIKE GU_UPLOAD OCCURS 0 WITH HEADER LINE.
    kishi*********************************
    DATA: BEGIN OF itab OCCURS 0,
         vgman LIKE febmka-vgman,
         valut LIKE febep-valut,
         kwbtr(13) TYPE c,
         chect_kf LIKE febmkk-chect_kf,
         END OF itab.
    kishi)(_()00-8-09
    DATA: BEGIN OF  messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    DATA: BEGIN OF messtab1 OCCURS 0.
            INCLUDE STRUCTURE messtab.
    DATA: END OF messtab1.
    DATA : BEGIN OF int_count OCCURS 0.
            INCLUDE STRUCTURE alsmex_tabline.
    DATA : END OF int_count.
    DATA: c_tcode      LIKE sy-tcode              VALUE 'FF67',
          c_upd        LIKE ctu_params-updmode    VALUE 'S',
          c_def_size   LIKE ctu_params-defsize    VALUE 'X'.
    *VALUES FOR STARTING COLUMNS AND ROWS IN THE EXCEL SHEET
    DATA : c_begcol     TYPE i                     VALUE '1',
          c_begrow     TYPE i                     VALUE '1',
    *DATA IS ENDED AT THE 13TH COLUMN IN THE EXCELSHEET
          c_endcol     TYPE i                     VALUE '13',
    *LAST ROW IN THE EXCEL SHEET
          c_endrow     TYPE i                     VALUE '65536',
          c_path(3)    TYPE c                     VALUE 'C:\'.
    *Field Symbols
    FIELD-SYMBOLS: <fs>.
         SELECTION SCREEN PARAMETERS
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS : p_file LIKE rlgrap-filename DEFAULT
    'C:\ ',
    *This is the path for downloading file
    P_FNAME2 LIKE RLGRAP-FILENAME ,
    c_mode LIKE ctu_params-dismode  DEFAULT 'N'.
    SELECTION-SCREEN END OF BLOCK b1.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    *F4 HELP FOR FILE SELECTION
      PERFORM validate_input_file.
    START-OF-SELECTION.
      CLEAR gu_upload.
      REFRESH gu_upload.
         UPLOAD THE DATA FROM FLAT FILE TO INTERNAL TABLE
      PERFORM file_upload.
      iopt-dismode = c_mode.
      iopt-updmode = c_upd.
      iopt-defsize = c_def_size.
         POPULATE THE DATA THROUGHSCREENS
      PERFORM bdc_upload.
    END-OF-SELECTION.
    *DISPLY THE ERROR RECORDS
    PERFORM DISPLAY-DATA.
          FORM file_upload                                              *
    FORM file_upload.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
           EXPORTING
                filename                = p_file
                i_begin_col             = c_begcol
                i_begin_row             = c_begrow
                i_end_col               = c_endcol
                i_end_row               = c_endrow
           TABLES
                intern                  = int_count
           EXCEPTIONS
                inconsistent_parameters = 1
                upload_ole              = 2
                OTHERS                  = 3.
      LOOP AT int_count.
        ASSIGN COMPONENT int_count-col OF STRUCTURE gu_upload TO <fs>.
        IF sy-subrc NE 0.
          EXIT.
        ENDIF.
        <fs> = int_count-value.
        AT END OF row.
          APPEND gu_upload.
          CLEAR gu_upload.
        ENDAT.
      ENDLOOP.
    *kishhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
      LOOP AT gu_upload.
        itab-vgman = gu_upload-vgman.
        itab-valut =  gu_upload-valut.
        itab-kwbtr = gu_upload-kwbtr.
        itab-chect_kf = gu_upload-chect_kf.
        APPEND itab.
      ENDLOOP.
    *kishiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    ENDFORM.                    "file_upload
    *&      Form  BDC_UPLOAD
    FORM bdc_upload.
      LOOP AT gu_upload.
        CLEAR bdcdata.
        REFRESH bdcdata.
    *&      POPULATE THE DATA FOR FIRST SCREEN
    perform bdc_dynpro      using 'SAPMF40K' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'FEBMKA-JNAME'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'FEBMKA-BUKRS'
                                  'IN14'.
    perform bdc_field       using 'FEBMKA-HBKID'
                                  gu_upload-hbkid.
    perform bdc_field       using 'FEBMKA-HKTID'
                                  gu_upload-hktid.
    perform bdc_field       using 'FEBMKA-AZNUM'
                                  gu_upload-aznum.
    perform bdc_field       using 'FEBMKA-AZDAT'
                                  gu_upload-azdat.
    perform bdc_field       using 'FEBMKA-SSALD'
                                  gu_upload-ssald.
    perform bdc_field       using 'FEBMKA-ESALD'
                                  gu_upload-esald.
    perform bdc_field       using 'FEBMKA-BUDTM'
                                  gu_upload-budtm.
    perform bdc_field       using 'FEBMKA-MNAM1'
                                  gu_upload-mnam1.
    perform bdc_field       using 'FEBMKA-JNAME'
                                  gu_upload-jname.
    *&      POPULATE THE DATA FOR SECOND SCREEN
        DATA : fnam(20) TYPE c,
              idx      TYPE c.
        MOVE 1 TO idx.
        LOOP AT itab.
          PERFORM bdc_dynpro      USING 'SAPMF40K' '8000'.
          PERFORM bdc_field       USING 'BDC_CURSOR'
                                        'FEBMKK-CHECT_KF(03)'.
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '/00'.
          CONCATENATE 'FEBMKA-VGMAN(' idx ')' INTO fnam.
          PERFORM bdc_field       USING fnam
                                        itab-vgman.
          CONCATENATE 'FEBEP-VALUT(' idx ')' INTO fnam.
          PERFORM bdc_field       USING fnam itab-valut.
          CONCATENATE 'FEBMKA-KWBTR(' idx ')' INTO fnam.
          PERFORM bdc_field       USING fnam itab-kwbtr.
          CONCATENATE 'FEBMKK-CHECT_KF(' idx ')' INTO fnam.
          PERFORM bdc_field USING fnam itab-chect_kf.
          idx = idx + 1.
        ENDLOOP.
    *perform bdc_dynpro      using 'SAPMF40K' '8000'.
    *perform bdc_field       using 'BDC_CURSOR'
                                 'FEBMKK-CHECT_KF(01)'.
    *perform bdc_field       using 'BDC_OKCODE'
                                 '/00'.
    *perform bdc_field       using 'FEBMKA-VGMAN(01)'
                                 'z001'.
    *perform bdc_field       using 'FEBEP-VALUT(01)'
                                 '2007/04/26'.
    *perform bdc_field       using 'FEBMKA-KWBTR(01)'
                                 '          5000-'.
    *perform bdc_field       using 'FEBMKK-CHECT_KF(01)'
                                 '1122'.
    perform bdc_dynpro      using 'SAPMF40K' '8000'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'FEBMKK-CHECT_KF(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    *&      POPULATE THE DATA FOR FOURTH SCREEN
    perform bdc_dynpro      using 'SAPMF40K' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'FEBMKA-BUKRS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BUCH'.
    perform bdc_field       using 'FEBMKA-BUKRS'
                                  'IN14'.
    perform bdc_field       using 'FEBMKA-HBKID'
                                  gu_upload-hbkid.
    perform bdc_field       using 'FEBMKA-HKTID'
                                  gu_upload-hktid.
    perform bdc_field       using 'FEBMKA-AZNUM'
                                  gu_upload-aznum.
    perform bdc_field       using 'FEBMKA-AZDAT'
                                  gu_upload-azdat.
    perform bdc_field       using 'FEBMKA-SSALD'
                                  gu_upload-ssald.
    perform bdc_field       using 'FEBMKA-ESALD'
                                  gu_upload-esald.
    perform bdc_field       using 'FEBMKA-BUDTM'
                                  gu_upload-budtm.
    perform bdc_field       using 'FEBMKA-MNAM1'
                                  gu_upload-mnam1.
    perform bdc_field       using 'FEBMKA-JNAME'
                                  gu_upload-jname.
    *perform bdc_dynpro      using 'SAPMF40K' '0101'.
    *perform bdc_field       using 'BDC_OKCODE'
                                 '/EENDE'.
    *perform bdc_field       using 'BDC_CURSOR'
                                 'FEBMKA-BUKRS'.
    perform bdc_dynpro      using 'SAPMF40K' '0101'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EABBR'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'FEBMKA-BUKRS'.
    *&      USING THE CALL TRANSACTION
        PERFORM call_transaction.
       CLEAR BDCDATA.                      "<--- Add here
       REFRESH BDCDATA.                 "<--- Add here
      ENDLOOP.
    ENDFORM.                    " BDC_UPLOAD
    *&      Form  VALIDATE_INPUT_FILE
    FORM validate_input_file.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_path         = ' c:\ '
                mask             = ',.txt,.*.'
                mode             = 'O'
                title            = 'Upload '
           IMPORTING
                filename         = p_file
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
    IF sy-subrc <> 0.
    IF sy-subrc <> 0 AND sy-subrc <> 3.
       MESSAGE e100(zm) WITH text-007.
    ENDIF.
    ENDFORM.                    " VALIDATE_INPUT_FILE
           Start new screen                                              *
    FORM bdc_dynpro USING program dynpro.
      CLEAR bdcdata.
      bdcdata-program  = program.
      bdcdata-dynpro   = dynpro.
      bdcdata-dynbegin = 'X'.
      APPEND bdcdata.
    ENDFORM.                    "bdc_dynpro
           Insert field                                                  *
    FORM bdc_field USING fnam fval.
      CLEAR bdcdata.
      bdcdata-fnam = fnam.
      bdcdata-fval = fval.
      APPEND bdcdata.
    ENDFORM.                    "bdc_field
    *&      Form  CALL_TRANSACTION
    FORM call_transaction.
      DATA: l_index LIKE sy-tabix.
      CALL TRANSACTION  c_tcode USING bdcdata
                                MODE c_mode
                                MESSAGES INTO messtab.
    *POPULATE THE ERROR RECORDS INTO INTERNAL TABLE
      IF SY-SUBRC NE 0.
        GU_DOWNLOAD-HBKID = GU_UPLOAD-HBKID.
       GU_DOWNLOAD-HBKID = GU_UPLOAD-HBKID.
        GU_DOWNLOAD-HKTID = GU_UPLOAD-HKTID.
        GU_DOWNLOAD-AZNUM = GU_UPLOAD-AZNUM.
        GU_DOWNLOAD-AZDAT = GU_UPLOAD-AZDAT.
        GU_DOWNLOAD-ESALD = GU_UPLOAD-ESALD.
        GU_DOWNLOAD-SSALD = GU_UPLOAD-SSALD.
        GU_DOWNLOAD-BUDTM = GU_UPLOAD-BUDTM.
        GU_DOWNLOAD-MNAM1 = GU_UPLOAD-MNAM1.
        GU_DOWNLOAD-JNAME = GU_UPLOAD-JNAME.
        GU_DOWNLOAD-VGMAN = GU_UPLOAD-VGMAN.
        GU_DOWNLOAD-VALUT = GU_UPLOAD-VALUT.
        GU_DOWNLOAD-KWBTR = GU_UPLOAD-KWBTR.
        GU_DOWNLOAD-CHECT_KF = GU_UPLOAD-CHECT_KF.
        APPEND GU_DOWNLOAD.
    *DISPLAY THE PROGRESS OF PROCESS
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
       PERCENTAGE       = 0
       TEXT             = 'Downloading is in process'.
    *DOWNLOADING THE ERROR RECORD
        LV_OUT = P_FNAME2.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            FILENAME               =  LV_OUT
            WRITE_FIELD_SEPARATOR  =      'X'
          TABLES
            DATA_TAB                =  GU_DOWNLOAD.
    ENDIF.
      IF NOT messtab[] IS INITIAL.
        PERFORM format_message.
      ENDIF.
    ENDFORM.                    " CALL_TRANSACTION
    *&      Form  DISPLAY-DATA
    FORM display-data.
      SKIP.
      WRITE: 'SY-SUBRC' , sy-subrc.
    ENDFORM.                    " DISPLAY-DATA
          FORM FORMAT_MESSAGE                                           *
    FORM format_message.
      DATA: l_msg(100),
       l_index LIKE sy-tabix.
      LOOP AT messtab.
        READ TABLE gu_upload INDEX l_index.
        CALL FUNCTION 'FORMAT_MESSAGE'
             EXPORTING
                  id        = messtab-msgid
                  lang      = sy-langu
                  no        = messtab-msgnr
                  v1        = messtab-msgv1
                  v2        = messtab-msgv2
                  v3        = messtab-msgv3
                  v4        = messtab-msgv4
             IMPORTING
                  msg       = l_msg
             EXCEPTIONS
                  not_found = 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.
       WRITE:/ l_msg.
      ENDLOOP.
      WRITE:/ l_msg.
    ENDFORM.
    Message was edited by:
            vijayd duvvada

    Hi,
      First , keep the mode "E" and check the debugger , you can exactly see where the error is and let me know, what error and where it is stoping.
    By your coding, i suppose to think that, its proble in the amount (currency). When ever you are try to pass the value, and value is not there in upload file or data is mismatch, the call transaction will fail in mode 'A' and succesful in mode 'N'.
    In that situation use this before the currecny field.
    IF NOT FEBMKA-SSALD IS INTIAL.
       perform bdc_field using 'FEBMKA-ESALD'
                                      gu_upload-esald.
    ENDIF.
    tHANKS
    Manju

Maybe you are looking for