最近想起上個project有個透過interface從MES轉入生產訂單異常,在SAP用BAPI開出QN時,要把訂單號碼及作業號碼寫入的問題。
1 以下是在IDES建立的QN,訂單號碼及作業號碼是直接填入的
2 在BAPI_QUALNOT_CREATE傳入的NOTIFHEADER只找到PROD_ORDER是生產訂單,卻找不到作業號碼對應的field
3 進table AFVC找到field AUFPL及APLZL,剛好可以對應到NOTIFHEADER,改填入這二個field
4 BAPI_TRANSACTION_COMMIT前要記得先處理BAPI_QUALNOT_SAVE
2010年9月25日
2010年9月24日
TBB1過帳替換special GL indicator科目
友人提問:TR的TBB1可以替換vendor的special GL indicator科目嗎?
1 進入IDES測試,建立一筆TR交易後執行TBB1測試
2 執行後結果,借方科目是總帳科目,過帳碼是40
3 Implement BADI TPM_ACCIF_TRAC,在Method ACCIT_EXIT修改借方的內容
過帳對象是vendor 1000
科目是160000
過帳碼 21
科目類型 K
CH_ACCIT_D-LIFNR = '0000001000'.
CH_ACCIT_D-HKONT = '0000160000'.
CH_ACCIT_D-BSCHL = '21'.
CH_ACCIT_D-KOART = 'K'.
4 再執行一次TBB1測試,會計科目及過帳碼已經修改成功
5 再修改一次Method ACCIT_EXIT,過帳碼改為29,特殊總帳指示碼改為A,再加入稅碼V0(IDES設定替換後的科目要帶稅碼,在此不特別處理)
CH_ACCIT_D-LIFNR = '0000001000'.
CH_ACCIT_D-HKONT = '0000160000'.
CH_ACCIT_D-BSCHL = '29'.
CH_ACCIT_D-UMSKZ = 'A'.
CH_ACCIT_D-KOART = 'K'.
CH_ACCIT_D-MWSKZ = 'V0'.
6 再執行一次TBB1測試,過帳碼29已經修改成功,會計科目還是160000
7 正式過帳看看傳票結果,TBB1的科目160000已替換成A類的科目159000
1 進入IDES測試,建立一筆TR交易後執行TBB1測試
2 執行後結果,借方科目是總帳科目,過帳碼是40
3 Implement BADI TPM_ACCIF_TRAC,在Method ACCIT_EXIT修改借方的內容
過帳對象是vendor 1000
科目是160000
過帳碼 21
科目類型 K
CH_ACCIT_D-LIFNR = '0000001000'.
CH_ACCIT_D-HKONT = '0000160000'.
CH_ACCIT_D-BSCHL = '21'.
CH_ACCIT_D-KOART = 'K'.
4 再執行一次TBB1測試,會計科目及過帳碼已經修改成功
5 再修改一次Method ACCIT_EXIT,過帳碼改為29,特殊總帳指示碼改為A,再加入稅碼V0(IDES設定替換後的科目要帶稅碼,在此不特別處理)
CH_ACCIT_D-LIFNR = '0000001000'.
CH_ACCIT_D-HKONT = '0000160000'.
CH_ACCIT_D-BSCHL = '29'.
CH_ACCIT_D-UMSKZ = 'A'.
CH_ACCIT_D-KOART = 'K'.
CH_ACCIT_D-MWSKZ = 'V0'.
6 再執行一次TBB1測試,過帳碼29已經修改成功,會計科目還是160000
7 正式過帳看看傳票結果,TBB1的科目160000已替換成A類的科目159000
2010年9月21日
設備(IE01/IE02/IE03)客製欄位及BAPI處理
友人提問:設備(IE01/IE02/IE03)的客製欄位如何用BAPI處理?
新增客製欄位就用IDES練習
1 找到設備的table EQUI SAP有預留一個customer include CI_EQUI,直接在這個structure做append structure,命名ZAEQUI
新增一個field ZZMATNR
2 在CMOD新增一個Project,Assignment Enhancement ITOB0001,使用第一個screen exit
3 新增一個function group ZEQUI並建立screen 0100,將新增field 放入screen layout,記得要選Subscreen。(PBO/PAi處理略)
4 在Function exit EXIT_SAPLITO0_001及EXIT_SAPLITO0_002寫入適當code(略)
5 進IE01/IE02/IE03看看結果
6 以上是新增screen exit顯示customer include field,接下來是重點使用bapi,進入BAPI browser找到BAPI_EQUI_CREATE,怎麼找也找不到有CI_EQUI的interface
7 只好改為copy bapi的方式,先找到BAPI_EQUI_CREATE的function group ITOB_BAPI_EQ,直接copy整個function group及BAPI_EQUI_CREATE,名字前面加個Z
8 發現code DATA: L_ITOB_REC LIKE ITOB,ITOB當中就有CI_EQUI,二話不說馬上修改,在import新增I_CI_EQUI LIKE CI_EQUI,並在CALL FUNCTION 'EQUIPMENT_SAVE' 之前將I_CI_EQUI寫入L_ITOB_REC
L_ITOB_REC-ZZMATNR = I_CI_EQUI-ZZMATNR.
9 經過測試,以上的方法是可行的
新增客製欄位就用IDES練習
1 找到設備的table EQUI SAP有預留一個customer include CI_EQUI,直接在這個structure做append structure,命名ZAEQUI
新增一個field ZZMATNR
2 在CMOD新增一個Project,Assignment Enhancement ITOB0001,使用第一個screen exit
3 新增一個function group ZEQUI並建立screen 0100,將新增field 放入screen layout,記得要選Subscreen。(PBO/PAi處理略)
4 在Function exit EXIT_SAPLITO0_001及EXIT_SAPLITO0_002寫入適當code(略)
5 進IE01/IE02/IE03看看結果
6 以上是新增screen exit顯示customer include field,接下來是重點使用bapi,進入BAPI browser找到BAPI_EQUI_CREATE,怎麼找也找不到有CI_EQUI的interface
7 只好改為copy bapi的方式,先找到BAPI_EQUI_CREATE的function group ITOB_BAPI_EQ,直接copy整個function group及BAPI_EQUI_CREATE,名字前面加個Z
8 發現code DATA: L_ITOB_REC LIKE ITOB,ITOB當中就有CI_EQUI,二話不說馬上修改,在import新增I_CI_EQUI LIKE CI_EQUI,並在CALL FUNCTION 'EQUIPMENT_SAVE' 之前將I_CI_EQUI寫入L_ITOB_REC
L_ITOB_REC-ZZMATNR = I_CI_EQUI-ZZMATNR.
9 經過測試,以上的方法是可行的
2010年9月17日
從BSEG找COPA特性值
友人提問,從FI doc上面要怎麼找到COPA的特性值?
從上圖可以看到FB03直接可查到COPA的特性值,找BSEG只能找到FIELD PAOBJNR,原來COPA的table和img有關,可用CE4*_ACCT在SE11找到table
以IDES為例,company code 1000對應的table就是CE4IDEA_ACCT,在SE16輸入PAOBJNR號碼來找看看:
執行後結果:
以IDES為例,company code 1000對應的table就是CE4IDEA_ACCT,在SE16輸入PAOBJNR號碼來找看看:
執行後結果:
2010年9月15日
F110 找出下次付款日
友人提問:在F110自動付款中如何找出下次付款日
檢查標準程式發現是用Data Clusters方式存在,不方便直接使用SQL查詢
要改用Import,以下節錄F110VFP0中的程式碼:
F110ID-LAUFD = F110V-LAUFD.
F110ID-LAUFI = F110V-LAUFI.
F110ID-OBJKT = KON_PARAM.
F110VERSIONPAR = SPACE.
REFRESH: BUKTAB, FKTTAB, SLKTAB, SLDTAB, TRCTAB, USRTAB,
FAETAB, JOBTAB.
CLEAR: BUKTAB, FKTTAB, SLKTAB, SLDTAB, TRCTAB, USRTAB,
FAETAB, JOBTAB, F110C, TRCOPT, F110VERSIONPAR.
IMPORT BUKTAB FKTTAB SLKTAB SLDTAB TRCTAB USRTAB
FAETAB JOBTAB F110C TRCOPT F110VERSIONPAR
FROM DATABASE RFDT(FB) ID F110ID.
FKTTAB就是parameter的internal table
檢查標準程式發現是用Data Clusters方式存在,不方便直接使用SQL查詢
要改用Import,以下節錄F110VFP0中的程式碼:
F110ID-LAUFD = F110V-LAUFD.
F110ID-LAUFI = F110V-LAUFI.
F110ID-OBJKT = KON_PARAM.
F110VERSIONPAR = SPACE.
REFRESH: BUKTAB, FKTTAB, SLKTAB, SLDTAB, TRCTAB, USRTAB,
FAETAB, JOBTAB.
CLEAR: BUKTAB, FKTTAB, SLKTAB, SLDTAB, TRCTAB, USRTAB,
FAETAB, JOBTAB, F110C, TRCOPT, F110VERSIONPAR.
IMPORT BUKTAB FKTTAB SLKTAB SLDTAB TRCTAB USRTAB
FAETAB JOBTAB F110C TRCOPT F110VERSIONPAR
FROM DATABASE RFDT(FB) ID F110ID.
FKTTAB就是parameter的internal table
2010年9月13日
MM03子頁面顯示圖片
前篇提到MM03顯示新的子頁面,在上面放了一張圖片,以下步驟說明如何完成:
1 進入Tcode SMW0,選擇Binary data for WebRFC applications,將圖片上傳至SAP,object name取名叫MY_PIC1
2 在function group ZMGD1 copy screen 1002,給號0200。並在screen layout 拉出一個customer control 取名C_CONTAINER,並在flow logic 新增一個PBO module SET_PICTURE,並填入以下程式碼:
DATA: G_PICTURE TYPE REF TO CL_GUI_PICTURE,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
URL TYPE C LENGTH 255.
CLASS CL_GUI_CFW DEFINITION LOAD.
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'C_CONTAINER'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT G_PICTURE
EXPORTING
PARENT = G_CUSTOM_CONTAINER
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PERFORM LOAD_PIC_FROM_DB USING 'MY_PIC1' CHANGING URL. * load picture
CALL METHOD G_PICTURE->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
ENDIF.
3 新增一個form routine LOAD_PIC_FROM_DB,可參考程式RSDEMO_DIALOGBOX_CONTROL並修改為可傳入Object Name(詳略)
4 進入Tcode OMT3B修改IMG
1 進入Tcode SMW0,選擇Binary data for WebRFC applications,將圖片上傳至SAP,object name取名叫MY_PIC1
2 在function group ZMGD1 copy screen 1002,給號0200。並在screen layout 拉出一個customer control 取名C_CONTAINER,並在flow logic 新增一個PBO module SET_PICTURE,並填入以下程式碼:
DATA: G_PICTURE TYPE REF TO CL_GUI_PICTURE,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
URL TYPE C LENGTH 255.
CLASS CL_GUI_CFW DEFINITION LOAD.
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'C_CONTAINER'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT G_PICTURE
EXPORTING
PARENT = G_CUSTOM_CONTAINER
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PERFORM LOAD_PIC_FROM_DB USING 'MY_PIC1' CHANGING URL. * load picture
CALL METHOD G_PICTURE->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
ENDIF.
3 新增一個form routine LOAD_PIC_FROM_DB,可參考程式RSDEMO_DIALOGBOX_CONTROL並修改為可傳入Object Name(詳略)
4 進入Tcode OMT3B修改IMG
MM03新增子頁面
最近友人問我一個MM03新增子頁面並顯示圖片的問題,一直以來只知道可以新增,手癢之下在IDES練習了一下,把過程放上來
![]() |
| 首先在se80 copy一個function group MGD1, 取名就叫做ZMGD1吧(不必copy function module) |
![]() |
| 再來就是到IMG設定新的子頁面,Tcode OMT3B,要選項目21 |
![]() |
| Copy Basic Data 2,號碼不要重覆,就給85 |
![]() |
| 選取新增的Basic Data 3再雙擊subscreen |
![]() |
| 在第一個項目維護新function group的main program以及screen number |
![]() |
| 設定完成,進MM03看看吧(使用IDES最常用料號100-100),多了一個新的view |
![]() |
| MM03果然出現了我們新增的view(如何顯示圖片略,請看下一篇) |
2010年9月7日
修正Billing Doc匯率
最近有個案子碰到在Create Billing Doc時,很彈性的給定匯率
找了一下,有一支程式RV60AFZC裡面的EXIT可以自行加入程式碼直接將匯率寫入
以下是範例:
FORM USEREXIT_FILL_VBRK_VBRP.
DATA: L_UKURS LIKE TCURR-UKURS.
IF VBRK-WAERK NE 'TWD'.
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_CURRENCY = VBRK-WAERK
LOCAL_CURRENCY = VBRK-STWAE
TYPE_OF_RATE = VBRK-KURST
IMPORTING
EXCHANGE_RATE = L_UKURS .
IF SY-SUBRC = 0.
VBRK-KURRF = L_UKURS.
ENDIF.
ENDIF.
ENDFORM.
找了一下,有一支程式RV60AFZC裡面的EXIT可以自行加入程式碼直接將匯率寫入
以下是範例:
FORM USEREXIT_FILL_VBRK_VBRP.
DATA: L_UKURS LIKE TCURR-UKURS.
IF VBRK-WAERK NE 'TWD'.
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_CURRENCY = VBRK-WAERK
LOCAL_CURRENCY = VBRK-STWAE
TYPE_OF_RATE = VBRK-KURST
IMPORTING
EXCHANGE_RATE = L_UKURS .
IF SY-SUBRC = 0.
VBRK-KURRF = L_UKURS.
ENDIF.
ENDIF.
ENDFORM.
2010年8月31日
Outbound Delivery修改畫面屬性
今天友人提問,Outbound Delivery畫面上的欄位是否可以做到input disabled

從img到program exit再到ehancement都找不到可以修改的地方,只直接問有經驗的人
原來只要用一個BADI就解決了:LE_SHP_DELIVERY_PROC
立刻到IDES試一下:
1 implement BADI(步驟略)

2 直接加入程式碼
DATA: LS_ATTRIBUTES TYPE SHP_SCREEN_ATTRIBUTES.
LS_ATTRIBUTES-NAME = 'LIPS-MFRGR'.
LS_ATTRIBUTES-INPUT = 0.
APPEND LS_ATTRIBUTES TO CT_FIELD_ATTRIBUTES.
LS_ATTRIBUTES-NAME = 'LIPS-MFRGR'.
LS_ATTRIBUTES-INPUT = 0.
APPEND LS_ATTRIBUTES TO CT_FIELD_ATTRIBUTES.
3 Active 前先執行VL02N看看,此時欄位可修改
4 將BADI Active後重新執行,欄位已不可輸入
2010年8月16日
BDC 產生Batch Input並在SM35自動執行
1 產生一個GROUP
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'TT Clearing'
USER = 'PICONN'
KEEP = 'X'.
EXPORTING
CLIENT = SY-MANDT
GROUP = 'TT Clearing'
USER = 'PICONN'
KEEP = 'X'.
2 寫入BDC動作
CLEAR: GT_BDCDATA[].
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0122'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BKPF-BLDAT' SY-DATUM.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BKPF-BLDAT' SY-DATUM.
......
3 指定TCODE
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'F-04'
TABLES
DYNPROTAB = GT_BDCDATA.
EXPORTING
TCODE = 'F-04'
TABLES
DYNPROTAB = GT_BDCDATA.
4 多TCODE時重覆 Step 2、3
5 結束GROUP
CALL FUNCTION 'BDC_CLOSE_GROUP'.
6 執行SM35 Session(GROUP)
SUBMIT RSBDCSUB WITH MAPPE EQ 'TT Clearing'
WITH VON EQ SY-DATUM
WITH BIS EQ SY-DATUM
WITH Z_VERARB EQ 'X'
WITH FEHLER EQ ' '
EXPORTING LIST TO MEMORY
AND RETURN.
WITH VON EQ SY-DATUM
WITH BIS EQ SY-DATUM
WITH Z_VERARB EQ 'X'
WITH FEHLER EQ ' '
EXPORTING LIST TO MEMORY
AND RETURN.
訂閱:
文章 (Atom)
























