hi gurus,
i create a programm for bdc using call transaction to extend the plant from one plant to another plant
plz check my codes when i diosplay the error record it would show the only single record 4 times print in displaying errors.
in my flat file there is 3 records
and show the error only flat file last record
and it is like t0096 it print it 4 times but there is only 3 records
why it can not print others record of internal table
plz chk my programm
REPORT zsgg
NO STANDARD PAGE HEADING LINE-SIZE 255.
**********************************************************************
TABLES *
**********************************************************************
TABLES: mara, marc,mard.
**********************************************************************
INTERNAL TABLE *
**********************************************************************
TYPES: BEGIN OF lt_data,
matnr TYPE mara-matnr, "Material
werks TYPE marc-werks, "Plant
lgort TYPE mard-lgort, "Storage Location
maktx TYPE makt-maktx, "Material Description
iprkz TYPE mara-iprkz, "Period indicator
maktx1 TYPE makt-maktx, "Material Description
err_msg(200) TYPE c,
succ_msg(100) TYPE c,
END OF lt_data.
**********************************************************************
D A T A *
**********************************************************************
DATA: it_data TYPE TABLE OF lt_data. "Internal table for store data
DATA: wa_data LIKE LINE OF it_data. " work area for store data
DATA: it_bdc TYPE TABLE OF bdcdata. " Internal table for bdc data
DATA: wa_bdc LIKE LINE OF it_bdc. " work area for store data
DATA: it_messtab LIKE TABLE OF bdcmsgcoll. " Internal table message
DATA: wa_messtab LIKE LINE OF it_messtab. " work area for message
*DATA: it_success TYPE TABLE OF lt_data, "Internal table success
wa_success LIKE LINE OF it_success. "work area for success
DATA: it_err TYPE TABLE OF lt_data, "Internal table error record
wa_err LIKE LINE OF it_err. "work area for error record
DATA: v_file TYPE string.
DATA: v_index TYPE i.
DATA: v_text(100) TYPE c.
*********************************************************************
S E L E C T I O N S C R E E N *
*********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b .
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b.
*********************************************************************
AT SELECTION-SCREEN *
*********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_file USING p_file.
************************************************************************
START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
v_file = p_file.
*upload flat file
PERFORM upload_file USING v_file .
PERFORM bdc_upload.
PERFORM write_message.
&----
*& Form get_file
&----
Getting the file
----
FORM get_file USING p_file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
program_name = syst-repid
field_name = 'P_FILE'
CHANGING
file_name = p_file.
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. " get_file
&----
*& Form upload_file
&----
populating the file into the internal table
----
-->P_V_FILE text
<--P_IT_DATA text
----
FORM upload_file USING p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
filetype = 'DAT'
TABLES
data_tab = it_data.
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. " upload_file
&----
*& Form bdc_upload
&----
Updating MM01 using the intenal table
----
--> p1 text
<-- p2 text
----
FORM bdc_upload .
*POPULATING THE BDCDATA
LOOP AT it_data INTO wa_data.
REFRESH it_bdc.
CLEAR it_bdc.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060' 'X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RMMG1-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=AUSW'.
PERFORM bdc_field USING 'RMMG1-MATNR' wa_data-matnr.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070' 'X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'USRM1-SISEL'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'USRM1-SISEL' 'X'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(15)' 'X'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(16)' 'X'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0080' 'X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RMMG1-LGORT'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'RMMG1-WERKS' wa_data-werks.
PERFORM bdc_field USING 'RMMG1-LGORT' wa_data-lgort.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4000' 'X'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SP20'.
PERFORM bdc_field USING 'MAKT-MAKTX' 'test for change'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MARA-MEINS'.
PERFORM bdc_field USING 'MARA-MEINS' 'EA'.
PERFORM bdc_field USING 'MARA-IPRKZ' 'D'.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4000' 'X'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX' 'test for change'.
CALL TRANSACTION 'MM01' USING it_bdc
MODE 'N' UPDATE 'S'
MESSAGES INTO it_messtab.
ENDLOOP.
REFRESH it_bdc.
CLEAR it_bdc.
ENDFORM. " bdc_upload
&----
*& Form bdc_dynpro
&----
text
----
-->P1 text
-->P2 text
----
FORM bdc_dynpro USING program
dynpro
dynbegin .
wa_bdc-program = program.
wa_bdc-dynpro = dynpro.
wa_bdc-dynbegin = dynbegin.
APPEND wa_bdc TO it_bdc.
CLEAR wa_bdc.
ENDFORM. " bdc_dynpro
&----
*& Form bdc_field
&----
text
----
-->P3 text
-->P4 text
----
FORM bdc_field USING fnam
fval .
wa_bdc-fnam = fnam.
wa_bdc-fval = fval.
APPEND wa_bdc TO it_bdc.
CLEAR wa_bdc.
ENDFORM. "bdc_field
&----
*& Form write_message
&----
text
----
--> p1 text
<-- p2 text
----
FORM write_message .
Get the BDC error messages
LOOP AT it_messtab INTO wa_messtab.
CLEAR v_text.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = wa_messtab-msgid
lang = 'EN'
no = wa_messtab-msgnr
v1 = wa_messtab-msgv1
v2 = wa_messtab-msgv2
v3 = wa_messtab-msgv3
v4 = wa_messtab-msgv4
IMPORTING
msg = v_text.
IF sy-subrc = 0.
CASE wa_messtab-msgtyp.
********Display Report When Records are extend
WHEN 'S'.
write:/ v_text.
********Display Report When Error in Records
WHEN 'E'.
wa_err = wa_data.
wa_err-err_msg = v_text.
APPEND wa_err TO it_err.
CLEAR: wa_err.
ENDCASE.
ENDIF.
ENDLOOP.
REFRESH it_messtab.
CLEAR wa_messtab.
*********Error be printed
IF NOT it_err[] IS INITIAL.
WRITE:2 ' Error Report ' COLOR COL_NEGATIVE.
SKIP.
WRITE:2 'The following records failed during update:'.
WRITE:/ sy-uline(150).
FORMAT COLOR COL_HEADING.
WRITE:/ sy-vline,
(15) 'Material Number', sy-vline,
(6) 'Plant', sy-vline,
(16) 'Storage Location',sy-vline,
(100) 'Error Message', sy-vline.
WRITE:/ sy-uline(150).
FORMAT COLOR COL_NORMAL.
LOOP AT it_err INTO wa_err.
WRITE:/ sy-vline,
(15) wa_err-matnr, sy-vline,
(6) wa_err-werks, sy-vline,
(16) wa_err-lgort, sy-vline,
(100) wa_err-err_msg, sy-vline.
ENDLOOP.
ENDIF.
WRITE:/ sy-uline(150).
REFRESH: it_err.
ENDFORM. "write_message
plz help me .
its very urgent
thanks
jayant