06-15-2015 4:51 PM
Hi Experts
/h
i have developed a bdc code to generate physical document number using mi01 tcode. once iblnr is generated how to
capture iblnr , gjahr and update this values into ztable. here is my code
report ZBDCMIO1
no standard page heading line-size 255.
TABLES: RM07I,
IKPF,
ZMI01.
DATA: BEGIN OF it_final OCCURS 0,
bldat(20),
gidat(20),
werks(10),
lgort(10),
sperr(4),
xlvOca(4),
xblni(20),
head(4) TYPE c,
matnr(20),
END OF it_final.
DATA: BEGIN OF it_final1 OCCURS 0,
IBLNR TYPE IBLNR,
GJAHR TYPE GJAHR,
END OF it_final1.
data: it_bdcdata TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE,
w_file1 TYPE string,
v_ind(2) TYPE n,
it_msg TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE,
v_matnr(30) TYPE c.
PARAMETERS: filename LIKE rlgrap-filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = filename.
*include bdcrecx1.
start-of-selection.
w_file1 = filename.
*perform open_group.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = w_file1
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_final.
loop at it_final where head = 'H'.
perform bdc_dynpro using 'SAPMM07I' '0700'.
perform bdc_field using 'BDC_CURSOR'
'IKPF-SPERR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RM07I-BLDAT'
* '13.06.2008'.
it_final-bldat.
perform bdc_field using 'RM07I-GIDAT'
* '13.06.2008'.
it_final-gidat.
perform bdc_field using 'IKPF-WERKS'
* '0005'.
it_final-werks.
perform bdc_field using 'IKPF-LGORT'
* '0001'.
it_final-lgort.
perform bdc_field using 'IKPF-SPERR'
* 'X'.
it_final-sperr.
perform bdc_field using 'RM07I-XLVOCA'
* 'X'.
it_final-xlvoca.
v_ind = 01.
loop at it_final where head ne 'H'.
* v_ind = v_ind + 1.
CONCATENATE 'ISEG-MATNR' '(' V_IND ')' INTO V_MATNR.
perform bdc_dynpro using 'SAPMM07I' '0721'.
perform bdc_field using 'BDC_CURSOR'
* 'ISEG-MATNR(01)'.
V_MATNR.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using V_MATNR "'ISEG-MATNR(01)'
* 'T-AC0101'.
IT_FINAL-MATNR.
perform bdc_dynpro using 'SAPMM07I' '0721'.
perform bdc_field using 'BDC_CURSOR'
* 'ISEG-MATNR(01)'.
V_MATNR.
perform bdc_field using 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'ISEG-MATNR(01)'
* 'T-AC0201'.
**perform bdc_dynpro using 'SAPMM07I' '0721'.
**perform bdc_field using 'BDC_CURSOR'
*** 'ISEG-MATNR(01)'.
** V_MATNR.
**perform bdc_field using 'BDC_OKCODE'
** '=POAN'.
**IF V_IND = 02.
** V_IND = 01.
** ENDIF.
ENDLOOP.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
call transaction 'MI01' using it_bdcdata mode 'A' update 'A' messages into it_msg.
*perform bdc_transaction using 'MI01'.
*perform close_group.
ENDLOOP.
*--------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR it_BDCDATA.
it_BDCDATA-PROGRAM = PROGRAM.
it_BDCDATA-DYNPRO = DYNPRO.
it_BDCDATA-DYNBEGIN = 'X'.
APPEND it_BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR it_BDCDATA.
it_BDCDATA-FNAM = FNAM.
it_BDCDATA-FVAL = FVAL.
APPEND it_BDCDATA.
* ENDIF.
ENDFORM.
/h
with warm regards
nagaraj
06-16-2015 9:21 AM
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