Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Problem in BDC execution with mode 'N'

Former Member
0 Kudos

Hi,

While running BDC with mode 'A'(All Screens) the database table is updating,But running with mode 'N' (No Screens) database table is not updating.Please help me..

Thanks

16 REPLIES 16

FredericGirod
Active Contributor
0 Kudos

Hi,

did you check the protocol ?

regards

Fred

Former Member
0 Kudos

Hi Sai Ganesh,

    While Recording you missed some activity i think so. Kindly Re-Record the BDC and check it will work.

Reason : When MODE is 'A' you are manually pressing ENTER key , SO warning message is taken.

But Mode 'N" that warning message not occur , So kindly Re-Record the BDC and Try.

Regards,

S.Chandrakumar

0 Kudos

Hi Chandra,

It is updating for one region,i.e in selection screen i gave input is region.So it is working for Hyderabad region but not working for other regions.

0 Kudos

Hi Sai Ganesh,

You are telling one region is working fine , and other is not working. SO kindly check the T.code manually for other region anything may be need data i think so. As well as check any validation for other region inside the user-exit .

Kindly tel me the T.Code i will try.

Regards,

S.Chandrakumar

0 Kudos

Hi Siva,

Tcode is MR21.

Thanks

Former Member
0 Kudos

Hi Ganesh,

Firsth Thing :

Run it with the mode 'E' to check where the program stops.

You will see any errors which are causing this issue.

Second Thing :

Have you debugged the issue ?

For ex : - This will capture the issue ..

CALL TRANSACTION 'XD01' USING IT_BDCDATA

MODE 'N' UPDATE 'S'

MESSAGES INTO ITAB_MESSAGES.

if sy-subrc ne 0.

IF sy-msgty EQ 'E' .

CLEAR wf_error_text.

SELECT SINGLE text INTO wf_error_text

     FROM  t100

     WHERE      sprsl  =  'E'

     AND        arbgb  =  sy-msgid

     AND        msgnr  =  sy-msgno.

  REPLACE FIRST OCCURRENCE OF '&' IN wf_error_text WITH sy-msgv1 .

  REPLACE FIRST OCCURRENCE OF '&' IN wf_error_text WITH sy-msgv2 .

  REPLACE FIRST OCCURRENCE OF '&' IN wf_error_text WITH sy-msgv3 .

  REPLACE FIRST OCCURRENCE OF '&' IN wf_error_text WITH sy-msgv4 .

  WRITE : / 'Error Messge:' , wf_error_text

endif

endif.

With the above two steps you will get the clarity on the issue so that we can do bug fixing accordingly.

In Many scenarios this issue ocurs due to miss recording for OK Code Enter, while running with ALL screens you will manually press enter so it will work.

In Case if you come across same scenario try with below instructions:

Try explicitly coding bdc ok code for enter in appropriate places.(i.e. the place where u need to press the enter)

Check this OK codes: /00 and =ENTR.

In most of the transactions OK code for enter will be /00.

Ex : -

PERFORM bdc_dynpro      USING 'SAPLMLSP' '0200'.

before manually creating OK code.


Ex :

PERFORM bdc_dynpro      USING 'PROGNAME' 'SCREEN No'.

PERFORM bdc_field       USING 'BDC_OKCODE'

                                  '/00' or 'ENTR'..etc

Best Regards,

NKC

Former Member
0 Kudos

Hi Ganesha,

I think you have to use the commit work statement to update the database.

or you can use the below code to get the error records

DATA:t_msg TYPE TABLE OF bdcmsgcoll,
         wa_msg TYPE bdcmsgcoll,
         wa_msg1(50).
   CALL TRANSACTION 'ME51' USING t_bdcdata MODE 'w_mode' UPDATE 'S' MESSAGES INTO
         t_msg.
   IF sy-subrc = 0.
     MESSAGE 'data uploaded into table eban' TYPE 's'.
   ENDIF.
   LOOP AT t_msg INTO wa_msg WHERE msgtyp = 'E'  .
     CALL FUNCTION 'MESSAGE_TEXT_BUILD'
       EXPORTING
         msgid               = wa_msg-msgid
         msgnr               = wa_msg-msgnr
         msgv1               = wa_msg-msgv1
         msgv2               = wa_msg-msgv2
         msgv3               = wa_msg-msgv3
         msgv4               = wa_msg-msgv4
       IMPORTING
         message_text_output = wa_msg1.


     wa_output-msg_err = wa_msg1.

     DATA:
        wa_string(10) TYPE c.

     wa_string = wa_kna1-matnr.

     CONCATENATE wa_string wa_output-msg_err INTO wa_output-msg_err SEPARATED BY space.

     APPEND wa_output-msg_err TO it_output.

     w_error = p_error.

     CALL FUNCTION 'GUI_DOWNLOAD'
       EXPORTING
*       BIN_FILESIZE                    =
         filename                        = w_error
        FILETYPE                        = 'ASC'
*       APPEND                          = ' '
*       WRITE_FIELD_SEPARATOR           = ' '
*       HEADER                          = '00'
*       TRUNC_TRAILING_BLANKS           = ' '
*       WRITE_LF                        = 'X'
*       COL_SELECT                      = ' '
*       COL_SELECT_MASK                 = ' '
*       DAT_MODE                        = ' '
*       CONFIRM_OVERWRITE               = ' '
*       NO_AUTH_CHECK                   = ' '
*       CODEPAGE                        = ' '
*       IGNORE_CERR                     = ABAP_TRUE
*       REPLACEMENT                     = '#'
*       WRITE_BOM                       = ' '
*       TRUNC_TRAILING_BLANKS_EOL       = 'X'
*       WK1_N_FORMAT                    = ' '
*       WK1_N_SIZE                      = ' '
*       WK1_T_FORMAT                    = ' '
*       WK1_T_SIZE                      = ' '
*       WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*       SHOW_TRANSFER_STATUS            = ABAP_TRUE
*       VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
*     IMPORTING
*       FILELENGTH                      =
       tables
         data_tab                        = it_output
*       FIELDNAMES                      =
      EXCEPTIONS
        FILE_WRITE_ERROR                = 1
        NO_BATCH                        = 2
        GUI_REFUSE_FILETRANSFER         = 3
        INVALID_TYPE                    = 4
        NO_AUTHORITY                    = 5
        UNKNOWN_ERROR                   = 6
        HEADER_NOT_ALLOWED              = 7
        SEPARATOR_NOT_ALLOWED           = 8
        FILESIZE_NOT_ALLOWED            = 9
        HEADER_TOO_LONG                 = 10
        DP_ERROR_CREATE                 = 11
        DP_ERROR_SEND                   = 12
        DP_ERROR_WRITE                  = 13
        UNKNOWN_DP_ERROR                = 14
        ACCESS_DENIED                   = 15
        DP_OUT_OF_MEMORY                = 16
        DISK_FULL                       = 17
        DP_TIMEOUT                      = 18
        FILE_NOT_FOUND                  = 19
        DATAPROVIDER_EXCEPTION          = 20
        CONTROL_FLUSH_ERROR             = 21
        OTHERS                          = 22
               .
    IF sy-subrc <> 0.
         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       ENDIF.                           " IF sy-subrc <> 0.

     ENDLOOP.

 

Thanks&Regards,

khaleel

0 Kudos

Hi Khaleel,

I already done using function module 'Format_Message',but i commented out that code.Here is my code.Look into this,and run with this code.

TABLES: mbew.

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_regio TYPE t001w-regio OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK b1.

* Declaration for Article Valuation (MBEW).

TYPES: BEGIN OF ty_mbew,

        matnr TYPE matnr,

        bwkey TYPE bwkey,

        bwtar TYPE bwtar_d,

        lbkum TYPE lbkum,

        salk3 TYPE salk3,

        verpr TYPE verpr,

        laepr TYPE laepr,

       END OF ty_mbew,

* Declaration for Company Codes (T001).

       BEGIN OF ty_t001,

         bukrs TYPE bukrs,

       END OF ty_t001,

* Declaration for Sites/Branches (T001W).

       BEGIN OF ty_t001w,

         werks TYPE werks_d,

         name1 TYPE name1,

       END OF ty_t001w,

BEGIN OF ty_store,

         store TYPE zstoredc-store,

         END OF ty_store,

* Declaration for Article Valuation (MBEW).

       BEGIN OF ty_mbew1,

        matnr TYPE matnr,

        bwkey TYPE bwkey,

        verpr TYPE verpr,

       END OF ty_mbew1,

* Declaration for Final Table.

       BEGIN OF ty_final,

         matnr TYPE matnr,

         bwkey TYPE bwkey,

         lbkum TYPE lbkum,

         verpr TYPE verpr,

         bukrs TYPE bukrs,

*         date(10) type c,

       END OF ty_final.

* Internal tables declaration

DATA: it_mbew TYPE STANDARD TABLE OF ty_mbew,

      it_mbew1 TYPE STANDARD TABLE OF ty_mbew1,

      it_mbew2 TYPE STANDARD TABLE OF ty_mbew1,

      it_mbew3 TYPE STANDARD TABLE OF ty_mbew1,

      it_t001 TYPE STANDARD TABLE OF ty_t001,

      it_t001w TYPE STANDARD TABLE OF ty_t001w,

      it_store TYPE STANDARD TABLE OF ty_store,

      it_final TYPE STANDARD TABLE OF ty_final,

* Work area declaration

      wa_mbew TYPE ty_mbew,

      wa_mbew1 TYPE ty_mbew1,

      wa_mbew2 TYPE ty_mbew1,

       wa_mbew3 TYPE ty_mbew1,

      wa_t001 TYPE ty_t001,

      wa_t001w TYPE ty_t001w,

      wa_store TYPE ty_store,

      wa_final TYPE ty_final,

      gt_return TYPE  STANDARD TABLE OF bapiret2,

      wa_return TYPE bapiret2.

START-OF-SELECTION.

* Fetch data from T001w table.

  SELECT werks

         name1

    FROM t001w

    INTO TABLE it_t001w

    WHERE regio EQ p_regio

    %_HINTS ORACLE '&max_in_blocking_factor 100&'.

  SORT it_t001w BY werks.

  SELECT store

         FROM zstoredc

         INTO TABLE it_store

    FOR ALL ENTRIES IN it_t001w

    WHERE store = it_t001w-werks.

* Fetch data from T001 table.

  SELECT bukrs

    FROM t001

    INTO TABLE it_t001

    WHERE bukrs = '2000'.

* Fetch data from MBEW table.

*  SELECT matnr

*         bwkey

*         bwtar

*         lbkum

*         salk3

*         verpr

*         laepr

*    FROM mbew

*    INTO TABLE it_mbew

*    FOR ALL ENTRIES IN it_t001w

*    WHERE bwkey = it_t001w-werks

*    AND lbkum NE 0

*    AND verpr EQ 0

*     %_HINTS ORACLE '&max_in_blocking_factor 100&'.

*

  SELECT matnr

          bwkey

          bwtar

          lbkum

          salk3

          verpr

          laepr

     FROM mbew

     INTO TABLE it_mbew

     FOR ALL ENTRIES IN it_store

     WHERE bwkey = it_store-store

*   and matnr BETWEEN '100000' and '699999'

*     and matnr < 700000

     AND lbkum NE 0

     AND verpr EQ 0

      %_HINTS ORACLE '&max_in_blocking_factor 100&'.

  IF sy-subrc = 0.

    SORT it_mbew BY bwkey.

    DELETE it_mbew WHERE matnr > 699999.

  ENDIF.

*** Fetch data from MBEW table.

  SELECT matnr

         bwkey

         verpr

    FROM mbew

    INTO TABLE it_mbew1

    FOR ALL ENTRIES IN it_mbew

    WHERE matnr = it_mbew-matnr

*    and matnr BETWEEN 100000 and 699999

         AND verpr > 0.

** Move data from mbew1 to mbew2.

  SORT it_mbew1 BY matnr verpr.

  it_mbew2[] = it_mbew3[] = it_mbew1[].

*  LOOP AT it_mbew1 INTO wa_mbew1 .

**  LOOP at it_t001w into wa_t001w.

*    READ TABLE it_t001w INTO wa_t001w WITH KEY werks = wa_mbew1-bwkey BINARY SEARCH.

*    IF sy-subrc = 0.

*      wa_mbew2-matnr = wa_mbew1-matnr.

*      wa_mbew2-bwkey = wa_mbew1-bwkey.

*      wa_mbew2-verpr = wa_mbew1-verpr.

*      APPEND wa_mbew2 TO it_mbew2.

*      CLEAR:wa_mbew2.

*

*    ELSEIF sy-subrc <> 0.

*

**  delete it_mbew1 where bwkey ne wa_t001w-werks.

*    ENDIF.

*    CLEAR:wa_mbew1,wa_t001w.

*  ENDLOOP.

*endloop.

*  LOOP AT it_mbew1 INTO wa_mbew1.

*  CASE p_regio.

*    WHEN '01'.

*      DELETE it_mbew1 WHERE bwkey NS 'CH'." or bwkey ns 'BL' ).

*      DELETE it_mbew3 WHERE bwkey NS 'BL'." or bwkey ns 'BL' ).

*

*      DELETE it_mbew2 WHERE bwkey NS 'HY'.

*

*    WHEN '10'.

*      DELETE it_mbew1 WHERE bwkey NS 'HY' OR bwkey NS 'CH'.

*      DELETE it_mbew2 WHERE bwkey NS 'BL'.

*

*    WHEN '22'.

*      DELETE it_mbew1 WHERE bwkey NS 'BL' OR bwkey NS 'HY'.

*      DELETE it_mbew2 WHERE bwkey NS 'CH'.

*  ENDCASE.

  CASE p_regio.

    WHEN '01'.

      DELETE it_mbew1 WHERE bwkey NS 'CH'." or bwkey ns 'BL' ).

      DELETE it_mbew3 WHERE bwkey NS 'BL'." or bwkey ns 'BL' ).

      DELETE it_mbew2 WHERE bwkey NS 'HY'.

    WHEN '10'.

      DELETE it_mbew1 WHERE bwkey NS 'HY'." OR bwkey NS 'CH'.

      DELETE it_mbew3 WHERE bwkey NS 'CH'.

      DELETE it_mbew2 WHERE bwkey NS 'BL'.

    WHEN '22'.

      DELETE it_mbew1 WHERE bwkey NS 'BL'." OR bwkey NS 'HY'.

      DELETE it_mbew3 WHERE bwkey NS 'HY'.

      DELETE it_mbew2 WHERE bwkey NS 'CH'.

  ENDCASE.

* For Test Purpose

**  ENDLOOP.

* Move data to final internal table.

  SORT it_mbew2 BY matnr verpr.

  SORT it_mbew1 BY matnr verpr.

  SORT it_mbew3 BY matnr verpr.

  SORT it_mbew BY matnr bwkey.

  LOOP AT it_mbew INTO wa_mbew ."where matnr between 100000 and  699999.

*    READ TABLE it_t001w INTO wa_t001w WITH KEY werks = wa_mbew-bwkey BINARY SEARCH.

    READ TABLE it_mbew2 INTO wa_mbew2 WITH KEY matnr = wa_mbew-matnr BINARY SEARCH.

    IF sy-subrc = 0. "AND "wa_mbew2-verpr GT 0.

      wa_final-matnr = wa_mbew-matnr.

      wa_final-bwkey = wa_mbew-bwkey.

      wa_final-lbkum = wa_mbew-lbkum.

      wa_final-verpr = wa_mbew2-verpr.

      CLEAR:wa_mbew2.

    ELSE.

      READ TABLE it_mbew1 INTO wa_mbew1 WITH KEY matnr = wa_mbew-matnr BINARY SEARCH.

      IF sy-subrc = 0 .

        wa_final-matnr = wa_mbew-matnr.

        wa_final-bwkey = wa_mbew-bwkey.

        wa_final-lbkum = wa_mbew-lbkum.

        wa_final-verpr = wa_mbew1-verpr.

        CLEAR:wa_mbew1.

      ELSE.

        READ TABLE it_mbew3 INTO wa_mbew1 WITH KEY matnr = wa_mbew-matnr BINARY SEARCH.

        wa_final-matnr = wa_mbew-matnr.

        wa_final-bwkey = wa_mbew-bwkey.

        wa_final-lbkum = wa_mbew-lbkum.

        wa_final-verpr = wa_mbew1-verpr.

        CLEAR:wa_mbew1.

      ENDIF.

    ENDIF.

    READ TABLE it_t001 INTO wa_t001 INDEX 1.

    wa_final-bukrs = wa_t001-bukrs.

    APPEND wa_final TO it_final.

    CLEAR:wa_final, wa_mbew, wa_mbew2,wa_t001.

  ENDLOOP.

* Call Transaction Method

  TYPES:  BEGIN OF record,

           budat(010),

           bukrs(004),

           werks(004),

           matnr(018),

           lbkum(013),

           verpr(015),

          END OF record.

  TYPES: BEGIN OF ty_mr21,

           budat(010),

           bukrs(004),

           werks(004),

         END OF ty_mr21.

  TYPES : BEGIN OF ty_file,

            budat(10),

            bukrs(4),

            werks(4),

            matnr(18),

            lbkum(13),

            price(16),

            mess(20),

          END OF ty_file.

  TYPES:  BEGIN OF t_fieldname,

          fieldname(20) TYPE c,

          END OF t_fieldname.

  TYPES:BEGIN OF ty_error,

        msg_error TYPE c,

        END OF ty_error.

  DATA:   BEGIN OF  t_mess OCCURS 0,                                              "Internal Table for  Messages

                   msgnr(5),

                   mat_doc(15),

                   l_mstring(480),

END   OF  t_mess.

  DATA: it_output TYPE TABLE OF ty_error,

        wa_output LIKE LINE OF it_output.

  DATA: it_record  TYPE STANDARD TABLE OF record,

        wa_record  TYPE  record,

        wa_record1 TYPE  record,

        t_mr21 TYPE STANDARD TABLE OF ty_mr21,

        t_file TYPE STANDARD TABLE OF ty_file,

        w_file TYPE ty_file,

        w_mr21 TYPE ty_mr21,

        v_index TYPE sy-index.

  DATA: lt_fieldname TYPE STANDARD TABLE OF t_fieldname,

        lw_fieldname TYPE t_fieldname.

  DATA: lv_file TYPE string, "string,"rlgrap-filename,

*        lv_file TYPE rlgrap-filename,

        lv_sheet TYPE rlgrap-filename VALUE 'Price_Details'.

  DATA:it_bdcdata TYPE STANDARD TABLE OF bdcdata INITIAL SIZE 0,

       wa_bdcdata TYPE bdcdata,

       it_msg  TYPE STANDARD TABLE OF bdcmsgcoll INITIAL SIZE 0,

       wa_msg TYPE bdcmsgcoll,

*       it_msg LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,     "Internal Table for Message Data

*       t_bdcmsgcoll  TYPE bdcmsgcoll,

       l_mstring(480),                                                      "Message String1

       l_mstring1(480).

*       wa_msg1(50),

*       it_error TYPE STANDARD TABLE OF record.

  DATA:l_n TYPE char2,

       l_msg TYPE string,

       l_opt TYPE ctu_params,

       v_fnam(100),

       v_ind TYPE string,

       v_flag,

       v_temp TYPE i,

       v_count TYPE i,

       v_index_e TYPE i.

  SORT it_final BY bukrs bwkey matnr.

  LOOP AT it_final INTO wa_final.

    WRITE sy-datum TO wa_record-budat.

    w_mr21-budat = wa_record-budat.

    w_mr21-bukrs = wa_record-bukrs = wa_final-bukrs.

    w_mr21-werks = wa_record-werks = wa_final-bwkey.

    wa_record-matnr = wa_final-matnr.

    wa_record-lbkum = wa_final-lbkum.

    wa_record-verpr = wa_final-verpr.

    APPEND wa_record TO it_record.

    APPEND w_mr21 TO t_mr21.

  ENDLOOP.

  SORT t_mr21 BY budat bukrs werks.

  DELETE ADJACENT DUPLICATES FROM t_mr21 COMPARING ALL FIELDS.

*v_ind = 0.

  LOOP AT t_mr21 INTO w_mr21.

    PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'  '0201'.

    PERFORM bdc_field       USING 'BDC_OKCODE'     '=ENTR'.

    PERFORM bdc_field       USING 'MR21HEAD-BUDAT' w_mr21-budat.

    PERFORM bdc_field       USING 'MR21HEAD-BUKRS' w_mr21-bukrs.

    PERFORM bdc_field       USING 'MR21HEAD-WERKS' w_mr21-werks.

    PERFORM bdc_field       USING 'MR21HEAD-XBLNR'  'MAP CHANGE'.

    PERFORM bdc_field       USING 'MR21HEAD-BKTXT' 'PEC REQUEST'.

*    move 1 to v_ind.

    LOOP AT it_record INTO wa_record  WHERE budat = w_mr21-budat

                                      AND   bukrs = w_mr21-bukrs

                                      AND   werks = w_mr21-werks.

      v_count = v_count + 1.

      v_temp = v_count MOD 11.

      IF v_temp = 0.

        v_ind = 10.

        PERFORM bdc_process.

        PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'            '0201'.

        PERFORM bdc_field       USING 'BDC_OKCODE'              '=SAVE'.

        CALL TRANSACTION 'MR21' USING it_bdcdata

                                MODE  'N'

                                UPDATE 'S'

                                MESSAGES INTO it_msg.

        CLEAR: wa_bdcdata.

        REFRESH: it_bdcdata.

        v_flag = 'X'.

        PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'  '0201'.

        PERFORM bdc_field       USING 'BDC_OKCODE'     '=ENTR'.

        PERFORM bdc_field       USING 'MR21HEAD-BUDAT' w_mr21-budat.

        PERFORM bdc_field       USING 'MR21HEAD-BUKRS' w_mr21-bukrs.

        PERFORM bdc_field       USING 'MR21HEAD-WERKS' w_mr21-werks.

        PERFORM bdc_field       USING 'MR21HEAD-XBLNR' 'MAP CHANGE'.

        PERFORM bdc_field       USING 'MR21HEAD-BKTXT' 'PEC REQUEST'.

        CLEAR:v_ind,v_temp.

      ELSE.

        PERFORM bdc_process.

        CLEAR: v_flag.

      ENDIF.

      CLEAR: v_temp.

    ENDLOOP.

    IF v_flag IS INITIAL.

      PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'        '0201'.

      PERFORM bdc_field       USING 'BDC_OKCODE'          '=SAVE'.

      CALL TRANSACTION 'MR21' USING it_bdcdata

                              MODE  'N'

                              UPDATE 'S'

                              MESSAGES INTO it_msg.

    ENDIF.

*    PERFORM format_messages.

    CLEAR: wa_bdcdata,v_flag,v_count,v_ind,w_mr21.

    REFRESH: it_bdcdata.

  ENDLOOP.

*  LOOP AT t_mr21 INTO w_mr21.

*    v_index = sy-tabix.

*    READ TABLE it_msg INTO wa_msg INDEX v_index.

*    IF wa_msg-msgv1 IS NOT INITIAL.

*  LOOP AT t_mr21 INTO w_mr21.

  SORT it_record BY werks matnr.

*data:qnty(13) type c.

  LOOP AT it_record INTO wa_record.

    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'

      CHANGING

        value = wa_record-lbkum.

*

*    ENDIF.

    IF wa_record-verpr <> 0.

*

      w_file-budat = wa_record-budat.

      w_file-bukrs = wa_record-bukrs.

      w_file-werks = wa_record-werks.

      w_file-matnr = wa_record-matnr.

      w_file-lbkum = wa_record-lbkum.

      w_file-price = wa_record-verpr.

      w_file-mess  = 'Newly changed Price'.

      APPEND w_file TO t_file.

*          CLEAR: w_file, v_index.

*        endif.

*      ENDLOOP.

    ELSE.

*if wa_record-verpr = 0.

*      LOOP AT it_record INTO wa_record WHERE budat = w_mr21-budat

*                                        AND  bukrs = w_mr21-bukrs

*                                        AND  werks = w_mr21-werks.

*      if wa_record-verpr = 0.

      w_file-budat = wa_record-budat.

      w_file-bukrs = wa_record-bukrs.

      w_file-werks = wa_record-werks.

      w_file-matnr = wa_record-matnr.

      w_file-lbkum = wa_record-lbkum.

      w_file-price = wa_record-verpr.

      w_file-mess  = 'No Price Change'.

      APPEND w_file TO t_file.

      CLEAR: w_file.

*endif.

*     ENDLOOP.

    ENDIF.

  ENDLOOP.

*  ENDLOOP.

*    ENDIF.

*  ENDLOOP.

  IF t_file IS INITIAL.

    MESSAGE  'No data available to download' TYPE 'S' .

    EXIT.

  ENDIF.

  lw_fieldname-fieldname = 'Date'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Company Code'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Site'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Article'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Quantity'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Price'.

  APPEND lw_fieldname TO lt_fieldname.

  lw_fieldname-fieldname = 'Message'.

  APPEND lw_fieldname TO lt_fieldname.

*  CONCATENATE 'C:\' 'Price_Change' '\' sy-uzeit '.xls' INTO lv_file." SEPARATED BY space.

*  CONCATENATE 'C:\' 'Price' '\' 'Price_' sy-datum '_' sy-uzeit '.xls' INTO lv_file.

  CONCATENATE 'C:\' 'Map' '\' 'Map_Change_' sy-datum '.xls' INTO lv_file.

  CALL FUNCTION 'GUI_DOWNLOAD'

    EXPORTING

      filename                = lv_file

      filetype                = 'DAT'

      write_field_separator   = '#'

      show_transfer_status    = 'X'

    TABLES

      data_tab                = t_file

      fieldnames              = lt_fieldname

    EXCEPTIONS

      file_write_error        = 1

      no_batch                = 2

      gui_refuse_filetransfer = 3

      invalid_type            = 4

      no_authority            = 5

      unknown_error           = 6

      header_not_allowed      = 7

      separator_not_allowed   = 8

      filesize_not_allowed    = 9

      header_too_long         = 10

      dp_error_create         = 11

      dp_error_send           = 12

      dp_error_write          = 13

      unknown_dp_error        = 14

      access_denied           = 15

      dp_out_of_memory        = 16

      disk_full               = 17

      dp_timeout              = 18

      file_not_found          = 19

      dataprovider_exception  = 20

      control_flush_error     = 21

      OTHERS                  = 22.

  IF sy-subrc = 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    MESSAGE s398(00) WITH text-s01 lv_file.

  ENDIF.

*CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'

*  EXPORTING

*    file_name                       = lv_file

**   CREATE_PIVOT                    = 0

*   DATA_SHEET_NAME                 = 'MAP'

**   PIVOT_SHEET_NAME                = ' '

**   PASSWORD                        = ' '

**   PASSWORD_OPTION                 = 0

* TABLES

**   PIVOT_FIELD_TAB                 =

*   DATA_TAB                        = t_file

*  FIELDNAMES                       = lt_fieldname

** EXCEPTIONS

**   FILE_NOT_EXIST                  = 1

**   FILENAME_EXPECTED               = 2

**   COMMUNICATION_ERROR             = 3

**   OLE_OBJECT_METHOD_ERROR         = 4

**   OLE_OBJECT_PROPERTY_ERROR       = 5

**   INVALID_PIVOT_FIELDS            = 6

**   DOWNLOAD_PROBLEM                = 7

**   OTHERS                          = 8

*          .

*IF sy-subrc <> 0.

** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

**         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*ENDIF.

*&---------------------------------------------------------------------*

*&      Form  bdc_dynpro

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->PROGRAM    text

*      -->DYNPRO     text

*----------------------------------------------------------------------*

FORM bdc_dynpro USING program dynpro.

  CLEAR wa_bdcdata.

  wa_bdcdata-program  = program.

  wa_bdcdata-dynpro   = dynpro.

  wa_bdcdata-dynbegin = 'X'.

  APPEND wa_bdcdata TO it_bdcdata.

ENDFORM.                    "BDC_DYNPRO

*&---------------------------------------------------------------------*

*&      Form  BDC_FIELD

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->FNAM       text

*      -->FVAL       text

*----------------------------------------------------------------------*

FORM bdc_field USING fnam fval.

  CLEAR wa_bdcdata.

  wa_bdcdata-fnam = fnam.

  wa_bdcdata-fval = fval.

  APPEND wa_bdcdata TO it_bdcdata.

ENDFORM.                    "BDC_FIELD

*call transaction end

*&---------------------------------------------------------------------*

*&      Form  BDC_PROCESS

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM bdc_process .

  PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'            '0201'.

  PERFORM bdc_field       USING 'BDC_OKCODE'              '=ENTR'.

  PERFORM bdc_field       USING 'MR21HEAD-SCREEN_VARIANT' 'MR21_LAGERMATERIAL_BWKEY_0250'.

  v_ind = v_ind + 1.

  CONCATENATE 'CKI_MR21_0250-MATNR(' v_ind ')' INTO v_fnam.

  PERFORM bdc_field       USING v_fnam      wa_record-matnr.

  CLEAR: v_fnam.

  CONCATENATE 'CKI_MR21_0250-NEWVALPR(' v_ind ')' INTO v_fnam.

  PERFORM bdc_field       USING v_fnam   wa_record-verpr.

  CLEAR: v_fnam,wa_record.

ENDFORM.                    " BDC_PROCESS

*&---------------------------------------------------------------------*

*&      Form  FORMAT_MESSAGES

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

*FORM format_messages .

** Formating Messages.

*  DESCRIBE TABLE it_msg LINES v_index_e.

*  READ TABLE it_msg INTO wa_msg INDEX v_index_e.

*

**  CALL FUNCTION 'FORMAT_MESSAGE'

**    EXPORTING

**      id        = it_msg-msgid

**      lang      = it_msg-msgspra

**      no        = it_msg-msgnr

**      v1        = it_msg-msgv1

**      v2        = it_msg-msgv2

**      v3        = it_msg-msgv3

**      v4        = it_msg-msgv4

**    IMPORTING

**      msg       = l_mstring1

**    EXCEPTIONS

**      not_found = 1

**      OTHERS    = 2.

**  CONDENSE l_mstring1.

**  t_mess-mat_doc     = wa_record-matnr.

**  t_mess-l_mstring   = l_mstring1(250).

**  APPEND t_mess.

*

*

*  CALL FUNCTION 'FORMAT_MESSAGE'

*    EXPORTING

*      id        = wa_msg-msgid

*      lang      = wa_msg-msgspra

*      no        = wa_msg-msgnr

*      v1        = wa_msg-msgv1

*      v2        = wa_msg-msgv2

*      v3        = wa_msg-msgv3

*      v4        = wa_msg-msgv4

*    IMPORTING

*      msg       = l_mstring1

*    EXCEPTIONS

*      not_found = 1

*      OTHERS    = 2.

*  CONDENSE l_mstring1.

*  t_mess-mat_doc     = wa_record-matnr.

*  t_mess-l_mstring   = l_mstring1(250).

*  APPEND t_mess.

*

*

*ENDFORM.                    " FORMAT_MESSAGES

0 Kudos

Hi Ganesh,

While running in 'A'(All Screens) mode, the user is pressing enter (OK Code) which is why it is saving the data while running in background OK Code is not performed. There is error in the recording, so re record(SHDB) the transaction and it will work.

Close the thread when problem is solved.

Regards,

Prabir.

0 Kudos

Hi Ganesh,

As i told earlier have you tried running BDC with Mode 'E'.

In many scenarios, OK code will miss in the recording.

Run your BDC and check at these points :

First run the BDC and check at which level (screen no) it is getting failed. 

Once recognised put this line of code :

*

PERFORM bdc_field       USING 'BDC_OKCODE' = '=ENTR'.

                                

*


PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'  '0201'.

PERFORM bdc_field       USING 'BDC_OKCODE'     '=ENTR'.

* - If identified, put an extra OK CODE here 

PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'            '0201'.

PERFORM bdc_field       USING 'BDC_OKCODE'              '=SAVE'.


.

PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'  '0201'.

PERFORM bdc_field       USING 'BDC_OKCODE'     '=ENTR'.

* - If identified, put an extra OK CODE here 


PERFORM bdc_dynpro      USING 'SAPRCKM_MR21'        '0201'.

PERFORM bdc_field       USING 'BDC_OKCODE'          '=SAVE'

Kindly follow the previous instructions and analyse the issue.

Most of the scenarios we will comment the code ro we will miss the rcording...etc

I am sure this will fix the issue.

Best Regards,

NKC

Former Member
0 Kudos

hi ganesh,

While Recording i think  you missed some activity . Kindly Re-Record the BDC and check it will work.

you can use MODE "E'' WITH UPDATE ''S''   so that it will display all errors . else u have to re-record the BDC.

himanshu_gupta2
Participant
0 Kudos

Hello Ganesha,

same problem i have persist. it is sometime because in some Exit , if anyone have written commit work then BDC will not work in mode N and it will exits as it reaches to commit work. Pass RACOMMIT in BDC call might help you.

0 Kudos

Hi Himanshu,

Where i have to write RACOMMIT in BDC?

Thanks

0 Kudos

There is an option CTU_params ( strucutre  ctu_params) in during Call Transcation..

former_member188282
Active Participant
0 Kudos

hi,

Write commit work and check. because if you are running BDC for more than one record it may fail for some records. so its better to write commit work or wait upto some time.

Thanks,

Rajesh.

0 Kudos

This message was moderated.