03-14-2008 5:34 AM
Hi,
Can anybody please send me the BDC CODE for MB01 Application(for Multiple Line items).
Very urgent.
Thanks And Regards,
Ajay
03-14-2008 6:03 AM
Instead of BDC you can use following BAPI.
see the following ex:
BAPI TO Upload Inventory Data
*
GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
02 - MB31 - Goods Receipts for Prod Order
03 - MB1A - Goods Issue
04 - MB1B - Transfer Posting
05 - MB1C - Enter Other Goods Receipt
06 - MB11
*
Domain: KZBEW - Movement Indicator
Goods movement w/o reference
B - Goods movement for purchase order
F - Goods movement for production order
L - Goods movement for delivery note
K - Goods movement for kanban requirement (WM - internal only)
O - Subsequent adjustment of "material-provided" consumption
W - Subsequent adjustment of proportion/product unit material
*
LOOP AT I_TAB.
count = sy-tabix.
SELECT SINGLE * FROM ZMM_GI_WIP
WHERE GI_NO = I_TAB-DOCNO AND
GI_DATE = I_TAB-DOCDT.
IF SY-SUBRC = 0.
I_TAB-FLAG = 'C'.
modify i_tab index count.
CONCATENATE 'ERROR GI : ' I_TAB-DOCNO
' WAS ALREADY UPLOADED' INTO I_MSG1.
APPEND I_MSG1.
CLEAR I_TAB-FLAG.
CONTINUE.
ELSE.
CONCATENATE I_TAB-DOCDT+4(2)
I_TAB-DOCDT+6(2)
I_TAB-DOCDT+2(2)
I_TAB-DOCDT+0(2)
INTO G_DATE.
gmhead-pstng_date = G_DATE.
gmhead-doc_date = sy-datum.
gmhead-pr_uname = sy-uname.
"01 - MB01 - Goods Receipts for Purchase Order
gmcode-gm_code = '03'.
refresh itab.
clear itab.
SORT I_MAIN BY SOL_DOCNO.
LOOP AT I_MAIN WHERE DOCNO = I_TAB-DOCNO.
IF I_MAIN-GI_TXN_TYPE = 'MGI'.
itab-move_type = '291'.
ENDIF.
itab-mvt_ind = ' '.
itab-plant = I_MAIN-WERKS.
itab-material = I_MAIN-MATNR.
itab-entry_qnt = I_MAIN-ERFMG.
itab-stge_loc = I_MAIN-LGOBE.
itab-ENTRY_UOM = I_MAIN-ERFME.
IF I_MAIN-WERKS = 'MR'.
itab-TR_PART_BA = '11'.
ELSEIF I_MAIN-WERKS = 'MR'.
itab-TR_PART_BA = '12'.
ENDIF.
append itab.
ENDLOOP.
if not itab[] is initial.
call function 'BAPI_GOODSMVT_CREATE'
exporting
goodsmvt_header = gmhead
goodsmvt_code = gmcode
* TESTRUN = ' '
IMPORTING
goodsmvt_headret = mthead
* MATERIALDOCUMENT =
MATDOCUMENTYEAR =
tables
goodsmvt_item = itab
GOODSMVT_SERIALNUMBER =
return = errmsg.
clear errflag.
loop at errmsg.
if errmsg-type eq 'E'.
write:/'Error in function', errmsg-message.
errflag = 'X'.
else.
write:/ errmsg-message.
endif.
move errmsg-message to i_msg1.
append i_msg1.
endloop.
if errflag is initial.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
RETURN =
.
commit work and wait.
if sy-subrc ne 0.
write:/ 'Error in updating'.
exit.
endif.
endif.
ENDIF.
wait up to 20 seconds.
ENDLOOP.
03-14-2008 5:56 AM
FORM bdc .
date1 = sy-datum.
DATA : date2(10) .
DATA : r_plant LIKE rm07m-werks.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = date1
IMPORTING
date_external = date2
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
LOOP AT itab.
p_vbeln = itab-vbeln.
READ TABLE it_likp WITH KEY vbeln = itab-vbeln.
p_exnum = itab-exnum.
p_exdate = itab-zdate.
p_barea = itab-trdest.
s_werks = itab-werks .
r_plant = it_likp-kunnr.
CALL FUNCTION 'ZHZLMM_DELIVERY_STLOC' "To find the Storage Location.
EXPORTING
i_vbeln = itab-vbeln
IMPORTING
o_lgort = so_loca.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMM07M' '0200'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RM07M-LGORT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NFBL'.
PERFORM bdc_field USING 'MKPF-BLDAT' " Document Date
date2.
PERFORM bdc_field USING 'MKPF-BUDAT' " Posting Date
date2.
PERFORM bdc_field USING 'RM07M-XABLN' " GR/GI Slip No. (Supplying plant WB slip No.)
itab-slip_no.
PERFORM bdc_field USING 'RM07M-BWARTWE' " Movement type
'101'.
PERFORM bdc_field USING 'RM07M-WERKS' " Plant (Receiving plant)
r_plant.
PERFORM bdc_field USING 'RM07M-LGORT' " Storage Location
so_loca.
PERFORM bdc_field USING 'XFULL'
'X'.
PERFORM bdc_field USING 'RM07M-WVERS3'
'X'.
PERFORM bdc_dynpro USING 'SAPMM07M' '1201'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RM07M-VBELN'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SP'.
PERFORM bdc_field USING 'RM07M-BWARTWE'
'101'.
PERFORM bdc_field USING 'RM07M-LGORT'
so_loca.
PERFORM bdc_field USING 'RM07M-VBELN'
itab-vbeln. " Delivery No. to get PO automatically
PERFORM bdc_field USING 'RM07M-WERKS(01)' " PO Plant1 (Receiving plant )
r_plant.
PERFORM bdc_field USING 'RM07M-WERKS(02)' " PO Plant2 (R.P.)
r_plant.
PERFORM bdc_field USING 'RM07M-WERKS(03)' " PO Plant3 (R.P.)
r_plant.
PERFORM bdc_field USING 'RM07M-WERKS(04)' " PO Plant4 (R.P.)
r_plant.
PERFORM bdc_dynpro USING 'SAPLJ1I4' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
PERFORM bdc_field USING 'BDC_CURSOR'
'J_1IEXCHDR-EXGRP'.
PERFORM bdc_field USING 'J_1IEXCHDR-EXGRP'
'20'.
PERFORM bdc_field USING 'J_1IPART1-REGTYP'
'A'.
PERFORM bdc_field USING 'J_1IEXCHDR-EXNUM' " Excise Number
itab-exnum.
PERFORM bdc_field USING 'J_1IEXCHDR-EXYEAR'
s_fyear.
PERFORM bdc_dynpro USING 'SAPMM07M' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSEG-SGTXT'. " text
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
MOVE itab-zdwt TO zdwt1.
PERFORM bdc_field USING 'MSEG-ERFMG' " Dry weight
zdwt1.
PERFORM bdc_field USING 'MSEG-ERFME' " No or To beside Qty.
'TO'.
PERFORM bdc_field USING 'MSEG-LGORT' " Storage location
so_loca.
MOVE itab-znwt TO znwt1.
PERFORM bdc_field USING 'MSEG-LSMNG' " nt weight
znwt1.
READ TABLE it_wb2 WITH KEY vbeln = itab-vbeln.
MOVE it_wb2-znwt TO znwt2 .
CONCATENATE it_wb2-truck_no it_wb2-slip_no INTO a_sgtxt SEPARATED BY '-'.
PERFORM bdc_field USING 'MSEG-ABLAD' " Unloading Point user fill nt weight of Receiving Plant
itab-znwt.
znwt2 .
*" '12345'.
*********************
PERFORM bdc_field USING 'MSEG-WEANZ' " No. of GR slips
'1'.
PERFORM bdc_field USING 'MSEG-SGTXT'
a_sgtxt . " text = truck no at R.plant + R.Plant slip no.
PERFORM bdc_dynpro USING 'SAPMM07M' '0221'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MKPF-BUDAT'. " posting date
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
CALL TRANSACTION 'MB01' USING bdcdata MODE 'E' UPDATE 'A'.
GET PARAMETER ID 'MBN' FIELD addn3.
IF addn3 space.
MOVE itab-vbeln TO itab_2-vbeln.
MOVE addn3 TO itab_2-mblnr.
APPEND itab_2.
ENDIF.
*-----Update supplying plant addn_fld3 field with grn number
UPDATE zhzlagucha_wb SET addn_fld3 = addn3
WHERE vbeln = itab-vbeln AND
werks = itab-werks AND
exyear = s_fyear.
*-----Update receiving plant addn_fld3 field with grn number
UPDATE zhzlagucha_wb SET addn_fld3 = addn3
WHERE vbeln = itab-vbeln AND
werks = it_wb2-werks.
SET PARAMETER ID 'ZAN1' FIELD p_exnum.
SET PARAMETER ID 'ZAN2' FIELD p_exdate.
SET PARAMETER ID 'ZAN3' FIELD p_barea.
MOVE itab-werks TO s_werks.
MOVE it_wb2-werks TO p_werks.
SET PARAMETER ID 'ZAD1' FIELD p_werks.
SET PARAMETER ID 'ZAD2' FIELD s_werks.
SET PARAMETER ID 'ZAD3' FIELD p_date.
SET PARAMETER ID 'ZAD4' FIELD so_loca.
SUBMIT zbdc_j1iex VIA SELECTION-SCREEN AND RETURN.
SUBMIT zhzlmm_bdc_j1iex_001 VIA SELECTION-SCREEN AND RETURN.
IF sy-subrc = 0.
MOVE addn3 TO addn3_mblnr.
CALL FUNCTION 'ZHZLMM_GRN_SERIAL_NO'
EXPORTING
i_mblnr = addn3_mblnr
IMPORTING
o_serialno = serialno_value.
ENDIF.
MOVE serialno_value TO itab_2-exnum.
MODIFY itab_2 TRANSPORTING exnum WHERE mblnr = addn3.
CLEAR : itab, it_likp , it_wb2 , p_exnum, p_exdate, p_barea, p_werks, s_werks, r_plant, itab_2.
CLEAR : addn3,so_loca.
ENDLOOP.
----------------------------------------------------------------------
Start new screen *
----------------------------------------------------------------------
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
----------------------------------------------------------------------
Insert field *
----------------------------------------------------------------------
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. " BDC
03-14-2008 6:03 AM
Instead of BDC you can use following BAPI.
see the following ex:
BAPI TO Upload Inventory Data
*
GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
02 - MB31 - Goods Receipts for Prod Order
03 - MB1A - Goods Issue
04 - MB1B - Transfer Posting
05 - MB1C - Enter Other Goods Receipt
06 - MB11
*
Domain: KZBEW - Movement Indicator
Goods movement w/o reference
B - Goods movement for purchase order
F - Goods movement for production order
L - Goods movement for delivery note
K - Goods movement for kanban requirement (WM - internal only)
O - Subsequent adjustment of "material-provided" consumption
W - Subsequent adjustment of proportion/product unit material
*
LOOP AT I_TAB.
count = sy-tabix.
SELECT SINGLE * FROM ZMM_GI_WIP
WHERE GI_NO = I_TAB-DOCNO AND
GI_DATE = I_TAB-DOCDT.
IF SY-SUBRC = 0.
I_TAB-FLAG = 'C'.
modify i_tab index count.
CONCATENATE 'ERROR GI : ' I_TAB-DOCNO
' WAS ALREADY UPLOADED' INTO I_MSG1.
APPEND I_MSG1.
CLEAR I_TAB-FLAG.
CONTINUE.
ELSE.
CONCATENATE I_TAB-DOCDT+4(2)
I_TAB-DOCDT+6(2)
I_TAB-DOCDT+2(2)
I_TAB-DOCDT+0(2)
INTO G_DATE.
gmhead-pstng_date = G_DATE.
gmhead-doc_date = sy-datum.
gmhead-pr_uname = sy-uname.
"01 - MB01 - Goods Receipts for Purchase Order
gmcode-gm_code = '03'.
refresh itab.
clear itab.
SORT I_MAIN BY SOL_DOCNO.
LOOP AT I_MAIN WHERE DOCNO = I_TAB-DOCNO.
IF I_MAIN-GI_TXN_TYPE = 'MGI'.
itab-move_type = '291'.
ENDIF.
itab-mvt_ind = ' '.
itab-plant = I_MAIN-WERKS.
itab-material = I_MAIN-MATNR.
itab-entry_qnt = I_MAIN-ERFMG.
itab-stge_loc = I_MAIN-LGOBE.
itab-ENTRY_UOM = I_MAIN-ERFME.
IF I_MAIN-WERKS = 'MR'.
itab-TR_PART_BA = '11'.
ELSEIF I_MAIN-WERKS = 'MR'.
itab-TR_PART_BA = '12'.
ENDIF.
append itab.
ENDLOOP.
if not itab[] is initial.
call function 'BAPI_GOODSMVT_CREATE'
exporting
goodsmvt_header = gmhead
goodsmvt_code = gmcode
* TESTRUN = ' '
IMPORTING
goodsmvt_headret = mthead
* MATERIALDOCUMENT =
MATDOCUMENTYEAR =
tables
goodsmvt_item = itab
GOODSMVT_SERIALNUMBER =
return = errmsg.
clear errflag.
loop at errmsg.
if errmsg-type eq 'E'.
write:/'Error in function', errmsg-message.
errflag = 'X'.
else.
write:/ errmsg-message.
endif.
move errmsg-message to i_msg1.
append i_msg1.
endloop.
if errflag is initial.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
RETURN =
.
commit work and wait.
if sy-subrc ne 0.
write:/ 'Error in updating'.
exit.
endif.
endif.
ENDIF.
wait up to 20 seconds.
ENDLOOP.