顯示具有 TR 標籤的文章。 顯示所有文章
顯示具有 TR 標籤的文章。 顯示所有文章

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



2010年6月30日

FM TPM_TRL_FLOW_PROTOCOL複製

TR的security當中有個tcode TPM13可以看到交易的所有流量和更新類型
標準程式是用FM TPM_TRL_FLOW_PROTOCOL直接跑出來的,在客製報表是很有用的
只是這支FM執行時會直接跑出畫面,不是回傳table,所以必須修改:

1 建立一個function group,globe data就直接貼上LTPM_TRL_PROTOCOLSTOP裡面的程式碼

2 複製function module PM_TRL_FLOW_PROTOCOL到ZTPM_TRL_FLOW_PROTOCOL,並指定步驟1的function group

3
在import的地方新增一個參數IM_EXPORT TYPE CHAR1
在table的地方新增一個參數EX_FLOWDATA TYPE TRLY_FLOW_ALV

4
刪除原程式碼:
* *** call ALV
PERFORM display_flows.

新增新程式碼:
if im_export = 'X'.
ex_flowdata[] = g_tab_selected_flowdata[].
clear g_refresh.
else.
perform display_flows.
endif.

5 應用時記得做以下處理(回傳table是L_FLOWDATA):
* Read TRD transactions
PERFORM ENRICH_WITH_TRD(SAPLZTPM_TRL_PROTOCOLS)
CHANGING L_FLOWDATA.

2010年1月28日

維護業務夥伴Search Help

在使用Tcode BP維護業務夥伴時,不管用那一組查詢,夥伴代碼都是放在最後一欄,不太直覺,剛好有個BADI BUPA_SHLP_CONTROL可以解決

進入SE19新增一個Implementation,BADI提供了一個界面FILTER_INCL_SHLP,參數是CT_SHLP_TAB,把相關的SH補進去就可以達到需求。

具體作法(解法不只一種):
1 先進SE11複製按地址的SH BUPAA,給定名稱為ZBUPAA並修改欄位順序把PARTNER移到最前面。
2 在界面中新增程式碼:
DATA: LV_SHLP1 TYPE SHLP_DESCR,
LV_SHLP2 TYPE SHLP_DESCR,
LT_DDSHIFACES1 TYPE DDSHIFACES,
LT_DDSHIFACES2 TYPE DDSHIFACES,
LW_DDSHIFACE1 TYPE DDSHIFACE,
LW_DDSHIFACE2 TYPE DDSHIFACE.

CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
EXPORTING
SHLPNAME = 'ZBUPAA'
SHLPTYPE = 'SH'
IMPORTING
SHLP = LV_SHLP1.

READ TABLE CT_SHLP_TAB INTO LV_SHLP2 INDEX 1.
LT_DDSHIFACES1 = LV_SHLP1-INTERFACE.
LT_DDSHIFACES2 = LV_SHLP2-INTERFACE.
LOOP AT LT_DDSHIFACES2 INTO LW_DDSHIFACE2.
READ TABLE LT_DDSHIFACES1 INTO LW_DDSHIFACE1
WITH KEY SHLPFIELD = LW_DDSHIFACE2-SHLPFIELD.
IF SY-SUBRC = 0.
LW_DDSHIFACE1 = LW_DDSHIFACE2.
MODIFY LT_DDSHIFACES1 FROM LW_DDSHIFACE1 INDEX SY-TABIX.
ENDIF.
ENDLOOP.
LV_SHLP1-INTERFACE = LT_DDSHIFACES1.
INSERT LV_SHLP1 INTO CT_SHLP_TAB INDEX 1.
3 進行測試

2010年1月15日

TR評價類別移轉,會計文件不過帳處理

繼之前提到的Loan Management交易不過帳,最近友人提到客戶有個需求在交易的評價類別移轉時(Tcode TPM15),需考慮到不產生會計文件。
例:
以交易為目的(評價類別0001)移轉到備供出售(評價類別0002)時,需產生會計文件。
以交易為目的(評價類別0001)移轉到持有至到期日(評價類別0003)時,不需產生會計文件。

做法:採用BADI TPM_ACCIF_TRAC的Method FLOW_POSTING_RELEVANCE,依邏輯判斷後,將CH_FLG_POSTING_RELEVANT值設定為space後,系統即不產生會計文件。

進行時發生一個困難,FLOW_POSTING_RELEVANCE這個Method並不提供參數判斷TPM15交易時移轉前後的評價類別資訊。實際以Debug方式測試後,發現可用Field Symbol將TPM15程式的變數以參考方式取得進行判斷,程式碼如下:

DATA: TRLY_TRQ_QTY_SELECT TYPE TABLE OF TRLS_TRQ_QTY_SELECT,
TRLY_TRQ_QTY TYPE TRLS_TRQ_QTY_SELECT.
FIELD-SYMBOLS: <> TYPE ANY.
DATA: OBJNAME TYPE STRING VALUE '(SAPLTPM_TRL_VAL_CLASS_TRANSFER)G_TAB_TRQ_QTY_SELECT[]'.

CHECK SY-TCODE = 'TPM15'.
ASSIGN (OBJNAME) TO <>.
IF SY-SUBRC = 0.
TRLY_TRQ_QTY_SELECT = .
***判斷TRLY_TRQ_QTY_SELECT裡面的前後二個class
READ TABLE TRLY_TRQ_QTY_SELECT INTO TRLY_TRQ_QTY INDEX 1.
IF SY-SUBRC = 0.
IF TRLY_TRQ_QTY-COM_VAL_CLASS = '0001' AND
TRLY_TRQ_QTY-TGT_COM_VAL_CLASS = '0002'.
CH_FLG_POSTING_RELEVANT = SPACE.
ENDIF.
ENDIF.
ENDIF.

2009年12月13日

TR交易新增欄位


在TR交易中,Tcode FTR_CREATE或是FTR_EDIT中有很多欄位,針對客戶的特定需求有時候還是得要新增一些欄位,尤其是後續有管理目的和會計編表目的時,新增欄位很有幫助。
以下是作法:
  • 先在SE11找到table vtbfha以display模式顯示,並點選附加欄位結構






  • 完成結構欄位定義,記住field name一定要ZZ打頭才行喔


















  • 建立一個功能群組ZTRF001,並在TOP宣告:
TYPE-POOLS: FTROP, FTRG.
* TABLES
TABLES: ZAVTBFHA1, ZAVTBFHA2.

* References to TRTM objects
DATA:
G_PROXY_TRANSACTION
TYPE REF TO IF_OPEN_TRTM_PROXY_DEAL_DATA,
G_PROXY_CUST_DATA
TYPE REF TO IF_OPEN_TRTM_CUSTOMER_DATA,
G_PROXY_MESSAGES
TYPE REF TO IF_OPEN_TRTM_PROXY_MESSAGE,
G_PROXY_FCODE
TYPE REF TO IF_OPEN_TRTM_PROXY_FCODE,
G_PROXY_FMOD
TYPE REF TO IF_OPEN_TRTM_PROXY_FMOD.

* Append structures of VTBFHA
DATA:
G_TAB_FHA_APPENDS
TYPE FTROP_TAB_CUST_APPEND.

* supported FCODES with subscreen
CONSTANTS:
C_CUSTOM_GUI_FCODE1
TYPE SYUCOMM VALUE 'OPEN_TRTM_CUST_01',
C_CUSTOM_GUI_FCODE2
TYPE SYUCOMM VALUE 'OPEN_TRTM_CUST_02'.

  • 在功能群組新增FM Z_FTR_CUSTOM_BADI_START
*"*"區域介面:
*" IMPORTING
*" REFERENCE(PI_PROXY_TRANSACTION) TYPE REF TO
*" IF_OPEN_TRTM_PROXY_DEAL_DATA
*" REFERENCE(PI_PROXY_MESSAGES) TYPE REF TO
*" IF_OPEN_TRTM_PROXY_MESSAGE
*" REFERENCE(PI_PROXY_FCODE) TYPE REF TO IF_OPEN_TRTM_PROXY_FCODE
*" REFERENCE(PI_PROXY_FMOD) TYPE REF TO IF_OPEN_TRTM_PROXY_FMOD
*" REFERENCE(PI_CUST_TRANSACTION) TYPE REF TO
*" IF_OPEN_TRTM_CUSTOMER_DATA
*" CHANGING
*" REFERENCE(PC_TAB_BADI_TABS) TYPE FTROP_TAB_BADI_SUBSCREEN

DATA: L_BADI_TABS
LIKE LINE OF PC_TAB_BADI_TABS.
DATA: L_TAB_MOD_FIELDS
TYPE FTRG_TAB_FIELD_MODIFY.
DATA: L_MOD_FIELDS
LIKE LINE OF L_TAB_MOD_FIELDS.
* save references in the global memory of the function module first
G_PROXY_TRANSACTION = PI_PROXY_TRANSACTION.
G_PROXY_CUST_DATA = PI_CUST_TRANSACTION.
G_PROXY_MESSAGES = PI_PROXY_MESSAGES.
G_PROXY_FCODE = PI_PROXY_FCODE.
G_PROXY_FMOD = PI_PROXY_FMOD.

** process the first FCODE
L_BADI_TABS-REPID =
'SAPLZTRF001'. "REPORT
L_BADI_TABS-DYNNR =
'0100'. "Subscreen
L_BADI_TABS-TEXT_TAB = TEXT-001.
MODIFY PC_TAB_BADI_TABS FROM L_BADI_TABS
TRANSPORTING REPID DYNNR TEXT_TAB
WHERE FCODE = C_CUSTOM_GUI_FCODE1. "1st FCODE
CALL METHOD G_PROXY_FMOD->SET_FIELDMOD
EXPORTING
PI_MODIFIED_FIELDS = L_TAB_MOD_FIELDS.
  • Implement BADI FTR_CUSTOMER_EXTENT,命名為ZFTR_CUSTOMER_EXTENT,並在interface EVT_APPLICATION_START加上以下code
CALL FUNCTION 'Z_FTR_CUSTOM_BADI_START'
EXPORTING
PI_PROXY_TRANSACTION = PI_PROXY_TRANSACTION
PI_PROXY_MESSAGES = PI_PROXY_MESSAGES
PI_PROXY_FCODE = PI_PROXY_FCODE
PI_PROXY_FMOD = PI_PROXY_FMOD
PI_CUST_TRANSACTION = PI_CUST_TRANSACTION
CHANGING
PC_TAB_BADI_TABS = PC_TAB_BADI_TABS.

  • 在功能群組新增SCREEN 100,定義新增欄位的layout
  • SCREEN 100的PBO module
DATA: L_ZAVTBFHA1 LIKE ZAVTBFHA1.
DATA: L_PBO_FHA_APPENDS
LIKE LINE OF G_TAB_FHA_APPENDS.
*取得客製新增結構
CALL METHOD G_PROXY_CUST_DATA->GET_CUST_DATA
IMPORTING
PE_TAB_FHA_APPENDS = G_TAB_FHA_APPENDS
EXCEPTIONS
INVALID_CALL =
1
OTHERS = 2.

READ TABLE G_TAB_FHA_APPENDS INDEX 1 INTO L_PBO_FHA_APPENDS.
L_ZAVTBFHA1 = L_PBO_FHA_APPENDS-CONTENT.
IF L_ZAVTBFHA1 NE ZAVTBFHA1.
ZAVTBFHA1 = L_ZAVTBFHA1.
ENDIF.

  • SCREEN 100的PAI module
DATA: L_PAI_FHA_APPENDS LIKE LINE OF G_TAB_FHA_APPENDS.

CALL METHOD G_PROXY_CUST_DATA->GET_CUST_DATA
IMPORTING
PE_TAB_FHA_APPENDS = G_TAB_FHA_APPENDS
EXCEPTIONS
INVALID_CALL =
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.

** prepare return table with changes from dynpro
LOOP AT G_TAB_FHA_APPENDS INTO L_PAI_FHA_APPENDS.
L_PAI_FHA_APPENDS-CONTENT = ZAVTBFHA1.
MODIFY G_TAB_FHA_APPENDS FROM L_PAI_FHA_APPENDS.
ENDLOOP.

CALL METHOD G_PROXY_CUST_DATA->SET_CUST_DATA
EXPORTING
PI_TAB_FHA_APPENDS = G_TAB_FHA_APPENDS
EXCEPTIONS
INVALID_DATA =
1
INVALID_CALL =
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.
ENDIF.

2009年4月15日

Loan Management交易轉檔不過帳

最近導入一個新案子包含了Loan Management,遇到一個情況:上線前已存在的交易部分流量已過帳,交易在SAP轉入後需將流量補過帳,但不產生會計文件,直接由FI入帳。
問過數位TR顧問,在IMG中並沒有這樣的設定,只好往ABAP方面去進行,剛好SAP提供了一個BADI:FVD_LOAN_POST似乎答案就在裡面

用SE18查查看,好像發現了……









看看BADI提供的介面














參數C_FLG_SUPPRESS_FI就是關鍵









經過測試(範例略),確實成功了