Application Development and Automation 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: 
Read only

BDC data inconsistency

Former Member
0 Likes
531

Hi..

I am using a bdc for mm02 to change the rounding value of a material.

functionality:-

1)select matnr and werks, new rounding value

2)call bdc to change these values.

3)display the log. ie old value and new value.

when displaying the log(ie after calling the transaction) i am reading from the datbase for the new value.It still shows me the old value.

Is it because the the transaction is happenng in the background and am displaing even before i committed the update?Because next time i run the program it gives me the new value of the last run. and also when i debug since there is more time gap btw my call transaction and display it shows the correct result. how to avoid this. how do i know when the transaction has finished.


REPORT zrrbdcmm02 .


TABLES: mara , marc, zrrmm02.

DATA : BEGIN OF g_t_mara OCCURS 0,
       matnr LIKE mara-matnr,
       END OF g_t_mara,

       BEGIN OF g_t_marc OCCURS 0,
       matnr LIKE marc-matnr,
       werks LIKE marc-werks,
       END OF g_t_marc,

       BEGIN OF g_t_result OCCURS 0,
       matnr LIKE mara-matnr,
       werks LIKE marc-werks,
       oldval LIKE zrrmm02-oldval,
       newval LIKE zrrmm02-newval,
       msg LIKE zrrmm02-msg,
       END OF g_t_result,

       g_t_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

 DATA itab TYPE TABLE OF bdcmsgcoll WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETER p_matnr TYPE mara-matnr.
PARAMETER p_werks TYPE marc-werks.
PARAMETER p_newval TYPE marc-BSTRF.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  DATA: g_f_valid(1), g_f_oldval type marc-BSTRF.
  g_f_valid = 'N'.
  PERFORM validate_input.
  IF g_f_valid EQ 'Y' .
  SELECT single bstrf INTO g_f_oldval  FROM marc WHERE  matnr = p_matnr
                                             AND werks = p_werks.

    PERFORM process_data.
    PERFORM display_result.
  ENDIF.

END-OF-SELECTION.

*---------------------------------------------------------------------*
*       FORM validate_input                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM validate_input.

  DATA: l_f_temp(20) TYPE c,
        l_f_check(1).
  l_f_check = 'Y'.
  SELECT SINGLE matnr INTO g_t_mara FROM mara WHERE matnr = p_matnr.
  IF sy-subrc EQ 0.
    SELECT SINGLE werks INTO l_f_temp FROM marc WHERE werks = p_werks.
    IF sy-subrc EQ 0.
      SELECT SINGLE matnr werks INTO g_t_marc FROM marc WHERE
                                                        werks = p_werks
                                                    AND matnr = p_matnr.
      IF sy-subrc NE 0.
        l_f_check = 'N'.
        WRITE: / 'No material found in this plant'.
      ENDIF.
    ELSEIF sy-subrc NE 0.
      l_f_check = 'N'.
      WRITE: / 'No such plant found'.
    ENDIF.
  ELSEIF sy-subrc NE 0.
    l_f_check = 'N'.
    WRITE: / 'No such material found'.
  ENDIF.
  IF l_f_check EQ 'Y'.
    g_f_valid = 'Y'.
  ENDIF.


ENDFORM.        "validate_input

*---------------------------------------------------------------------*
*       FORM process_data                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM process_data.

  data :l_f_val(3) type n.
  l_f_val = p_newval.

  PERFORM bdc_dynpro      USING 'SAPLMGMM' '0060'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'RMMG1-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=ENTR'.
  PERFORM bdc_field       USING 'RMMG1-MATNR' p_matnr.

  PERFORM bdc_dynpro      USING 'SAPLMGMM' '0070'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(03)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=ENTR'.
  PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(03)' 'X'.

  PERFORM bdc_dynpro      USING 'SAPLMGMM' '0080'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'RMMG1-WERKS'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=ENTR'.
  PERFORM bdc_field       USING 'RMMG1-WERKS' p_werks.

  PERFORM bdc_dynpro      USING 'SAPLMGMM' '4000'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BU'.
  PERFORM bdc_field       USING 'MAKT-MAKTX' 'prod finito'.
  PERFORM bdc_field       USING 'MARA-MEINS' 'ST'.
  PERFORM bdc_field       USING 'MARC-DISGR' 'IM01'.
  PERFORM bdc_field       USING 'MARC-MAABC' 'A'.
  PERFORM bdc_field       USING 'MARC-DISMM' 'PD'.
  PERFORM bdc_field       USING 'MARC-DISPO' 'I01'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'MARC-BSTRF'.
  PERFORM bdc_field       USING 'MARC-DISLS' 'YX'.
  PERFORM bdc_field       USING 'MARC-BSTRF' l_f_val.

  CALL TRANSACTION 'MM02' USING g_t_bdcdata MODE 'N' MESSAGES INTO itab.


ENDFORM.    "process_data

*---------------------------------------------------------------------*
*       FORM bdc_dynpro                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  PROGRAM                                                       *
*  -->  DYNPRO                                                        *
*---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.

  g_t_bdcdata-program  = program.
  g_t_bdcdata-dynpro   = dynpro.
  g_t_bdcdata-dynbegin = 'X'.
  APPEND g_t_bdcdata.
  CLEAR  g_t_bdcdata.

ENDFORM.                    " bdc_dynpro

*---------------------------------------------------------------------*
*       FORM bdc_field                                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  FNAM                                                          *
*  -->  FVAL                                                          *
*---------------------------------------------------------------------*
FORM bdc_field USING  fnam fval.

  g_t_bdcdata-fnam   = fnam.
  g_t_bdcdata-fval   = fval.
  APPEND g_t_bdcdata.
  CLEAR  g_t_bdcdata.

ENDFORM.                    " bdc_field

*---------------------------------------------------------------------*
*       FORM display_result                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM display_result.
  DATA: BEGIN OF l_t_itab OCCURS 0,
        matnr type zrrmm02-matnr,
        werks type zrrmm02-werks,
        bstrf  type marc-BSTRF,
        oldval type marc-BSTRF,
        ersda type sy-datum,
        timestamp type sy-uzeit,
        end of l_t_itab.
SELECT matnr werks bstrf INTO CORRESPONDING FIELDS OF l_t_itab FROM marc
                                          WHERE  matnr = p_matnr
                                             AND werks = p_werks.
    APPEND l_t_itab.
  ENDSELECT.
  LOOP AT l_t_itab.
    l_t_itab-oldval = g_f_oldval.
    l_t_itab-ersda = sy-datum.
    l_t_itab-timestamp = sy-uzeit.
    modify l_t_itab.
    clear l_t_itab.
  ENDLOOP.
  loop at l_t_itab.
  WRITE : / 'matnr' , l_t_itab-matnr,
          / 'werks' , l_t_itab-werks,
          / 'old value' , l_t_itab-oldval,
          / 'new value' , l_t_itab-bstrf,
          / l_t_itab-ersda,
          / l_t_itab-timestamp.
  endloop.

  write: / 'messages'.
  loop at itab.
  write / itab.
  endloop.

ENDFORM.

3 REPLIES 3
Read only

Former Member
0 Likes
498

hi,

after call transaction use

REFRESH g_t_bdcdata.

CLEAR g_t_bdcdata.

regards,

ravi shankar reddy

Read only

0 Likes
498

Hi ,

No luck!

Read only

Former Member
0 Likes
498

The problem is resolved when i give the addition UPDATE 'S' to the call transaction!!