please find the below coding for mi01 mi04 mi20
hope it helps.
DATA: wait type BAPITA-WAIT.
TYPES: BEGIN OF ty_flatfile1,
bldat type bldat,
gidat type gidat,
werks type werks_d,
lgort type lgort_d,
matnr type matnr,
gjahr type gjahr,
zldat type IIKPF-ZLDAT,
pcount type ISEG-ERFMG,
batch type charg_d,
uom type meins,
zero type XNULL,
bstar type iseg-bstar,
END OF ty_flatfile1.
DATA: TA_FLATFILE1 type TABLE OF ty_flatfile1,
WA_FLATFILE1 type ty_flatfile1.
***DECLARATION OF BDC *******
DATA: ta_bdcdata TYPE TABLE OF bdcdata,
wa_bdcdata type bdcdata.
data: ta_bdcmsgcoll type TABLE OF bdcmsgcoll,
wa_bdcmsgcoll type bdcmsgcoll.
data: ta_bdcmsgcoll1 type TABLE OF bdcmsgcoll,
wa_bdcmsgcoll1 type bdcmsgcoll.
***ERROR HANDLING***
DATA: ERRTEXT TYPE STRING,
SUCCTEXT TYPE STRING.
TYPES: BEGIN OF ty_text,
succ type string,
END OF ty_text.
DATA: ta_text TYPE TABLE OF ty_text,
wa_text type ty_text.
***declaration for excel conversion***
DATA: TA_EXCEL TYPE TABLE OF ALSMEX_TABLINE,
WA_EXCEL TYPE ALSMEX_TABLINE.
***other declaration***
FIELD-SYMBOLS <fs> type any.
data: vf_index type i,
V_sear type string.
DATA : l_start_col TYPE i VALUE 1,
l_start_row TYPE i VALUE 2,
l_end_col TYPE i VALUE 256,
l_end_row TYPE i VALUE 65536.
data: ITEMS TYPE TABLE OF BAPI_PHYSINV_COUNT_ITEMS WITH HEADER LINE,
bapiRETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
bapiRET TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
items1 TYPE TABLE OF BAPI_PHYSINV_POST_ITEMS WITH HEADER LINE.
* HEAD TYPE BAPI_PHYSINV_CREATE_HEAD,
data: iblnr TYPE IKPF-IBLNR.
data: msehi TYPE t006-msehi.
data: isocode type t006-isocode.
**********************************************************************
***design of selection screen***
**********************************************************************
***selection screen***
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN skip 3.
PARAMETERS : p_file type IBIPPARMS-PATH .
SELECTION-SCREEN skip 3.
SELECTION-SCREEN END OF BLOCK b1.
***selection screen value request***
at SELECTION-SCREEN on VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_FILE'
IMPORTING
FILE_NAME = P_FILE.
***SELECTION SCREEN VALIDATION***
AT SELECTION-SCREEN. "validation
if p_file <> ''.
V_sear = p_file.
SEARCH V_sear for '.xls'.
if sy-subrc <> 0.
message 'please provide excel file. it is not valid' type 'E'.
ENDIF.
ENDIF.
**********************************************************************
***start of selection***
**********************************************************************
START-OF-SELECTION.
perform excel_upload.
perform excel_conversion.
perform bdc_upload.
perform error_display.
*&---------------------------------------------------------------------*
*& Form EXCEL_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_UPLOAD .
CLEAR TA_EXCEL.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = l_start_col
I_BEGIN_ROW = l_start_row
I_END_COL = l_end_col
I_END_ROW = l_end_row
TABLES
INTERN = TA_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " EXCEL_UPLOAD
*&---------------------------------------------------------------------*
*& Form EXCEL_CONVERSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_CONVERSION .
IF TA_EXCEL IS NOT INITIAL.
SORT TA_EXCEL BY ROW COL.
CLEAR WA_FLATFILE1.
CLEAR WA_EXCEL.
loop at ta_excel into wa_excel.
move wa_excel-col to vf_index.
ASSIGN COMPONENT vf_index OF STRUCTURE WA_FLATFILE1 to <fs>.
if sy-subrc = 0.
move wa_excel-value to <fs>.
ENDIF.
AT END OF ROW.
APPEND WA_FLATFILE1 TO TA_FLATFILE1.
CLEAR WA_FLATFILE1.
ENDAT.
ENDLOOP.
ELSE.
MESSAGE 'NO DATA' TYPE 'E'.
ENDIF.
ENDFORM. " EXCEL_CONVERSION
*&---------------------------------------------------------------------*
*& Form BDC_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_UPLOAD .
LOOP AT TA_FLATFILE1 INTO WA_FLATFILE1.
* clear wa_flatfile1.
refresh ta_bdcmsgcoll.
clear wa_bdcmsgcoll.
refresh items.
refresh items1.
refresh bapireturn.
refresh bapiret.
clear items[].
clear items1[].
clear bapireturn[].
clear bapiret[].
perform bdc_dynpro using 'SAPMM07I' '0700'.
perform bdc_field using 'BDC_CURSOR'
'RM07I-GIDAT'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RM07I-BLDAT'
WA_FLATFILE1-BLDAT.
perform bdc_field using 'RM07I-GIDAT'
WA_FLATFILE1-GIDAT.
perform bdc_field using 'IKPF-WERKS'
WA_FLATFILE1-WERKS.
perform bdc_field using 'IKPF-LGORT'
WA_FLATFILE1-LGORT.
*perform bdc_field using 'RM07I-XLVOCA'
* .
perform bdc_dynpro using 'SAPMM07I' '0721'.
perform bdc_field using 'BDC_CURSOR'
'ISEG-MATNR(01)'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'ISEG-MATNR(01)'
WA_FLATFILE1-MATNR.
perform bdc_field using 'ISEG-BSTAR(01)'
wa_Flatfile1-bstar.
perform bdc_dynpro using 'SAPMM07I' '0721'.
perform bdc_field using 'BDC_CURSOR'
'ISEG-MATNR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
CALL TRANSACTION 'MI01' USING TA_BDCDATA MODE 'N' UPDATE 'S' MESSAGES INTO TA_BDCMSGCOLL.
wa_text-succ = wa_flatfile1-matnr.
APPEND wa_text to ta_Text.
perform bdc_error_handling.
clear wa_BDCDATA.
refresh ta_bdcdata.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_ERROR_HANDLING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_ERROR_HANDLING .
LOOP AT TA_BDCMSGCOLL INTO WA_BDCMSGCOLL WHERE MSGTYP = 'S'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = WA_BDCMSGCOLL-MSGID
LANG = WA_BDCMSGCOLL-MSGSPRA
NO = WA_BDCMSGCOLL-MSGNR
V1 = WA_BDCMSGCOLL-MSGV1
V2 = WA_BDCMSGCOLL-MSGV2
V3 = WA_BDCMSGCOLL-MSGV3
V4 = WA_BDCMSGCOLL-MSGV4
IMPORTING
MSG = wa_text-succ
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND wa_text to ta_text.
clear wa_text.
if wa_bdcmsgcoll-msgv1 <> ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = wa_flatfile1-matnr
IMPORTING
OUTPUT = wa_flatfile1-matnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = wa_flatfile1-uom
IMPORTING
OUTPUT = wa_flatfile1-uom.
.
*SELECT SINGLE msehi
* isocode FROM t006 INTO (msehi , isocode ) WHERE msehi = wa_flatfile1-uom.
items-ITEM = '001'.
items-MATERIAL = wa_flatfile1-matnr.
items-batch = wa_flatfile1-batch.
items-ENTRY_QNT = wa_flatfile1-pcount.
items-ENTRY_UOM = wa_Flatfile1-uom.
items-ZERO_COUNT = wa_flatfile1-zero.
* items-ENTRY_UOM_ISO = 'PCE'.
APPEND items.
items1-ITEM = '001'.
items1-MATERIAL = wa_flatfile1-matnr.
items1-batch = wa_flatfile1-batch.
* items-ENTRY_QNT = wa_flatfile1-pcount.
* items-ENTRY_UOM = wa_flatfile1-uom.
APPEND items1.
iblnr = wa_bdcmsgcoll-msgv1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = iblnr
IMPORTING
OUTPUT = iblnr.
SELECT SINGLE iblnr FROM ikpf INTO iblnr WHERE iblnr = iblnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = wa_flatfile1-zldat
IMPORTING
OUTPUT = wa_flatfile1-zldat.
CALL FUNCTION 'BAPI_MATPHYSINV_COUNT'
EXPORTING
PHYSINVENTORY = iblnr
FISCALYEAR = wa_flatfile1-gjahr
* PERCENTAGE_VARIANCE =
COUNT_DATE = wa_flatfile1-zldat
TABLES
ITEMS = items
RETURN = bapireturn
* SERIALNUMBERS =
* EXTENSIONIN =
.
wa_text-succ = bapireturn-message.
APPEND wa_text to ta_text.
clear bapireturn.
refresh bapireturn.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = bapiret.
wa_text-succ = bapiret-message.
APPEND wa_text to ta_text.
clear bapiret.
refresh bapiret.
CALL FUNCTION 'BAPI_MATPHYSINV_POSTDIFF'
EXPORTING
PHYSINVENTORY = iblnr
FISCALYEAR = wa_flatfile1-gjahr
PSTNG_DATE = wa_flatfile1-zldat
* THRESHOLD_VALUE =
TABLES
ITEMS = items1
RETURN = bapireturn.
wa_text-succ = bapireturn-message.
APPEND wa_text to ta_text.
clear bapireturn.
refresh bapireturn.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = bapiret.
wa_text-succ = bapiret-message.
APPEND wa_text to ta_text.
clear bapiret.
refresh bapiret.
endif.
ENDLOOP.
LOOP AT TA_BDCMSGCOLL INTO WA_BDCMSGCOLL WHERE MSGTYP = 'E'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = WA_BDCMSGCOLL-MSGID
LANG = WA_BDCMSGCOLL-MSGSPRA
NO = WA_BDCMSGCOLL-MSGNR
V1 = WA_BDCMSGCOLL-MSGV1
V2 = WA_BDCMSGCOLL-MSGV2
V3 = WA_BDCMSGCOLL-MSGV3
V4 = WA_BDCMSGCOLL-MSGV4
IMPORTING
MSG = wa_Text-succ
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND wa_text to ta_Text.
clear wa_text.
*perform error_display.
ENDLOOP.
ENDFORM. " BDC_ERROR_HANDLING
*&---------------------------------------------------------------------*
*& Form ERROR_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ERROR_DISPLAY .
if ta_text is NOT INITIAL.
loop at ta_text INTO wa_text.
write:/ wa_Text-succ.
clear wa_text.
ENDLOOP.
endif.
eNDFORM. " ERROR_DISPLAY
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0232 text
* -->P_0233 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM SCREEN.
WA_BDCDATA-PROGRAM = PROGRAM.
WA_BDCDATA-DYNPRO = SCREEN.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO TA_BDCDATA.
CLEAR WA_BDCDATA.
ENDFORM. " BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0297 text
* -->P_0298 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
WA_BDCDATA-FNAM = FNAM.
WA_BDCDATA-FVAL = FVAL.
APPEND WA_BDCDATA TO TA_BDCDATA.
CLEAR WA_BDCDATA.
ENDFORM. " BDC_FIELD