CS_BC_BOM_CHANGE_BATCH_INPUT - ooxxvv/MySAPnotes GitHub Wiki

PageOutline

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. }}}

{{{#!comment -------------------- 以下的部份是固定的,不要變動 ----- }}}