on 10-24-2007 12:05 PM
HI,
can anyone send me the bdc of mb1b.
Thanks
dinesh
hi,
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
89 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.