You are on page 1of 5

ERPGenie.

COM ABAP Tips and Tricks Database

Batch Input: Updating Material Master via BDC


Contributed by Anon.
Monday, 19 March 2007

This skeleton displays how to:


- Determine all selection views available for user in the given transaction (MM01, MM02);
- Prepare BDC to access required view;
report z.

constants: c_rows(2) type n value '18', " rows in view selection


" window
c_linen(20) type c value 'MSICHTAUSW-KZSEL( )'.
data: w_tcode like sy-tcode, " Transaction code
w_tkstatus like t130m-pstat, " SAP Transaction status
w_anzgstatus like t130m-pstat, " Summary Display status
w_t130m like t130m, " Transaction control: mat.master
w_bilds like t133a-bilds, " Screen sequence
w_dytxt like t133b-dytxt, " View description
w_linex like sy-tabix, " View # in table
w_line like sy-tabix, " View # on selection screen
w_num like sy-tabix,
w_matnr like mara-matnr, " Material
w_mtart like mara-mtart, " Material type
w_vpsta like mara-vpsta, " Material maintenance status
w_pstat like t134-pstat. " Material type maintenance status
data: begin of it_views occurs 30.
include structure mbildtab. " Selection Views
data: end of it_views.
data: w_alnum(20) type c, " TC line
f_pgdn. " PgDn Flag
data: begin of i_bdc occurs 0.
include structure bdcdata.
data: end of i_bdc.

parameters:
material like mara-matnr obligatory memory id mat,
view like t133a-auswg obligatory default '21',
mm01 radiobutton group radi,
mm02 radiobutton group radi,
show_bdc as checkbox,
showview as checkbox.

*******************
start-of-selection.
*******************
if not mm01 is initial.
w_tcode = 'MM01'. "Create view
else.
w_tcode = 'MM02'. "Change view
endif.

* 1. Get Transaction Status and Transaction Screen Reference


call function 'MATERIAL_INIT'
exporting
tcode = w_tcode
kz_berprf = 'X'
importing
it130m = w_t130m
tkstatus = w_tkstatus
exceptions
no_authority =1
wrong_call =2
kstatus_empty =3
tkstatus_empty =4
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 6 January, 2011, 21:20
ERPGenie.COM ABAP Tips and Tricks Database

aktyp_tcode_mismatch =5
tcode_not_found =6
material_article_mismatch =7
others = 8.
if sy-subrc <> 0.
write: 'MATERIAL_INIT error code =', sy-subrc.
exit.
endif.

* 2. Get Material type and maintenance statuses


select single matnr mtart vpsta from mara
into (w_matnr, w_mtart, w_vpsta)
where matnr = material.
if sy-subrc <> 0.
write: 'Material', material, 'not in material master'.
exit.
endif.
select single pstat from t134 into w_pstat
where mtart = w_mtart.
if sy-subrc <> 0.
write: 'Material type', w_mtart, 'not found'.
endif.

* 3. Get Screen Sequence for Tcode/Material


call function 'BILDSEQUENZ_IDENTIFY'
exporting
materialart = w_mtart
tcode_ref = w_t130m-trref
importing
bildsequenz = w_bilds
exceptions
wrong_call =1
not_found =2
others = 3.
if sy-subrc <> 0.
write: 'BILDSEQUENZ_IDENTIFY error code =', sy-subrc.
exit.
endif.

* 4. Get Summary status (Transaction+Material+Material Type)


call function 'ANZGSTATUS_SETZEN'
exporting
aktyp = w_t130m-aktyp
marastatus = w_vpsta
t134status = w_pstat
tkstatus = w_tkstatus
importing
anzgstatus = w_anzgstatus
exceptions
anzgstatus_empty = 1
wrong_call =2
others = 3.
if sy-subrc <> 0.
write: 'ANZGSTATUS_SETZEN error code =', sy-subrc.
exit.
endif.

* 5. Get all selection views:


call function 'SELECTION_VIEWS_FIND'
exporting
bildsequenz = w_bilds
pflegestatus = w_anzgstatus
tables
bildtab = it_views
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 6 January, 2011, 21:20
ERPGenie.COM ABAP Tips and Tricks Database

exceptions
call_wrong =1
empty_selection =2
others = 3.
if sy-subrc <> 0.
write: 'SELECTION_VIEWS_FIND error code =', sy-subrc.
exit.
endif.

* 5. Get view #:
read table it_views with key auswg = view.
if sy-subrc = 0.
w_linex = sy-tabix.
else.
write: 'View', view, 'not found'.
exit.
endif.

* 6. Prepare BDC:
if w_linex gt c_rows.
w_line = w_linex - c_rows.
f_pgdn = 'X'.
endif.
w_alnum = c_linen.
w_alnum+17(2) = w_line.

if not mm01 is initial.


perform bdc_mm01.
else.
perform bdc_mm02.
endif.

*******************
end-of-selection.
*******************
select single dytxt into w_dytxt from t133b
where spras = sy-langu
and bilds = w_bilds
and auswg = view.
if sy-subrc <> 0.
clear w_dytxt.
endif.
describe table it_views lines w_num.
write: / 'Screen sequence =', w_bilds,
/ 'Selection view', view, w_dytxt,
/ 'View Number = ', w_linex,
/ 'Selection views:', w_num.
if not showview is initial.
write: / '********* Table of views: *********'.
loop at it_views.
write / it_views.
endloop.
endif.
if not show_bdc is initial.
write: / '********* Table of BDC: *********'.
loop at i_bdc.
write / i_bdc.
endloop.
endif.

*&---------------------------------------------------------------------*
*& Form bdc_mm02
*&---------------------------------------------------------------------*
form bdc_mm02.
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 6 January, 2011, 21:20
ERPGenie.COM ABAP Tips and Tricks Database

* for example, Accounting View 1 (21)

perform dynpro using:


*goto MM02 - Change Mateial (Initial screen)
'X' 'SAPLMGMM' '0060',
' ' 'BDC_CURSOR' 'RMMG1-MATNR',
' ' 'RMMG1-MATNR' w_matnr,
*goto Select View(s) screen
' ' 'BDC_OKCODE' '=AUSW'.

if f_pgdn = 'X'.
perform dynpro using:
*goto Select View(s) screen
'X' 'SAPLMGMM' '0070',
*scroll down
' ' 'BDC_OKCODE' '=P+'.
endif.

perform dynpro using:


*goto Select View(s) screen
'X' 'SAPLMGMM' '0070',
' ' w_alnum 'X',
*Select Accounting1 view
' ' 'BDC_OKCODE' '=ENTR'.

perform dynpro using:


*goto Select Plant screen
'X' 'SAPLMGMM' '0080',
' ' 'BDC_CURSOR' 'RMMG1-WERKS',
' ' 'RMMG1-WERKS' 'P123', "for example
' ' 'BDC_OKCODE' '=ENTR'.

perform dynpro using:


*goto Accounting1 view
'X' 'SAPLMGMM' '4000',
*
* change data fields here ....
*
*save
' ' 'BDC_OKCODE' 'BU'.

endform. " bdc_mm02

*&---------------------------------------------------------------------*
*& Form bdc_mm01
*&---------------------------------------------------------------------*
form bdc_mm01.
* for example, Accounting View 1 (21)

perform dynpro using:


*goto MM01 - Create Mateial (Initial screen)
'X' 'SAPLMGMM' '0060',
' ' 'RMMG1-MATNR' w_matnr,
' ' 'RMMG1-MBRSH' 'H', "for example
' ' 'RMMG1-MTART' w_mtart,
*goto Select View(s) screen
' ' 'BDC_OKCODE' '=AUSW'.

* Selection of views
perform dynpro using:
'X' 'SAPLMGMM' '70',
' ' 'BDC_OKCODE' '=RESA', "Deselect all
'X' 'SAPLMGMM' '70'. "continue selection screen

if f_pgdn = 'X'.
http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 6 January, 2011, 21:20
ERPGenie.COM ABAP Tips and Tricks Database

perform dynpro using:


' ' 'BDC_OKCODE' '=P+', "Page select screen forward
'X' 'SAPLMGMM' '70'. "continue selection screen
endif.
perform dynpro using:
' ' w_alnum 'X', "Accounting 1
' ' 'USRM1-SISEL' 'X', "Create Views
' ' 'BDC_OKCODE' '=ENTR'.

perform dynpro using:


*goto Select Plant screen
'X' 'SAPLMGMM' '080',
' ' 'RMMG1-WERKS' 'P123', "for example
' ' 'BDC_OKCODE' '=ENTR'.

perform dynpro using:


*goto Accounting1 view
'X' 'SAPLMGMM' '4000',
*
* populate data fields here ....
*
*Save
' ' 'BDC_OKCODE' '=BU'.

endform. " bdc_mm01

*---------------------------------------------------------------------*
* FORM DYNPRO *
*---------------------------------------------------------------------*
* Fills BDC data table *
*---------------------------------------------------------------------*
* --> PI_DYNBEGIN Screen start flag in *
* --> PI_NAME Field name in *
* --> PI_VALUE Field value in *
*---------------------------------------------------------------------*
form dynpro using pi_dynbegin
pi_name
pi_value.

clear i_bdc.
if pi_dynbegin = 'X'.
move: pi_name to i_bdc-program,
pi_value to i_bdc-dynpro,
'X' to i_bdc-dynbegin.
else.
move: pi_name to i_bdc-fnam,
pi_value to i_bdc-fval.
endif. "pi_dynbegin
append i_bdc.
endform. "dynpro

http://erpgenie.com/abaptips Powered by Joomla for ERPGenie.COM! Generated: 6 January, 2011, 21:20

You might also like