Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

BDC for MB1B

Former Member
0 Kudos

Hello,

Any one have code for BDC - MB1B. Its urgent.

Regrads,

Amey

5 REPLIES 5

Former Member
0 Kudos

Hi,

Its very easy.

Just get it recorded using SHDB transaction.

Regards

Elini.P

Former Member
0 Kudos

Hi Amey,

BDC programs would be requirement specific as there will be a lot of customization involved. Hence a BDC code of one may not be useful to other.

I can suggest you is, get a SHDB recorded and copy it to a program.

Just in case you need it, goto transaction 'SHDB', click on the icon for new recording, type in the transaction code and the recording name and start recording of MB1B.

Naveen.

former_member181962
Active Contributor
0 Kudos

Hi Amey,

It better and easier if you use the bapi BAPI_GOODSMVT_CREATE for the mb1b transaction (use GM_Code 04: Transfer posting), if there is any possibility.

Regards,

Ravi

Former Member
0 Kudos

Hello,

I know the procedure of recording. I have created the BDC also but after saving the transfer posting i am getting "Coding Block" screen. What is that????.

I want full ABAP code for BDC - Transfer Posting MB1B.

Regards,

Amey

Former Member
0 Kudos

Hi Amey,

Plz find the code... But, plz remember to remove my requirement specific changes before using it for ur purpose.

Regards,

Raj

REPORT z_sd_stock_transfer NO STANDARD PAGE HEADING

LINE-COUNT 65

LINE-SIZE 200

MESSAGE-ID zz.

&----


  • S T R U C T U R E D E C L A R A T I O N S *

&----


TYPES: BEGIN OF x_data,

locid(30),

tr_loc(30),

docid(18),

doc_dt(10),

prdid(20),

batch(10),

qty(10),

uom(3),

END OF x_data.

TYPES: BEGIN OF x_out,

locid(3),

tr_loc(3),

docid(18),

doc_dt(10),

prdid(20),

batch(10),

qty(10),

mesg(60),

END OF x_out.

TYPES: BEGIN OF x_material,

X_prdid(20), " X Prd id

matnr TYPE matnr, " Material (SAP)

END OF x_material.

TYPES: BEGIN OF x_werks,

name2(30), " Location

werks TYPE werks_ext, " Plant

END OF x_werks.

&----


  • I N T E R N A L T A B L E D E C L A R A T I O N S *

&----


DATA: it_data TYPE STANDARD TABLE OF x_data WITH HEADER LINE.

DATA: it_out TYPE STANDARD TABLE OF x_out WITH HEADER LINE.

DATA: it_matnr TYPE STANDARD TABLE OF x_material WITH HEADER LINE. " Material Info

DATA: it_werks TYPE STANDARD TABLE OF x_werks WITH HEADER LINE." Plant

DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

&----


  • V A R I A B L E S D E C L A R A T I O N S *

&----


DATA : v_correct TYPE i,

v_error TYPE i,

v_total TYPE i,

l_subrc LIKE sy-subrc.

DATA: e_group_opened.

DATA: hdate TYPE sy-datum.

&----


  • U S E R I N P U T S S C R E E N *

&----


SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.

PARAMETERS: p_sname(12) DEFAULT 'SALESORDER',

p_uname(12) DEFAULT sy-uname,

p_mode DEFAULT 'N',

p_file TYPE rlgrap-filename OBLIGATORY.

SELECTION-SCREEN END OF BLOCK blk.

&----


  • I N I T I A L I Z A T I O N *

&----


INITIALIZATION.

hdate = sy-datum - 1.

CONCATENATE 'STN' sy-datum INTO p_sname.

CONDENSE p_sname NO-GAPS.

&----


  • S E L E C T I O N S C R E E N *

&----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_file.

AT SELECTION-SCREEN ON p_mode.

CASE p_mode.

WHEN 'A' OR 'E' OR 'N'.

WHEN OTHERS.

MESSAGE e001(zz) WITH text-e01.

ENDCASE.

&----


  • S t a r t o f S e l e c t i o n *

&----


START-OF-SELECTION.

PERFORM get_upload.

IF NOT it_data[] IS INITIAL.

PERFORM get_update. " Do Stock Transfer

ELSE.

MESSAGE i001(zz) WITH text-001.

ENDIF.

&----


  • E n d o f S e l e c t i o n *

&----


END-OF-SELECTION.

IF NOT it_data[] IS INITIAL.

PERFORM close_group.

PERFORM get_write.

ENDIF.

&----


*& Form get_file

&----


  • Get File name

----


FORM get_file .

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

EXPORTING

program_name = syst-repid

mask = '*'

CHANGING

file_name = p_file

EXCEPTIONS

mask_too_long = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " get_file

&----


*& Form get_upload

&----


  • to upload the .CSV file

----


FORM get_upload .

DATA: l_file TYPE string,

l_index LIKE sy-tabix.

CLEAR: it_data, it_data[], it_matnr, it_werks,

it_out, it_out[], it_matnr[], it_werks[].

l_file = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = l_file

filetype = 'ASC'

has_field_separator = 'X'

TABLES

data_tab = it_data

EXCEPTIONS

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

OTHERS = 17.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

SORT it_data BY locid tr_loc.

*- Get material from X material

SELECT

X_prdid

matnr

FROM zX_master

INTO TABLE it_matnr FOR ALL ENTRIES IN it_data

WHERE X_prdid = it_data-prdid.

IF sy-subrc = 0.

SORT it_matnr BY X_prdid matnr.

*- Get the plant from location

SELECT name2

werks

INTO CORRESPONDING FIELDS OF TABLE it_werks

FROM t001w FOR ALL ENTRIES IN it_data

WHERE name2 = it_data-locid.

*- By Transfer location

SELECT name2

werks

APPENDING TABLE it_werks

FROM t001w FOR ALL ENTRIES IN it_data

WHERE name2 = it_data-tr_loc.

IF sy-subrc = 0.

SORT it_werks BY name2 werks.

DELETE ADJACENT DUPLICATES FROM it_werks COMPARING ALL FIELDS.

ENDIF.

ENDIF.

LOOP AT it_data.

l_index = sy-tabix.

READ TABLE it_matnr WITH KEY X_prdid = it_data-prdid BINARY SEARCH.

IF sy-subrc = 0.

it_data-prdid = it_matnr-matnr. " matnr

ENDIF.

MODIFY it_data INDEX l_index TRANSPORTING prdid.

ENDLOOP.

ENDIF.

ENDFORM. " get_upload

**----


    • Close the group

**----


FORM close_group.

IF e_group_opened = 'X'.

CALL FUNCTION 'BDC_CLOSE_GROUP'.

IF sy-subrc EQ 0.

WRITE:/5 'Session Closed Successfully'(008).

ELSE.

WRITE:/5 'Unable to Close the session : return code'(009), sy-subrc.

ENDIF.

ENDIF.

ENDFORM. "close_group

&----


*& Form get_update

&----


  • Do Stock Transfer

----


FORM get_update .

DATA: l_chr(3),

l_val(2) TYPE n,

l_index LIKE sy-tabix,

l_itemno(2) TYPE n,

l_meinh LIKE marm-meinh,

l_matnr LIKE mara-matnr,

l_flg,

l_str(80).

DATA: l_in_qty LIKE vbap-zmeng,

l_meins LIKE mara-meins,

l_factor LIKE marm-umrez,

l_qty LIKE vbap-zmeng.

LOOP AT it_data.

l_index = sy-tabix.

AT NEW tr_loc.

READ TABLE it_data INDEX l_index.

PERFORM bdc_dynpro USING 'SAPMM07M' '0400'.

PERFORM bdc_field USING 'MKPF-BLDAT' it_data-doc_dt.

PERFORM bdc_field USING 'MKPF-BUDAT' it_data-doc_dt.

PERFORM bdc_field USING 'RM07M-BWARTWA' '301'.

READ TABLE it_werks WITH KEY name2 = it_data-locid BINARY SEARCH.

IF sy-subrc = 0.

PERFORM bdc_field USING 'RM07M-WERKS' it_werks-werks.

ENDIF.

PERFORM bdc_field USING 'RM07M-LGORT' '2000'.

PERFORM bdc_field USING 'XFULL' 'X'.

PERFORM bdc_field USING 'RM07M-WVERS3' 'X'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

CLEAR l_itemno.

l_itemno = '01'.

ENDAT.

PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.

*- Get To Plant (From To location)

CLEAR it_werks.

READ TABLE it_werks WITH KEY name2 = it_data-tr_loc BINARY SEARCH.

IF sy-subrc = 0.

ENDIF.

**- UOM

  • IF l_chr = '521' OR l_chr = '522' OR l_chr = '511'.

  • l_meinh = 'CAS'.

  • ELSE.

  • l_meinh = 'INN'.

  • ENDIF.

CLEAR: l_chr, l_meinh.

l_chr = it_data-prdid+10(3).

*- About To plant

IF it_data-tr_loc = '123' OR it_data-tr_loc = 'HOF'.

IF l_chr = '521' OR l_chr = '522'.

it_werks-werks = '1002'. " Storage Plant

ELSE.

it_werks-werks = '1003'. " Storage Plant

ENDIF.

ENDIF.

IF l_flg IS INITIAL.

PERFORM bdc_field USING 'MSEGK-UMLGO' '2000'.

PERFORM bdc_field USING 'MSEGK-UMWRK' it_werks-werks.

l_flg = 'X'.

ENDIF.

CLEAR l_str.

CONCATENATE 'MSEG-MATNR(' l_itemno ')' INTO l_str.

CONDENSE l_str NO-GAPS.

PERFORM bdc_field USING l_str it_data-prdid.

*- Call FM to get new qty based on SAP UOM

CLEAR: l_meins, l_qty, l_in_qty, l_matnr.

l_in_qty = it_data-qty.

l_matnr = it_data-prdid.

CALL FUNCTION 'Z_GET_QTY_FROM_UOM'

EXPORTING

matnr = l_matnr

in_meins = it_data-uom

in_qty = l_in_qty

IMPORTING

out_meins = l_meins

quantity = l_qty.

IF sy-subrc = 0.

it_data-qty = l_qty.

it_data-uom = l_meins.

ENDIF.

CLEAR l_str.

CONCATENATE 'MSEG-ERFMG(' l_itemno ')' INTO l_str.

CONDENSE l_str NO-GAPS.

PERFORM bdc_field USING l_str it_data-qty.

CLEAR l_str.

CONCATENATE 'MSEG-ERFME(' l_itemno ')' INTO l_str.

CONDENSE l_str NO-GAPS.

PERFORM bdc_field USING l_str l_meinh.

CLEAR l_str.

CONCATENATE 'MSEG-CHARG(' l_itemno ')' INTO l_str.

CONDENSE l_str NO-GAPS.

PERFORM bdc_field USING l_str it_data-batch.

PERFORM bdc_field USING 'DKACB-FMORE' 'X'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.

  • PERFORM bdc_field USING 'DKACB-FMORE' 'X'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTE'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTE'.

l_itemno = l_itemno + 1.

*- If number of items are greater than 4,go for nxt page

CLEAR l_val.

l_val = l_itemno MOD 5.

IF l_val = '00'.

PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=NLE'.

l_itemno = '01'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTE'.

ENDIF.

*- Populate the output table

CLEAR it_out.

it_out-locid = it_data-locid.

it_out-tr_loc = it_data-tr_loc.

it_out-docid = it_data-docid.

it_out-doc_dt = it_data-doc_dt.

it_out-prdid = it_data-prdid.

it_out-batch = it_data-batch.

it_out-qty = it_data-qty.

APPEND it_out.

CLEAR it_out.

AT END OF tr_loc.

READ TABLE it_data INDEX l_index.

PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.

PERFORM bdc_field USING 'DKACB-FMORE' 'X'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTE'.

*- Call the transaction

PERFORM bdc_transaction USING 'MB1B'.

IMPORT l_subrc FROM MEMORY ID 'L_SUBRC'.

IF l_subrc = 0.

v_correct = v_correct + 1.

ENDIF.

ENDAT.

ENDLOOP.

ENDFORM. " get_update

&----


*& Form get_write

&----


  • text

----


FORM get_write .

WRITE:/ 'Total Number of Records :'(003), v_total COLOR 1.

WRITE:/ 'Total Correct Records :'(004), v_correct COLOR 3.

WRITE:/ 'Total Error Records :'(005), v_error COLOR 6.

SKIP 3.

IF NOT it_out[] IS INITIAL.

WRITE:/5 'Locid'(002),

10 'Tfr.Locid'(006),

15 'DocumentID'(007),

38 'Doc.Date'(014),

55 'Material'(015),

70 'Batch'(016),

85 'Qty'(017),

100 'Message'(018).

ENDIF.

SKIP 1.

LOOP AT it_out.

WRITE:/5 it_out-locid,

10 it_out-tr_loc,

15 it_out-docid,

38 it_out-doc_dt,

55 it_out-prdid,

70 it_out-batch,

85 it_out-qty,

100 it_out-mesg.

ENDLOOP.

ENDFORM. " get_write

**----


    • Start new transaction

**----


FORM bdc_transaction USING tcode.

DATA:

l_mesg TYPE string.

DATA: l_subrc LIKE sy-subrc.

DATA: l_msg_id LIKE t100-arbgb,

l_msg_no LIKE t100-msgnr,

l_msg_var1 LIKE balm-msgv1,

l_msg_var2 LIKE balm-msgv2,

l_msg_var3 LIKE balm-msgv3,

l_msg_var4 LIKE balm-msgv4.

REFRESH messtab.

CALL TRANSACTION tcode USING bdcdata

MODE p_mode

UPDATE 'S'

MESSAGES INTO messtab.

l_subrc = sy-subrc.

EXPORT l_subrc TO MEMORY ID 'L_SUBRC'.

*- Populate the output table

  • CLEAR it_out.

*

  • it_out-locid = it_data-locid.

  • it_out-tr_loc = it_data-tr_loc.

  • it_out-docid = it_data-docid.

  • it_out-doc_dt = it_data-doc_dt.

  • it_out-prdid = it_data-prdid.

  • it_out-batch = it_data-batch.

  • it_out-qty = it_data-qty.

*- Build the message

LOOP AT messtab.

IF messtab-msgid = 'VL' AND messtab-msgnr = '311' AND messtab-msgtyp = 'S'.

EXIT.

ENDIF.

ENDLOOP.

IF sy-subrc = 0.

l_msg_id = messtab-msgid.

l_msg_no = messtab-msgnr.

l_msg_var1 = messtab-msgv1.

l_msg_var2 = messtab-msgv2.

l_msg_var3 = messtab-msgv3.

l_msg_var4 = messtab-msgv4.

CALL FUNCTION 'MESSAGE_PREPARE'

EXPORTING

language = 'E'

msg_id = l_msg_id

msg_no = l_msg_no

msg_var1 = l_msg_var1

msg_var2 = l_msg_var2

msg_var3 = l_msg_var3

msg_var4 = l_msg_var4

IMPORTING

msg_text = l_mesg

EXCEPTIONS

function_not_completed = 1

message_not_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSEIF sy-subrc = 0.

  • l_mesg = messtab-msgv2.

  • CONDENSE l_mesg.

  • CONCATENATE 'Stock Transfered' l_mesg 'created successfully' INTO l_mesg.

it_out-mesg = l_mesg.

APPEND it_out.

CLEAR it_out.

ENDIF.

ENDIF.

IF l_subrc <> 0.

v_error = v_error + 1.

IF e_group_opened = ' '.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = p_sname

user = p_uname

keep = ''

holddate = hdate.

IF sy-subrc EQ 0.

WRITE:/5 'Session'(012), p_sname ,' Created Successfully'(011).

e_group_opened = 'X'.

ELSE.

WRITE:/5 'Unable to Create the session'(013), p_sname ,

'. return code'(010), sy-subrc.

ENDIF.

ENDIF.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = tcode

TABLES

dynprotab = bdcdata.

ENDIF.

REFRESH bdcdata.

CLEAR bdcdata.

ENDFORM. "bdc_transaction

**----


    • 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_field