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

2007-04-19

SAP:金額位數調整


DATA ZDECIMAL_PLACES LIKE TCURX-CURRDEC. "小數位數
DATA ZWAERS LIKE T001-WAERS. "幣別
DATA ZBUKRS LIKE SKB1-BUKRS. "公司代碼
DATA nPower(005) TYPE N. "金額調整位數


"取得公司代碼使用的幣別
CALL FUNCTION 'FTI_COMPANY_CODE_CURRENCY_GET'
EXPORTING
I_BUKRS = ZBUKRS
IMPORTING
E_WAERS = ZWAERS.

"取得該幣別需要擴增的小數位數
CALL FUNCTION 'G_DECIMAL_PLACES_GET'
EXPORTING
CURRENCY = ZWAERS
IMPORTING
DECIMAL_PLACES = ZDECIMAL_PLACES.

"計算金額調整位數
nPower = 10 ** ( 2 - ZDECIMAL_PLACES ).

"後面的源代碼, 當要處理金額時, 就可以乘上此調整位數

2007-04-11

SAP:內建Function尋找

如果要找找看 SAP 的內建 ABAP FUNCTION

可以連到以下網站再以關鍵字查詢, 絕對可以輕鬆找到想要的FUNCTION

http://www.erpgenie.com/abap/functions.htm

http://us.geocities.com/victorav15/sapr3/abapfun.html

2007-03-26

SAP:查詢修改紀錄

比如說,要知道銷售單某筆資料被修改的價格紀錄

除了說可以按下 -> 環境 -> 更改 來進行查詢之外

也可以利用兩個Table:(1) CDHDR (2) CDPOS

或者,可以利用兩個function:
(1) CHANGEDOCUMENT_READ_HEADERS
(2) CHANGEDOCUMENT_READ_POSITIONS

有關範例,可以上google查詢

http://www.sap-img.com/ab024.htm

2007-03-19

SAP:要查詢兩個日期的差異(幾天, 幾週, 幾年)

要查詢, 可以採用 FUNCTION HR_HK_DIFF_BT_2_DATES

簡單寫個範例:

DATA: zY LIKE P0347-SCRYY.
DATA: zM LIKE P0347-SCRMM.
DATA: zD LIKE P0347-SCRDD.

CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'
EXPORTING
DATE1 = 日期一
DATE2 = 日期二
OUTPUT_FORMAT = '01' "<----備註
IMPORTING
YEARS = zY
MONTHS = zM
DAYS = zD.


備註:

以 SE16 查詢 T7HK2P
參數有幾種用法
01 ---> Years with decimals(年, 含小數)
04 ---> Months with decimals(月, 含小數)
07 ---> Anniversary(年, 整數)
08 ---> Anniversary months(月, 整數)

若是要算差異幾日, 參數下 02 即可

*另外, 其他一些常用的日期處理functions, 可到下列網址查詢
請按這裡

2007-03-12

SAP:Range的應用

使用Range的好處,在於讓程式碼簡潔可以閱讀

這裡提供一段程式碼,請參考使用


*定義Range
*RANGE for AUFNR (紀錄工單號的集合)
DATA: rAUFNR LIKE RANGE OF GLPCA-AUFNR INITIAL SIZE 0 WITH HEADER LINE.

*新增一筆虛擬資料
MOVE: 'I' TO rAUFNR-SIGN,
'EQ' TO rAUFNR-OPTION,
'XXXX' TO rAUFNR-LOW.
APPEND rAUFNR.

*將工單號碼加入Range
*找到2007/1, 有原料耗用科目的工單, 加入Range
SELECT * FROM GLPCA WHERE RYEAR = '2007' AND
POPER = '1' AND
RACCT = '4101010100'.
"若沒有加入Range的, 才加入
IF GLPCA-AUFNR IN rAUFNR.
ELSE.
rAUFNR-SIGN = 'I'.
rAUFNR-OPTION = 'EQ'.
rAUFNR-LOW = GLPCA-AUFNR.
APPEND rAUFNR.
ENDIF.
ENDSELECT.

*使用Range
*訂單物料異動檔(AUFM), 找到剛剛篩選的工單
SELECT * FROM AUFM WHERE AUFNR in rAUFNR. "只要使用IN, 不需要寫一堆OR
IF AUFM-SHKZG = 'S'.
INV_PROFIT = INV_PROFIT + AUFM-DMBTR.
ELSE.
INV_PROFIT = INV_PROFIT - AUFM-DMBTR.
ENDIF.
ENDSELECT.

SAP:上傳檔案

既然可以由 SAP下載檔案,當然也有對應的檔案上傳的功能

當我們需要將一些參數由PC傳送至SAP主機時,這功能就很實用了


DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.

*儲存資料
DATA: BEGIN OF i_Data OCCURS 10,
CATA(30) TYPE C,
HSL TYPE P,
END OF i_GLPCT.


*檔案上傳
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = 'C:\Upload\U_file.txt' "U_file.txt 要以Tab間隔
FILETYPE = 'DAT'
ITEM = '對照表檔案上傳'
IMPORTING
ACT_FILENAME = FNAME
ACT_FILETYPE = FTYPE
FILESIZE = FSIZE
TABLES
DATA_TAB = i_Data
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3.

SAP:下載檔案至PC端

當我們要將Internal table的資料 dump 至用戶的電腦上

我們可以下列寫法, 呼叫 Download..


DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.

*欄位文字
data: begin of i_column occurs 0,
hd(50) type c,
end of i_column.

*儲存資料
DATA: BEGIN OF i_Data OCCURS 10,
CATA(30) TYPE C,
HSL TYPE P,
END OF i_GLPCT.


*欄位名稱輸入
move '類別' to i_column-hd. append i_column.
move '金額' to i_column-hd. append i_column.


*呼叫下載FUNCTUIN
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = 'C:\FileName.XLS'
FILETYPE = 'DAT'
ITEM = ' 下載 '
IMPORTING
ACT_FILENAME = FNAME
ACT_FILETYPE = FTYPE
FILESIZE = FSIZE
TABLES
DATA_TAB = i_Data
FIELDNAMES = i_column
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3.


補充一下, 如果將 IMPORTING段的程式碼刪除, 就不會再執行中, 一直詢問檔案名稱

如果一次會下載大量的檔案, 或者檔案名稱及位置都已經固定, 則這個關閉功能是很實用的

2007-03-07

SAP:利用 FIELD-SYMBOLS 的技巧 <例>

"加總指定月份某個會計科目的金額


data: s_fieldname(15) type c. "欄位
data: nTTL type p decimals 3. "加總
data: i(2) type n. "臨時變數
data: nMonth(2) type N. "暫存月
FIELD-SYMBOLS <fs&gl TYPE P.

select * from glpct where
    RLDNR = '8A' AND "分類帳
    RRCTY = '0' AND "記錄類型
    RVERS = '000' AND "版本
    RYEAR = 2006 AND "會計年度
    RPMAX = 16 AND "期間
    RBUKRS = 'TSMC' AND "公司代碼
    KOKRS = 'TW' AND "成本控制範圍
    RPRCTR = 'P1' AND "利潤中心
    RACCT = '1241050000'.
    nTTL = glpct-hslvt.
    i = 1.
    do 12 times.
      CONCATENATE 'GLPCT-HSL' i INTO s_fieldname.
      ASSIGN (s_fieldname) TO <fs&gl . "動態給欄位
      nTTL = nTTL + <fs&gl .
      i = i + 1.
      if i > nMonth .
        exit.
      endif.
    enddo.
endselect.

顯示訊息於SAP下方的Status


CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING PERCENTAGE = 0
TEXT = '訊息內容'.

2007-03-06

SAP :如何做ASCII Code轉換?

(1)由字元取得該ASCII Code

data : c.
field-symbols : <n> type x.
data : rn type i.
c = 'A'.
assign c to <n> casting.
move <n> to rn.
write rn.



A ---> 65

(2)由ASCII Code轉成字元


data : i type i value 66.
data : x type x.
field-symbols : <fc> type c.
move i to x.
assign x to <fc> casting type c.
move <fc> to c.
write c.


66 ---> B

來源:http://www.sap-img.com/abap/how-can-i-get-ascii-value-of-any-letter.htm