2011年2月11日

BAPI_ACC_DOCUMENT_POST 建立Park文件TAX item問題

還是用BAPI_ACC_DOCUMENT_POST 建立Park文件的問題。TAX item要在code裡面先處理好,借貸才會相等。步驟如下:

1 Tax不存入internal table ACCOUNTGL,要存入ACCOUNTTAX,指定的ITEMNO_ACC要正確。
2 處理 CURRENCYAMOUNT時,除了field AMT_DOCCUR要有稅額,field AMT_BASE稅基也要一併處理。

處理完成後進行測試,發現以下新的問題,金額借貸不相等,但是item相加是正常的???



檢查tax amount多了,要清除為0


做法:用BADI ACC_DOCUMENT的method CHANGE

DATA: WA_ACCTX TYPE ACCBSET.
LOOP AT C_ACCTX INTO WA_ACCTX.
CLEAR WA_ACCTX-FWSTE.
MODIFY C_ACCTX FROM WA_ACCTX .
ENDLOOP.

再RUN一次BAPI_ACC_DOCUMENT_POST這次正常:

2011年2月10日

由payment term決定baseline date的function module

繼上次寫到的用BAPI_ACC_DOCUMENT_POST 建立Park文件之後出現了新的問題:
在vendor的line item上面只寫入payment term是不夠的,baseline date會變成空的,post時還要再補上baseline date。

以下是計算vendor baseline date的function module
FI_TERMS_OF_PAYMENT_PROPOSE

要計算customer時用這個:GET_BASELINE_DATE

2011年1月6日

parked document posting問題

新project在parked document posting時出現了
error message 00 349 
'Field COBL-FKBER does not exist in the screen SAPLKACB'


在SAP找到了note 1020574就解決了

Reason and Prerequisites
The function module CODING_BLOCK_FIELD_CLEAR is not generated.
The field status of the field is defined as HIDE. The field contents were derived and not entered manually.
Solution
Run the generation report RFBIPPG1.



2010年11月24日

預留單MB_RESERVATION_BADI method DATA_CHECK處理

有一個客戶希望在預留單Movement 201時進行成本中心及費用科目預算檢查(利用KP06設定),不通過時不允許save。

以下是利用BADI MB_RESERVATION_BADI時的重點:
1 IS_RESB有成本中心和會計科目,可以利用來讀COSP的計劃值。
2 讀取未刪除的預留單,需求數量減去領料數量才是要卡控的數量。
3 金額可考慮抓標準價格或異動平均單價。
4 利用I_NEW_ITEM = 'X'判斷create時沒有科目指派,要直接去table T030找出會計科目,規則要問一下MM顧問。

2010年11月22日

BADI ME_PROCESS_PO_CUST method CHECK拋出多筆message

使用BADI ME_PROCESS_PO_CUST時,method CHECK可以一次檢查所有的PO內容
要將訊息輸出時,從doc看不到該怎麼處理,以下是help的提醒:
Never use the ABAP statement MESSAGE in the BAdI ME_PROCESS_PO_CUST.

再進一步找尋,發現要用macro處理:
INCLUDE MM_MESSAGES_MAC.
MMPUR_MESSAGE_FORCED 'E' 'ZMM01' '001' LV_MSGV1 LV_MSGV2 LV_MSGV3 LV_MSGV4.
MMPUR_MESSAGE_FORCED 'E' 'ZMM01' '002' LV_MSGV1 LV_MSGV2 LV_MSGV3 LV_MSGV4.

2010年11月17日

利用BADI ME_PROCESS_PO_CUST進行PO check

BADI ME_PROCESS_PO_CUST當中有一個method CHECK可以進行整個PO的檢查。
要注意的是parameter只有IM_HEADER,並且是object形態。

以下是取得內容的範例:

*取得header
IM_HEADER->GET_DATA( ).
*取得item,一樣是object形態
IM_HEADER->GET_ITEMS( ).

檢查後若要拋出錯誤,直接用message即可。
MESSAGE E888(SABAPDOCU) WITH LV_MSGV1 LV_MSGV2 LV_MSGV3 LV_MSGV4.

利用BADI ME_PURCHDOC_POSTED將PO資訊在SAVE後寫入Addon Table

PO在save之後的BADI ME_PURCHDOC_POSTED只有一個Method POSTED,作用是在這個時間得到完整的PO資訊,可以寫到Addon Table。
要注意的地方是PO create時, IM_EKPO不會有PO number,只存在 IM_EKKO-EBELN當中。

2010年11月15日

用K_GROUP_SELECT查詢Cost Object Group

寫CO的報表時,用到Cost Object的選擇條件時常會加上Group來查詢,在處理VALUE-REQUEST時可以用FM K_GROUP_SELECT處理,以下是範例:

1 Profit Center Group
CALL FUNCTION 'K_GROUP_SELECT'
EXPORTING
CLASS = '0106'
FIELD_NAME = 'RPRCTR '
TABLE = 'GLPCT '
IMPORTING
SET_NAME = P_PCGRU
EXCEPTIONS
NO_SET_PICKED = 1.

2 Cost Center Group
CALL FUNCTION 'K_GROUP_SELECT'
EXPORTING
FIELD_NAME = 'KOSTL'
IMPORTING
SET_NAME = P_KSGRU
EXCEPTIONS
NO_SET_PICKED = 1

3 Internal Order Group
CALL FUNCTION 'K_GROUP_SELECT'
EXPORTING
FIELD_NAME = 'AUFNR'
IMPORTING
SET_NAME = P_AUFGR
EXCEPTIONS
NO_SET_PICKED = 1.

4 Cost Element Group
CALL FUNCTION 'K_GROUP_SELECT'
EXPORTING
FIELD_NAME = 'KSTAR'
KTOPL = 'XXX'
IMPORTING
SET_NAME = P_GRP
EXCEPTIONS
NO_SET_PICKED = 1.

2010年11月9日

Park Document Posting使用SGL Ind 的item寫入Profit Center

遇到一個需求在FI Park Document使用SGL Ind,此時不能輸入Profit Center,希望能夠有機會自行決定。


SAP的New GL有一個default profit center的BADI FAGL_3KEH_DEFPRCTR,透過這個就可以達到目的。


作法是在park doc的doc header reference寫入要決定的profit center,再利用FAGL_3KEH_DEFPRCTR的interface IF_SET_DEFPRCTR 的Method SET_DEFAULTPRCTR處理。


以下是sample:
METHOD IF_SET_DEFPRCTR~SET_DEFAULTPRCTR.
   CHECK IS_ACCIT-XBLNR NE SPACE.
  CD_PRCTR = IS_ACCIT-XBLNR.
ENDMETHOD.

2010年11月5日

BAPI_ACC_DOCUMENT_POST 建立Park文件

遇到客戶的新需求:透過interface轉進SAP建立會計文件時,只需要建立Park文件,不要Post。


系統上並沒有這樣功能的的FM及BAPI,只好把辦法想到enhancement及BADI。找到之前寫過的BADI ACC_DOCUMENT直接使用CHANGE這個Method。


只要在Method中指定欄位值C_ACCHD-STATUS_NEW = 2.建立的文件就是Park文件。