‎2008 Feb 25 7:10 AM
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.
‎2008 Feb 25 7:18 AM
hi,
after call transaction use
REFRESH g_t_bdcdata.
CLEAR g_t_bdcdata.
regards,
ravi shankar reddy
‎2008 Feb 25 7:33 AM
‎2008 Feb 27 9:35 AM
The problem is resolved when i give the addition UPDATE 'S' to the call transaction!!