Thursday, December 24, 2009

BAPI_GOODSMVT_CREATE FOR MB1B

*&---------------------------------------------------------------------*
*& Report ZMMBAPI_MB1B
*&
*&---------------------------------------------------------------------*
*&
*& author : kevin su 2009/12/24
*&---------------------------------------------------------------------*
* 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
*
REPORT ZMMBAPI_MB1B.

TABLES:mseg, mkpf, rm07m, t158b,t001l, msegk.

** upload excel file to internal table
TYPE-POOLS: truxs.
DATA: it_raw TYPE truxs_t_text_data.
** bapi variable
DATA: mat_doc LIKE bapi2017_gm_head_ret-mat_doc.
DATA:save_code LIKE sy-ucomm,
ok_code LIKE sy-ucomm,
loc_msg(50),
gmnga LIKE afru-gmnga,
mtsnr LIKE rm07m-mtsnr,
errflag..

DATA:BEGIN OF gt_afpo OCCURS 0.
INCLUDE STRUCTURE afpo.
DATA:END OF gt_afpo.

DATA:gmhead LIKE bapi2017_gm_head_01.

DATA: BEGIN OF gmcode.
INCLUDE STRUCTURE bapi2017_gm_code.
DATA: END OF gmcode.

DATA: BEGIN OF mthead.
INCLUDE STRUCTURE bapi2017_gm_head_ret.
DATA: END OF mthead.

DATA: BEGIN OF itab OCCURS 100.
INCLUDE STRUCTURE bapi2017_gm_item_create.
DATA: END OF itab.

DATA: BEGIN OF errmsg OCCURS 10.
INCLUDE STRUCTURE bapiret2.
DATA: END OF errmsg.

** end bapi variable **

data: begin of pcitab occurs 100,
upd_sta(1), "Update Status
move_type(3), "Movement Type
plant(4), "Plant
material(18), "Material Number
entry_qnt(13), "Quantity
batch(10), "Batch
end of pcitab.

** excel file defination **

types: BEGIN OF t_datatab,
MATERIAL type bapi2017_gm_item_create-material, "料號
PLANT type bapi2017_gm_item_create-plant, "工廠
STGE_LOC type bapi2017_gm_item_create-stge_loc, "儲位
* STCK_TYPE type bapi2017_gm_item_create-stck_type, "庫存類型
SPEC_STOCK type bapi2017_gm_item_create-spec_stock, "特殊庫存指示碼
SALES_ORD type bapi2017_gm_item_create-sales_ord, "銷售訂單
S_ORD_ITEM type bapi2017_gm_item_create-s_ord_item, "訂單項目
ENTRY_QNT type bapi2017_gm_item_create-entry_qnt, "數量
ENTRY_UOM type bapi2017_gm_item_create-entry_uom, "單位
MOVE_MAT type bapi2017_gm_item_create-move_mat, "料號
MOVE_PLANT type bapi2017_gm_item_create-move_plant, "工廠
MOVE_STLOC type bapi2017_gm_item_create-move_stloc, "儲位
MOVE_BATCH type bapi2017_gm_item_create-move_batch, "批次
MOVE_VAL_TYPE type bapi2017_gm_item_create-move_val_type, "評價類型
MVT_IND type bapi2017_gm_item_create-mvt_ind, "異動指示碼
VAL_SALES_ORD type bapi2017_gm_item_create-val_sales_ord,
VAL_S_ORD_ITEM type bapi2017_gm_item_create-val_s_ord_item,
MOVE_TYPE type bapi2017_gm_item_create-move_type, "異動類型
BATCH type bapi2017_gm_item_create-batch, "批次號碼
END OF t_datatab.

*內表

DATA: itabXLS TYPE STANDARD TABLE OF t_datatab WITH HEADER LINE,
             wa_itab TYPE t_datatab.

selection-screen begin of block b1 with frame title text-001.
PARAMETERS: p_bldat type mkpf-bldat default sy-datum.
PARAMETERS: p_budat type mkpf-budat default sy-datum.
PARAMETERS: p_file TYPE rlgrap-filename.
parameters: e_file like rlgrap-filename default
'c:\sapdata\gdsmvterror.txt'.
selection-screen end of block b1.

* At selection screen

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.

*

INITIALIZATION.

gmcode-gm_code = '04'. " for MB1B
gmhead-pstng_date = p_bldat. "mkpf-bldat.
gmhead-doc_date = p_budat. "mkpf-budat.
gmhead-pr_uname = sy-uname.
*
start-of-selection.

perform get_data.

loop at itabXLS.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = itabXLS-material
IMPORTING
OUTPUT = itabXLS-material.

if itabXLS-sales_ord is not initial.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = itabXLS-sales_ord
IMPORTING
OUTPUT = itabXLS-sales_ord.
endif.

itabXLS-move_type = '309'.
itabXLS-mvt_ind = ''.
itabXLS-move_mat = itabXLS-material.
itabXLS-move_plant = 'TTW2'.
itabXLS-batch = itabXLS-move_batch.
itabXLS-val_sales_ord = itabXLS-sales_ord.
itabXLS-val_s_ord_item = itabXLS-s_ord_item.
MOVE-CORRESPONDING itabXLS TO itab.
MOVE-CORRESPONDING itabXLS TO pcitab.

append pcitab.
APPEND itab.

endloop.
loop at itab.
       write : / itab-material, itab-move_type, itab-move_plant,itab-entry_qnt.
endloop.

perform pass_data.
*
end-of-selection.
*
FORM PASS_DATA.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = gmhead
goodsmvt_code = gmcode
IMPORTING
goodsmvt_headret = mthead
materialdocument = mat_doc
TABLES
goodsmvt_item = itab
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.
endloop.

if errflag is initial.
  commit work and wait.
if sy-subrc ne 0.
   write:/ 'Error in updating'.
   exit.
else.
  write:/ mthead-mat_doc, mthead-doc_year.
  perform upd_sta.
endif.
endif.

*************
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
ENDFORM.

*********

FORM get_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X' " include header
i_tab_raw_data = it_raw " WORK TABLE
i_filename = p_file
TABLES
i_tab_converted_data = itabXLS[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 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_data

*---------------------------------------------------------------------*
* FORM UPD_STA *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
form upd_sta.
loop at pcitab.
pcitab-upd_sta = 'X'.
modify pcitab.
endloop.

call function 'WS_DOWNLOAD'
exporting
filename = e_file
filetype = 'DAT'
* IMPORTING
* FILELENGTH =
tables
data_tab = pcitab
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* OTHERS = 6
endform.

Labels:

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home