2010年9月13日

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.

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.

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

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

3 指定TCODE
CALL FUNCTION 'BDC_INSERT'
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.

2010年8月6日

CL_GUI_ALV_GRID 取消右鍵功能

在網上看到有人問到這個技術怎麼做,一時興起就做起來了

首先宣告EVENT_RECEIVER
DATA: GRID TYPE REF TO CL_GUI_ALV_GRID,
EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.

再寫code,重點在event CONTEXT_MENU_REQUEST,將E_OBJECT清空
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_CONTEXT_MENU_REQUEST
FOR EVENT CONTEXT_MENU_REQUEST OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT.
ENDCLASS.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_CONTEXT_MENU_REQUEST.
CALL METHOD E_OBJECT->CLEAR.
ENDMETHOD.
ENDCLASS.

再來就是將event掛到grid去
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER EVENT_RECEIVER->HANDLE_CONTEXT_MENU_REQUEST FOR GRID1.

Smartform下載PDF

DATA: I_OTF LIKE ITCOO OCCURS 100 WITH HEADER LINE,
I_PDF
LIKE TLINE OCCURS 100 WITH HEADER LINE.

DATA: OP_OPTION TYPE SSFCTRLOP,
JOB_OUTPUT
TYPE SSFCRESCL,
BIN_FILESIZE
TYPE I.

OP_OPTION-GETOTF = 'X'.
OP_OPTION-PREVIEW =
'X'.
OP_OPTION-NO_DIALOG =
'X'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
......

CALL FUNCTION GV_FUNC_MOD_NAME
EXPORTING
CONTROL_PARAMETERS = OP_OPTION
......
IMPORTING
JOB_OUTPUT_INFO = JOB_OUTPUT
TABLES
......

CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
IMPORTING
BIN_FILESIZE = BIN_FILESIZE
TABLES
OTF = JOB_OUTPUT-OTFDATA
LINES = I_PDF
EXCEPTIONS
ERR_MAX_LINEWIDTH =
1
ERR_FORMAT =
2
ERR_CONV_NOT_POSSIBLE =
3
ERR_BAD_OTF =
4
OTHERS = 5.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = BIN_FILESIZE
FILENAME = LV_FILE
FILETYPE =
'BIN'
TABLES
DATA_TAB = I_PDF.

2010年8月4日

SPELL_AMOUNT繁體中文顯示錯誤修正

SAP標準的FM SPELL_AMOUNT可以讓數字轉換成文字
在轉換中文ZF時會發生錯誤,查了許多文件後找到可用SE38執行RF_SPELL
經過不斷試驗後,發現要進SM30改V_T015Z二筆紀錄:

語言 單位 數據 以文字表示數目
M T > 萬 ;
M M > 億 ;

測試:

結果正常:



2010年8月3日

ALV END_OF_LIST 簽核範例(5欄)

FORM END_OF_LIST.

DATA: LV_LINSZ LIKE SY-LINSZ,
LV_LEN
TYPE I,
LV_POS
TYPE I.

SKIP 1.
LV_LEN = SY-LINSZ /
5.

LV_POS = 1.
WRITE AT LV_POS TEXT-E01.

LV_POS = LV_LEN * 1
- ( CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( TEXT-E02 ) /
2 ).
WRITE AT LV_POS TEXT-E02.

LV_POS = LV_LEN * 2
- ( CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( TEXT-E03 ) /
2 ).
WRITE AT LV_POS TEXT-E03.

LV_POS = LV_LEN * 3
- ( CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( TEXT-E04 ) /
2 ).
WRITE AT LV_POS TEXT-E04.

LV_POS = LV_LEN * 4
- ( CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( TEXT-E05 ) /
2 ).
WRITE AT LV_POS TEXT-E05.

SKIP 4.

ENDFORM. "END_OF_LIST

Classification 特性值讀取及新增(修改)

DATA: objectkey LIKE bapi1003_key-object,
status
LIKE bapi1003_key-status,
classnum
LIKE bapi1003_key-classnum,
standardclass
LIKE bapi1003_key-stdclass,
allocvaluesnum
LIKE bapi1003_alloc_values_num OCCURS 0 WITH HEADER LINE,
allocvalueschar
LIKE bapi1003_alloc_values_char OCCURS 0 WITH HEADER LINE,
allocvaluescurr
LIKE bapi1003_alloc_values_curr OCCURS 0 WITH HEADER LINE,
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

DATA: lv_char(5).

objectkey = p_matnr. “object table MARA時放物料號碼

CALL FUNCTION ‘BAPI_OBJCL_GETDETAIL’
EXPORTING
objectkey = objectkey
objecttable =
‘MARA’
classnum = classnum
classtype =
‘001′
language = ‘M’
IMPORTING
status = status
standardclass = standardclass
TABLES
allocvaluesnum = allocvaluesnum
allocvalueschar = allocvalueschar
allocvaluescurr = allocvaluescurr
return = return.

特性值新增(修改),特性值已存在時是修改,不存在是新增

CALL FUNCTION ‘BAPI_OBJCL_CHANGE’
EXPORTING
objectkey = ls_bapi1003_key-object
objecttable = ls_bapi1003_key-objecttable
classnum = ls_bapi1003_key-classnum
classtype = ls_bapi1003_key-classtype

TABLES
allocvaluesnumnew = allocvaluesnumnew
allocvaluescharnew = allocvalueschar
allocvaluescurrnew = allocvaluescurrnew
return = it_return

2010年7月10日

Windows7 安裝GUI 7.10之後版本saplogon.ini失效問題

找了很多文件,也查官方的note,說是路徑換了要把saplogon.ini放到新的地方。怎麼試也無法成功,最後發現有個簡單的解法就是直接設定環境變數。

變數名稱:SAPLOGON_INI_FILE
檔案的絕對路徑(例):C:\Windows\saplogon.ini