CS_BC_BOM_CHANGE_BATCH_INPUT - ooxxvv/MySAPnotes GitHub Wiki
CS_BC_BOM_CHANGE_BATCH_INPUT
-
要傳的參數與 create BOM function (CS_BI_BOM_CREATE_BATCH_INPUT1) 相同,但要注意 change BOM 時,若 component 有 sub item 存在,則要將 component 的數量清空,讓系統自動依 sub item 的數量做計算
-
在經過多次測試之後發現:
-
當 cad_flag='X' 時,若 change BOM 的過程中有任何 error , function 會回傳 error message 。但 component 的 change 內容, function 均會視為是新增,所以 valid from 及 valid to date 並不會隨著 change 的日期而修改。
-
當 cad_flag=' ' 時, change BOM 之後, valid from 及 valid to date 會隨著 change 的日期而修改,但 return 的 message 會抓到 open session 的 message。
-
bdc_flag、close_group、new_group
-
這3個參數是for BDC 使用,close_group、new_group 的用法類似在呼叫smartform 時將不同的報表包在同一個spool 裏的參數一樣,可以將多個session包在同一個session group裏。若使用BDC的做法,在group_data的參數裏,也要定義group name…等資料
Code
{{{#!abap DATA: sub_flag. DATA: l_psinc(4) TYPE n VALUE '10', l_posnr(4) TYPE n.
DATA:l_xline LIKE bicsp-xline, l_matnr LIKE mara-matnr.
*--header w_bom_h-stype='1'. =>> header的stype='1' w_bom_h-tcode=tcode. w_bom_h-aennr=t_zelgh-aennr. w_bom_h-matnr=t_zelgh-matnr. w_bom_h-stlan=t_zelgh-stlan.
*--item ADD: l_psinc TO l_posnr, 1 TO l_xline.
MOVE-CORRESPONDING t_zelgl TO t_item. *--xline always set to 0001, because of BATCH-INPUT *------固定給0001 t_item-xline='0001'. *------item的stype='2' t_item-stype='2'. *------posnr要給,不然bom產生後,item number會空白 t_item-posnr=l_posnr. t_item-rvrel=''. t_item-sanfe=''.
*------當欄位是空白時,BDC會認為該欄位未異動,所以如果要將該欄位清空,需以“!”代替空白 IF t_item-schgt=''. t_item-schgt='!'. ENDIF. *------當欄位是空白時,BDC會認為該欄位未異動,所以如果要將該欄位清空,需以“!”代替空白 IF t_item-sanka=''. t_item-sanka='!'. ENDIF. *------此2欄位的關連性,當bulk material indicator(t_item-schgt)打勾時, *------costing relevancy(t_item-sanka)必須清空,不然在做bdc時,會有error IF t_item-schgt='X'. t_item-sanka='!'. ENDIF. *------單位要從主檔抓 SELECT SINGLE meins FROM mara INTO p_meins WHERE matnr=p_idnrk. IF sy-subrc <> 0. CLEAR p_meins. ENDIF. *------當有sub item存在時,t_item-upskz='X', *------如果是做change bom的話(CS02),且sub-item不等於空白時,component數量要填空白, *------讓系統自動依sub item數量 update companent數量 *------但在create BOM時,component數量為必輸欄位,因此不能給空白, *------所以要依Tcode來決定component數量欄位的不同給值邏輯 IF sub_flag='X'. *------表示有sub-item存在 t_item-upskz='X'. IF tcode='CS02'. t_item-menge=''. ENDIF. ENDIF. *--其他欄位 *--sub item *------sub item 的 stype='3' t_sub-stype='3'. *------用xline與component做link *------ex: 若第一個component的posnr=10, 其sub item 的xline要等於 1 t_sub-xline=p_tabix.
APPEND t_sub. sub_flag='X'.
CALL FUNCTION 'CS_BC_BOM_CHANGE_BATCH_INPUT' EXPORTING
- bdc_flag ='X' bom_header =w_bom_h
- cad_flag ='X'
- close_group ='X' commit_work ='X' group_data =l_group_data
- new_group ='X'
- tcode_mode ='E'
- tcode_update ='A' IMPORTING msgid =l_message-msgid msgno =l_message-msgno msgty =l_message-msgty msgv1 =l_message-msgv1 msgv2 =l_message-msgv2 msgv3 =l_message-msgv3 msgv4 =l_message-msgv4 TABLES bom_item =t_item bom_sub_item =t_sub .
IF l_message-msgty <> 'S'.
MESSAGE ID l_message-msgid TYPE l_message-msgty NUMBER l_message-msgno WITH l_message-msgv1 l_message-msgv2 l_message-msgv3 l_message-msgv4 INTO t_zelgh-msg.
p_flag='X'. t_zelgh-ertyp='3'. t_zelgh-stat='E'. ENDIF. }}}