Hi Just copy the required Program to own Z Program
TYPE-POOLS: truxs.
DATA: zmode TYPE c.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : mode_a RADIOBUTTON GROUP r1,
mode_n RADIOBUTTON GROUP r1.
PARAMETERS: p_ifile TYPE rlgrap-filename.
PARAMETERS: p_ofile TYPE string.
SELECTION-SCREEN END OF BLOCK b1.
INCLUDE zbdcrec.
DATA: BEGIN OF it_src_upload OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
sobkz(1) TYPE c, " Special Stock
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, "Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
lifnr(10) TYPE c, " Vendor
kunnr(10) TYPE c, " Customer
UMMAT(18) TYPE C, "MATERIAL (RECEIVINF/ISSUING)
UMLGO(4) TYPE C, "ISSUING/RECEIVING STOR LOC
END OF it_src_upload.
DATA: BEGIN OF it_header OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
hcount(5) TYPE c, " Counter
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
sobkz(1) TYPE c, " Special Stock
END OF it_header.
DATA: BEGIN OF it_item OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
hcount(5) TYPE c, " Counter
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, " Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
lifnr(10) TYPE c, " Vendor
kunnr(10) TYPE c, " Customer
UMMAT(18) TYPE C, "MATERIAL (RECEIVINF/ISSUING)
UMLGO(4) TYPE C, "ISSUING/RECEIVING STOR LOC
UMCHA(10) TYPE C, " issueing receiving valuation
END OF it_item.
DATA: it_item_nex LIKE it_item.
DATA: BEGIN OF it_err OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, " Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
error(255) TYPE c, " Error Message Text
END OF it_err.
DATA: it_raw TYPE truxs_t_text_data.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: v_total TYPE i.
DATA: v_txt TYPE char80.
DATA: v_correct TYPE i.
DATA: v_error TYPE i.
DATA: v_cnt TYPE i.
CONSTANTS: c_headertype(1) TYPE c VALUE 'H',
c_itemtype(1) TYPE c VALUE 'I'.
*---------------------------------------------------------------------*
*-- At Selection Screen
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
IMPORTING
filename = p_ifile
EXCEPTIONS
OTHERS = 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ofile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
IMPORTING
filename = p_ofile
EXCEPTIONS
OTHERS = 1.
START-OF-SELECTION.
IF p_ofile IS INITIAL.
CONCATENATE p_ifile '_err' sy-datum sy-uzeit '.xls' INTO p_ofile.
ENDIF.
PERFORM data_upload.
IF mode_a EQ 'X'.
zmode = 'A'.
ELSEIF mode_n EQ 'X'.
zmode = 'N'.
ENDIF.
PERFORM filter_data.
PERFORM populate_data.
PERFORM write_status.
*&---------------------------------------------------------------------*
*& Form DATA_UPLOAD
*&---------------------------------------------------------------------*
FORM data_upload.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_ifile
TABLES
i_tab_converted_data = it_src_upload
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Error while uploading file' TYPE 'E'.
ENDIF.
ENDFORM. " DATA_UPLOAD
*&---------------------------------------------------------------------*
*& Form FILTER_DATA
*&---------------------------------------------------------------------*
FORM filter_data.
* Filtering the Header and Item data
DATA: c_hcount TYPE i.
*BREAK-POINT.
LOOP AT it_src_upload.
TRANSLATE it_src_upload TO UPPER CASE.
MODIFY it_src_upload.
IF it_src_upload-rectyp = c_headertype.
c_hcount = c_hcount + 1.
it_header-hcount = c_hcount.
MOVE-CORRESPONDING it_src_upload TO it_header.
APPEND it_header.
ELSEIF it_src_upload-rectyp = c_itemtype .
it_item-hcount = c_hcount.
MOVE-CORRESPONDING it_src_upload TO it_item.
APPEND it_item.
ENDIF.
ENDLOOP.
ENDFORM. "filter_data
*&---------------------------------------------------------------------*
*& Form POPULATE_DATA
*&---------------------------------------------------------------------*
FORM populate_data.
*BREAK-POINT.
LOOP AT it_header.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0400'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NPE'.
* Document Date
PERFORM bdc_field USING 'MKPF-BLDAT'
it_header-bldat.
* Posting Date
PERFORM bdc_field USING 'MKPF-BUDAT'
it_header-budat.
* Document Header Text
PERFORM bdc_field USING 'MKPF-BKTXT'
it_header-bktxt.
* Movement Type
PERFORM bdc_field USING 'RM07M-BWARTWA'
it_header-bwartwa.
* Plant
PERFORM bdc_field USING 'RM07M-WERKS'
it_header-werks.
* Storage Location
PERFORM bdc_field USING 'RM07M-LGORT'
it_header-lgort.
* Special Stock
PERFORM bdc_field USING 'RM07M-SOBKZ'
it_header-sobkz.
PERFORM bdc_field USING 'XFULL'
'X'.
PERFORM bdc_field USING 'RM07M-WVERS2'
'X'.
LOOP AT it_item WHERE hcount = it_header-hcount.
v_cnt = sy-tabix + 1.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0410'.
* Set the OK Code according to the number of records
CLEAR it_item_nex.
READ TABLE it_item INDEX v_cnt INTO it_item_nex.
IF sy-subrc = 0.
IF it_item_nex-hcount = it_header-hcount.
* If not the last record then OK Code has to be to go to New Item
PERFORM bdc_field USING 'BDC_OKCODE'
'=NPE'.
ELSE.
* If last record of the document then OK Code has to be to SAVE
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
ENDIF.
ELSE.
* If last record then OK Code has to be to SAVE
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
ENDIF.
* Material
PERFORM bdc_field USING 'MSEG-MATNR'
it_item-matnr.
* Quantity
PERFORM bdc_field USING 'MSEG-ERFMG'
it_item-erfmg.
* Unit Of Entry
PERFORM bdc_field USING 'MSEG-ERFME'
it_item-ERFME.
* Batch
PERFORM bdc_field USING 'MSEG-CHARG'
it_item-charg.
* IF it_header-sobkz = ' '.
* Amount
PERFORM bdc_field USING 'MSEG-EXBWR'
it_item-exbwr.
* ENDIF.
PERFORM bdc_field USING 'MSEG-UMMAT'
it_item-UMMAT.
PERFORM bdc_field USING 'MSEG-UMWRK'
it_header-WERKS.
PERFORM bdc_field USING 'MSEG-UMLGO'
it_item-UMLGO.
PERFORM bdc_field USING 'MSEG-UMCHA'
it_item-UMCHA.
CASE it_header-sobkz.
WHEN 'O'.
* Vendor
PERFORM bdc_field USING 'MSEG-LIFNR'
it_item-lifnr.
WHEN 'W'.
* Customer
PERFORM bdc_field USING 'MSEGK-KUNNR'
it_item-kunnr.
ENDCASE.
PERFORM bdc_dynpro USING 'SAPLKACB'
'0002'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
ENDLOOP.
CALL TRANSACTION 'MB1B' USING bdcdata MODE zmode UPDATE 'S'.
IF sy-subrc <> 0.
CALL FUNCTION 'TB_MESSAGE_BUILD_TEXT'
EXPORTING
langu = sy-langu
msgid = sy-msgid
msgno = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
text = v_txt.
MOVE-CORRESPONDING it_header TO it_err.
v_error = v_error + 1.
it_err-error = v_txt.
APPEND it_err.
CLEAR it_err.
CLEAR v_txt.
LOOP AT it_item WHERE hcount = it_item-hcount.
MOVE-CORRESPONDING it_item TO it_err.
APPEND it_err.
CLEAR: it_err.
ENDLOOP.
ELSE.
v_correct = v_correct + 1.
ENDIF.
CLEAR: bdcdata.
REFRESH: bdcdata.
ENDLOOP.
ENDFORM. "
*&---------------------------------------------------------------------*
*& Form WRITE_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_status .
v_total = v_error + v_correct.
SKIP 2.
WRITE:/ '-----------Status Log-----------' COLOR 6.
SKIP 2.
WRITE:/ 'Total Number of Records :', v_total COLOR 1.
WRITE:/ 'Total Updated Records :', v_correct COLOR 3.
WRITE:/ 'Total Not Updated Records :', v_error COLOR 6.
IF NOT it_err[] IS INITIAL.
WRITE:/ 'Error Log file', p_ofile, 'saved.'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_ofile
filetype = 'ASC'
append = 'X'
write_field_separator = 'X'
TABLES
data_tab = it_err.
IF sy-subrc <> 0.
WRITE:/ 'Error creating log file'.
ENDIF.
ENDIF.
ENDFORM. " WRITE_STATUS
USE EXCEL FILE TO UPLOAD DATA.
HEADER MARKED WITH H
ITEM MARKED WITH I
IN THE VERY FIRST COLUMN OF EXCEL
TYPE-POOLS: truxs.
DATA: zmode TYPE c.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : mode_a RADIOBUTTON GROUP r1,
mode_n RADIOBUTTON GROUP r1.
PARAMETERS: p_ifile TYPE rlgrap-filename.
PARAMETERS: p_ofile TYPE string.
SELECTION-SCREEN END OF BLOCK b1.
INCLUDE zbdcrec.
DATA: BEGIN OF it_src_upload OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
sobkz(1) TYPE c, " Special Stock
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, "Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
lifnr(10) TYPE c, " Vendor
kunnr(10) TYPE c, " Customer
UMMAT(18) TYPE C, "MATERIAL (RECEIVINF/ISSUING)
UMLGO(4) TYPE C, "ISSUING/RECEIVING STOR LOC
END OF it_src_upload.
DATA: BEGIN OF it_header OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
hcount(5) TYPE c, " Counter
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
sobkz(1) TYPE c, " Special Stock
END OF it_header.
DATA: BEGIN OF it_item OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
hcount(5) TYPE c, " Counter
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, " Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
lifnr(10) TYPE c, " Vendor
kunnr(10) TYPE c, " Customer
UMMAT(18) TYPE C, "MATERIAL (RECEIVINF/ISSUING)
UMLGO(4) TYPE C, "ISSUING/RECEIVING STOR LOC
UMCHA(10) TYPE C, " issueing receiving valuation
END OF it_item.
DATA: it_item_nex LIKE it_item.
DATA: BEGIN OF it_err OCCURS 0,
rectyp(1) TYPE c, " Header / Item Indicator
bldat(10) TYPE c, " Document Date
budat(10) TYPE c, " Posting Date
bktxt(25) TYPE c, " Doc. Header Text
bwartwa(3) TYPE c, " Movement Type
werks(4) TYPE c, " Plant
lgort(4) TYPE c, " Storage Location
matnr(18) TYPE c, " Material
erfmg(13) TYPE c, " Quantity
ERFME(3) TYPE c, " Unit of Entry
charg(10) TYPE c, " Batch
exbwr(13) TYPE c, " Amount
error(255) TYPE c, " Error Message Text
END OF it_err.
DATA: it_raw TYPE truxs_t_text_data.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: v_total TYPE i.
DATA: v_txt TYPE char80.
DATA: v_correct TYPE i.
DATA: v_error TYPE i.
DATA: v_cnt TYPE i.
CONSTANTS: c_headertype(1) TYPE c VALUE 'H',
c_itemtype(1) TYPE c VALUE 'I'.
*---------------------------------------------------------------------*
*-- At Selection Screen
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
IMPORTING
filename = p_ifile
EXCEPTIONS
OTHERS = 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ofile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
IMPORTING
filename = p_ofile
EXCEPTIONS
OTHERS = 1.
START-OF-SELECTION.
IF p_ofile IS INITIAL.
CONCATENATE p_ifile '_err' sy-datum sy-uzeit '.xls' INTO p_ofile.
ENDIF.
PERFORM data_upload.
IF mode_a EQ 'X'.
zmode = 'A'.
ELSEIF mode_n EQ 'X'.
zmode = 'N'.
ENDIF.
PERFORM filter_data.
PERFORM populate_data.
PERFORM write_status.
*&---------------------------------------------------------------------*
*& Form DATA_UPLOAD
*&---------------------------------------------------------------------*
FORM data_upload.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_ifile
TABLES
i_tab_converted_data = it_src_upload
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Error while uploading file' TYPE 'E'.
ENDIF.
ENDFORM. " DATA_UPLOAD
*&---------------------------------------------------------------------*
*& Form FILTER_DATA
*&---------------------------------------------------------------------*
FORM filter_data.
* Filtering the Header and Item data
DATA: c_hcount TYPE i.
*BREAK-POINT.
LOOP AT it_src_upload.
TRANSLATE it_src_upload TO UPPER CASE.
MODIFY it_src_upload.
IF it_src_upload-rectyp = c_headertype.
c_hcount = c_hcount + 1.
it_header-hcount = c_hcount.
MOVE-CORRESPONDING it_src_upload TO it_header.
APPEND it_header.
ELSEIF it_src_upload-rectyp = c_itemtype .
it_item-hcount = c_hcount.
MOVE-CORRESPONDING it_src_upload TO it_item.
APPEND it_item.
ENDIF.
ENDLOOP.
ENDFORM. "filter_data
*&---------------------------------------------------------------------*
*& Form POPULATE_DATA
*&---------------------------------------------------------------------*
FORM populate_data.
*BREAK-POINT.
LOOP AT it_header.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0400'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NPE'.
* Document Date
PERFORM bdc_field USING 'MKPF-BLDAT'
it_header-bldat.
* Posting Date
PERFORM bdc_field USING 'MKPF-BUDAT'
it_header-budat.
* Document Header Text
PERFORM bdc_field USING 'MKPF-BKTXT'
it_header-bktxt.
* Movement Type
PERFORM bdc_field USING 'RM07M-BWARTWA'
it_header-bwartwa.
* Plant
PERFORM bdc_field USING 'RM07M-WERKS'
it_header-werks.
* Storage Location
PERFORM bdc_field USING 'RM07M-LGORT'
it_header-lgort.
* Special Stock
PERFORM bdc_field USING 'RM07M-SOBKZ'
it_header-sobkz.
PERFORM bdc_field USING 'XFULL'
'X'.
PERFORM bdc_field USING 'RM07M-WVERS2'
'X'.
LOOP AT it_item WHERE hcount = it_header-hcount.
v_cnt = sy-tabix + 1.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0410'.
* Set the OK Code according to the number of records
CLEAR it_item_nex.
READ TABLE it_item INDEX v_cnt INTO it_item_nex.
IF sy-subrc = 0.
IF it_item_nex-hcount = it_header-hcount.
* If not the last record then OK Code has to be to go to New Item
PERFORM bdc_field USING 'BDC_OKCODE'
'=NPE'.
ELSE.
* If last record of the document then OK Code has to be to SAVE
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
ENDIF.
ELSE.
* If last record then OK Code has to be to SAVE
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
ENDIF.
* Material
PERFORM bdc_field USING 'MSEG-MATNR'
it_item-matnr.
* Quantity
PERFORM bdc_field USING 'MSEG-ERFMG'
it_item-erfmg.
* Unit Of Entry
PERFORM bdc_field USING 'MSEG-ERFME'
it_item-ERFME.
* Batch
PERFORM bdc_field USING 'MSEG-CHARG'
it_item-charg.
* IF it_header-sobkz = ' '.
* Amount
PERFORM bdc_field USING 'MSEG-EXBWR'
it_item-exbwr.
* ENDIF.
PERFORM bdc_field USING 'MSEG-UMMAT'
it_item-UMMAT.
PERFORM bdc_field USING 'MSEG-UMWRK'
it_header-WERKS.
PERFORM bdc_field USING 'MSEG-UMLGO'
it_item-UMLGO.
PERFORM bdc_field USING 'MSEG-UMCHA'
it_item-UMCHA.
CASE it_header-sobkz.
WHEN 'O'.
* Vendor
PERFORM bdc_field USING 'MSEG-LIFNR'
it_item-lifnr.
WHEN 'W'.
* Customer
PERFORM bdc_field USING 'MSEGK-KUNNR'
it_item-kunnr.
ENDCASE.
PERFORM bdc_dynpro USING 'SAPLKACB'
'0002'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
ENDLOOP.
CALL TRANSACTION 'MB1B' USING bdcdata MODE zmode UPDATE 'S'.
IF sy-subrc <> 0.
CALL FUNCTION 'TB_MESSAGE_BUILD_TEXT'
EXPORTING
langu = sy-langu
msgid = sy-msgid
msgno = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
text = v_txt.
MOVE-CORRESPONDING it_header TO it_err.
v_error = v_error + 1.
it_err-error = v_txt.
APPEND it_err.
CLEAR it_err.
CLEAR v_txt.
LOOP AT it_item WHERE hcount = it_item-hcount.
MOVE-CORRESPONDING it_item TO it_err.
APPEND it_err.
CLEAR: it_err.
ENDLOOP.
ELSE.
v_correct = v_correct + 1.
ENDIF.
CLEAR: bdcdata.
REFRESH: bdcdata.
ENDLOOP.
ENDFORM. "
*&---------------------------------------------------------------------*
*& Form WRITE_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_status .
v_total = v_error + v_correct.
SKIP 2.
WRITE:/ '-----------Status Log-----------' COLOR 6.
SKIP 2.
WRITE:/ 'Total Number of Records :', v_total COLOR 1.
WRITE:/ 'Total Updated Records :', v_correct COLOR 3.
WRITE:/ 'Total Not Updated Records :', v_error COLOR 6.
IF NOT it_err[] IS INITIAL.
WRITE:/ 'Error Log file', p_ofile, 'saved.'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_ofile
filetype = 'ASC'
append = 'X'
write_field_separator = 'X'
TABLES
data_tab = it_err.
IF sy-subrc <> 0.
WRITE:/ 'Error creating log file'.
ENDIF.
ENDIF.
ENDFORM. " WRITE_STATUS
USE EXCEL FILE TO UPLOAD DATA.
HEADER MARKED WITH H
ITEM MARKED WITH I
IN THE VERY FIRST COLUMN OF EXCEL
CAN U GIVE TEMPLATE WHICH U USED FOR THIS ON
ReplyDeletekhushprasad21@gmail.com