去除字元前空白 CONDENSE ZINTEGER NO-GAPS.
小寫轉換大寫 TRANSLATE text TO UPPER CASE.
加SearchHelp SELECT-OPTIONS s_matnr FOR mara-matnr MATCHCODE OBJECT mat1.
刪除重覆資料 DELETE ADJACENT DUPLICATES FROM I_TEMP COMPARING VBELN.
資料靠左對齊 LEFT-JUSTIFIED
資料靠中間對齊 CENTERED
資料靠右對齊 RIGHT-JUSTIFIED
資料項下面顯示 UNDER
不顯示前零 NO-ZERO
不顯示正負號 NO-SIGN
2008年10月23日 星期四
2008年10月20日 星期一
MESSAGE Type
簡單的使用MESSAGE E來達到控管
其它的還有MESSAGE A, I, S, W, or X可運用
其它的還有MESSAGE A, I, S, W, or X可運用
*&---------------------------------------------------------------------*
*& Form AUTHORIZATION_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AUTHORIZATION_CHECK .
DATA: L_UNAME LIKE USR21-BNAME.
SELECT SINGLE BNAME FROM USR21 INTO L_UNAME WHERE BNAME = SY-UNAME.
IF L_UNAME NE 'EIS_CHERRY'.
MESSAGE E398(00) WITH '您的帳號沒有使用權限'.
ENDIF.
2008年10月18日 星期六
建立上傳路徑
在選擇畫面要作出下拉式選單來選擇本端PC的檔案
利用以下的Function可達到其目的
利用以下的Function可達到其目的
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = P_FILE "RLGRAP-FILENAME
DEF_PATH = '' "DEF_PATH
* MASK = ',*.*,*.*.'
MASK = TMP_MASK
MODE = 'O'
* TITLE = ' '
IMPORTING
FILENAME = TMP_FILENAME
* RC =
EXCEPTIONS
INV_WINSYS = 01
NO_BATCH = 02
SELECTION_CANCEL = 03
SELECTION_ERROR = 04.
IF SY-SUBRC = 0.
P_FILE = TMP_FILENAME.
ENDIF.
2008年9月10日 星期三
由Excel匯入資料
在寫程式時常常會有需求就是USER將檔案輸入至EXCEL
然後再將EXCEL的資料與ABAP的程式匯入後作處理
建議使用這個Function作處理
然後再將EXCEL的資料與ABAP的程式匯入後作處理
建議使用這個Function作處理
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_PATH
I_BEGIN_COL = '1'
I_BEGIN_ROW = '1'
I_END_COL = '18'
I_END_ROW = '65535'
TABLES
INTERN = I_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 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.
2008年9月5日 星期五
呼叫Form
1建立一支程式呼叫Smartform
1.1.建立呼叫Smartform的程式
1.2.建立傳資料給Smartforms的結構
1.3.畫Form
2.用標準程式呼叫Smartform
2.1.T-CODE:NACE
如何建立Smartforms請參考 - 連結文章
A. 建立結構
B. Smartforms建立Smartform
C. NACE 輸出控制條件
執行畫面結果
註:結構建立時要與接收欄相同
以本例為主 要建立 二個結構 要與 GT_RPT 與 SUB_TMP相同
GT_ITEM = GT_RPT
SUB_ITEM = SUB_TMP
1.1.建立呼叫Smartform的程式
1.2.建立傳資料給Smartforms的結構
1.3.畫Form
2.用標準程式呼叫Smartform
2.1.T-CODE:NACE
如何建立Smartforms請參考 - 連結文章
A. 建立結構
B. Smartforms建立Smartform
C. NACE 輸出控制條件
執行畫面結果
註:結構建立時要與接收欄相同
以本例為主 要建立 二個結構 要與 GT_RPT 與 SUB_TMP相同
GT_ITEM = GT_RPT
SUB_ITEM = SUB_TMP
*&---------------------------------------------------------------------*
*& Report ZBEN_SFTEST01 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZBEN_SFTEST01.
TABLES: EKKO, EKPO, EBAN, T024.
DATA: BEGIN OF I_EKKO OCCURS 0,
ZYEAR(4) TYPE C,
ZMONTH(2) TYPE C,
EBELN LIKE EKKO-EBELN,
BSTYP LIKE EKKO-BSTYP,
BSART LIKE EKKO-BSART,
AEDAT LIKE EKKO-AEDAT,
EKGRP LIKE EKKO-EKGRP,
END OF I_EKKO.
DATA: BEGIN OF I_EKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
LOEKZ LIKE EKPO-LOEKZ,
PSTYP LIKE EKPO-PSTYP,
KNTTP LIKE EKPO-KNTTP,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
BANFN LIKE EKPO-BANFN,
BNFPO LIKE EKPO-BNFPO,
END OF I_EKPO.
DATA: BEGIN OF I_EBAN OCCURS 0,
BANFN LIKE EBAN-BANFN,
BNFPO LIKE EBAN-BNFPO,
BSART LIKE EBAN-BSART,
BSTYP LIKE EBAN-BSTYP,
FRGDT LIKE EBAN-FRGDT,
PREIS LIKE EBAN-PREIS,
PEINH LIKE EBAN-PEINH,
WAERS LIKE EBAN-WAERS,
END OF I_EBAN.
DATA: BEGIN OF I_T024 OCCURS 0,
EKGRP LIKE T024-EKGRP,
EKNAM LIKE T024-EKNAM,
END OF I_T024.
DATA: BEGIN OF GT_RPT OCCURS 0,
ZYEAR(4) TYPE C,
ZMONTH(2) TYPE C,
EKGRP LIKE EKKO-EKGRP,
EKNAM LIKE T024-EKNAM,
EBELN LIKE EKKO-EBELN,
EBELP LIKE EKPO-EBELP,
AEDAT LIKE EKKO-AEDAT,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
BANFN LIKE EKPO-BANFN,
BNFPO LIKE EKPO-BNFPO,
FRGDT LIKE EBAN-FRGDT,
PREIS LIKE EBAN-PREIS,
PEINH LIKE EBAN-PEINH,
AMOUNT LIKE EBAN-PREIS,
WAERS LIKE EBAN-WAERS,
END OF GT_RPT.
DATA: Z_TABIX LIKE SY-TABIX.
DATA: X_TABIX LIKE SY-TABIX.
DATA: W_TABIX LIKE SY-TABIX.
DATA: FM_NAME TYPE RS38L_FNAM.
DATA: WA_EKKO LIKE EKKO OCCURS 0 WITH HEADER LINE.
DATA:
G_FNAME TYPE RS38L_FNAM,
G_CONTROL_PARAM TYPE SSFCTRLOP,
G_COMPOSER_PARAM TYPE SSFCOMPOP,
G_OUTPUT_INFO TYPE SSFCRESCL.
DATA: BEGIN OF SUBTOTAL OCCURS 0,
ZYEAR(4) TYPE C,
ZMONTH(2) TYPE C,
EKGRP LIKE EKKO-EKGRP,
EKNAM LIKE T024-EKNAM,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
AMOUNT LIKE EBAN-PREIS,
WAERS LIKE EBAN-WAERS,
END OF SUBTOTAL.
DATA: SUB_TMP LIKE SUBTOTAL OCCURS 0 WITH HEADER LINE.
************************************************************************
* SELECT-OPTIONS / PARAMETERS *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME.
SELECT-OPTIONS: S_DATE FOR EKKO-AEDAT(6) DEFAULT '200007' TO '200410' OBLIGATORY, "
S_EKGRP FOR EKKO-EKGRP.
SELECT-OPTIONS: S_DATES FOR SY-DATUM NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK BK1.
AT SELECTION-SCREEN.
REFRESH S_DATES.
LOOP AT S_DATE.
MOVE-CORRESPONDING S_DATE TO S_DATES.
S_DATES-LOW+6(2) = '01'.
IF S_DATE-HIGH IS INITIAL.
S_DATES-HIGH = S_DATES-LOW.
ENDIF.
S_DATES-HIGH+6(2) = '31'.
IF S_DATES(3) = 'IEQ'.
S_DATES(3) = 'IBT'.
ELSEIF S_DATES(3) = 'INE'.
S_DATES(3) = 'INB'.
ELSEIF S_DATES(3) = 'EEQ'.
S_DATES(3) = 'EBT'.
ELSEIF S_DATES(3) = 'ENE'.
S_DATES(3) = 'ENB'.
ENDIF.
COLLECT S_DATES.
ENDLOOP.
************************************************************************
* START-OF-SELECTION Event *
************************************************************************
START-OF-SELECTION.
PERFORM GET_DATA_FROM_DATABASE.
PERFORM MERGE_ITABS.
************************************************************************
* END-OF-SELECTION Event *
************************************************************************
END-OF-SELECTION.
PERFORM OUTPUT_REPORT.
*&---------------------------------------------------------------------*
*& Form GET_DATA_FROM_DATABASE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA_FROM_DATABASE .
SELECT EBELN BSTYP BSART AEDAT EKGRP
INTO CORRESPONDING FIELDS OF TABLE I_EKKO
FROM EKKO
WHERE AEDAT IN S_DATES
AND EKGRP IN S_EKGRP
AND LOEKZ EQ ''.
SORT I_EKKO BY EBELN.
IF NOT I_EKKO[] IS INITIAL.
SELECT EKGRP EKNAM
INTO CORRESPONDING FIELDS OF TABLE I_T024
FROM T024
FOR ALL ENTRIES IN I_EKKO
WHERE EKGRP = I_EKKO-EKGRP.
SORT I_T024 BY EKGRP.
SELECT EBELN EBELP LOEKZ PSTYP KNTTP MENGE MEINS BANFN BNFPO
INTO CORRESPONDING FIELDS OF TABLE I_EKPO
FROM EKPO
FOR ALL ENTRIES IN I_EKKO
WHERE EBELN = I_EKKO-EBELN
AND LOEKZ EQ ''
AND BANFN NE ''
AND BNFPO NE ''.
ENDIF.
SORT I_EKPO BY EBELN.
IF NOT I_EKPO[] IS INITIAL.
SELECT BANFN BNFPO BSART BSTYP FRGDT PREIS PEINH WAERS
INTO CORRESPONDING FIELDS OF TABLE I_EBAN FROM EBAN
FOR ALL ENTRIES IN I_EKPO
WHERE BANFN = I_EKPO-BANFN
AND BNFPO = I_EKPO-BNFPO
AND FRGDT > '00000000'.
ENDIF.
SORT I_EBAN BY BANFN BNFPO.
ENDFORM. " GET_DATA_FROM_DATABASE
*&---------------------------------------------------------------------*
*& Form MERGE_ITABS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MERGE_ITABS .
LOOP AT I_EKPO.
MOVE-CORRESPONDING I_EKPO TO GT_RPT.
APPEND GT_RPT. CLEAR GT_RPT.
ENDLOOP.
LOOP AT GT_RPT.
X_TABIX = SY-TABIX.
READ TABLE I_EKKO WITH KEY EBELN = GT_RPT-EBELN
BINARY SEARCH.
IF SY-SUBRC = 0.
GT_RPT-ZYEAR = I_EKKO-AEDAT(4).
GT_RPT-ZMONTH = I_EKKO-AEDAT+4(2).
GT_RPT-AEDAT = I_EKKO-AEDAT.
GT_RPT-EKGRP = I_EKKO-EKGRP.
MODIFY GT_RPT INDEX X_TABIX TRANSPORTING ZYEAR ZMONTH AEDAT EKGRP.
ENDIF.
READ TABLE I_EBAN WITH KEY BANFN = GT_RPT-BANFN
BNFPO = GT_RPT-BNFPO
BINARY SEARCH.
IF SY-SUBRC = 0.
GT_RPT-FRGDT = I_EBAN-FRGDT.
GT_RPT-PREIS = I_EBAN-PREIS.
GT_RPT-PEINH = I_EBAN-PEINH.
GT_RPT-WAERS = I_EBAN-WAERS.
MODIFY GT_RPT INDEX X_TABIX TRANSPORTING FRGDT PREIS PEINH WAERS.
ENDIF.
READ TABLE I_T024 WITH KEY EKGRP = GT_RPT-EKGRP.
IF SY-SUBRC = 0.
GT_RPT-EKNAM = I_T024-EKNAM.
MODIFY GT_RPT INDEX X_TABIX TRANSPORTING EKNAM.
ENDIF.
CLEAR GT_RPT.
ENDLOOP.
LOOP AT GT_RPT.
W_TABIX = SY-TABIX.
GT_RPT-AMOUNT = GT_RPT-MENGE * GT_RPT-PREIS / GT_RPT-PEINH.
MODIFY GT_RPT INDEX W_TABIX TRANSPORTING AMOUNT.
MOVE-CORRESPONDING GT_RPT TO SUBTOTAL.
APPEND SUBTOTAL. CLEAR SUBTOTAL.
ENDLOOP.
LOOP AT SUBTOTAL.
COLLECT SUBTOTAL INTO SUB_TMP.
ENDLOOP.
SORT GT_RPT BY ZYEAR ZMONTH EKGRP EBELN EBELP.
SORT SUB_TMP BY ZYEAR ZMONTH EKGRP.
ENDFORM. " MERGE_ITABS
*&---------------------------------------------------------------------*
*& Form OUTPUT_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OUTPUT_REPORT .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZF_BEN_TEST01'
VARIANT = ''
DIRECT_CALL = ''
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
ENDIF.
G_CONTROL_PARAM-LANGU = SY-LANGU.
G_COMPOSER_PARAM-TDDEST = 'LP01'.
CALL FUNCTION FM_NAME
EXPORTING
YTESTV = 'SAP Information System Co.'
CONTROL_PARAMETERS = G_CONTROL_PARAM
OUTPUT_OPTIONS = G_COMPOSER_PARAM
USER_SETTINGS = ' '
IMPORTING
JOB_OUTPUT_INFO = G_OUTPUT_INFO
TABLES
GT_ITEM = GT_RPT
SUB_ITEM = SUB_TMP
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. " OUTPUT_REPORT
2008年8月15日 星期五
欄位宣告
1.首先基本需知道簡單型態
C Character
I Integer
F Floating Point Number
X Byte
P Packet Number
N Numeric Text
D Date (YYYMMDD)
T Time (HHMMSS)
基本變數
Element Data :單一變數
Work Area (在這簡稱wa) 多欄變數
Internal Table (在這簡稱為itab) 多行多列變數
2.結構宣告欄位(wa)或是表格(itab)的宣告
是程式將資料庫內的資料抓取暫時存放處
下面舉三個例子
3.接下來宣告輸入畫面的宣告
分為Parameter(單值) 與Select-options(區間)的宣告
以下為一個Parameter與一個Select-options的範例
C Character
I Integer
F Floating Point Number
X Byte
P Packet Number
N Numeric Text
D Date (YYYMMDD)
T Time (HHMMSS)
基本變數
Element Data :單一變數
Work Area (在這簡稱wa) 多欄變數
Internal Table (在這簡稱為itab) 多行多列變數
2.結構宣告欄位(wa)或是表格(itab)的宣告
是程式將資料庫內的資料抓取暫時存放處
下面舉三個例子
************************************************************************
* Working Area & Internal Tables *
************************************************************************
*宣告一個單一變數
DATA: Z_TABIX LIKE SY-TABIX.
*宣告一個wa
DATA: BEGIN OF W_EKKO,
C1 TYPE C,
C2 TYPE C,
END OF W_EKKO.
*宣告一個itab
DATA: BEGIN OF I_EKKO OCCURS 0,
ZYEAR(4) TYPE C,
ZMONTH(2) TYPE C,
EBELN LIKE EKKO-EBELN,
BSTYP LIKE EKKO-BSTYP,
BSART LIKE EKKO-BSART,
AEDAT LIKE EKKO-AEDAT,
EKGRP LIKE EKKO-EKGRP,
END OF I_EKKO.
3.接下來宣告輸入畫面的宣告
分為Parameter(單值) 與Select-options(區間)的宣告
以下為一個Parameter與一個Select-options的範例
************************************************************************
* SELECT-OPTIONS / PARAMETERS *
************************************************************************
*轉檔路徑與監管編碼
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME.
*PARAMETER: P_DATE LIKE EKKO-AEDAT OBLIGATORY,
* P_EKGRP LIKE EKKO-EKGRP.
SELECT-OPTIONS: S_DATE FOR EKKO-AEDAT(6),
S_EKGRP FOR EKKO-EKGRP.
SELECT-OPTIONS: S_DATES FOR SY-DATUM NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK BK1.
2008年8月4日 星期一
程式框架
*&---------------------------------------------------------------------*
*& Report ZTEST001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST001.
************************************************************************
* SAP TABLES *
************************************************************************
TABLES:
************************************************************************
* TYPES and TYPE-POOLS *
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* Working Area & Internal Tables *
************************************************************************
*GW_RPT--output report
************************************************************************
* Include *
************************************************************************
************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
*PARAMETERS: P_GJAHR LIKE SY-DATUM(4) OBLIGATORY.
SELECT-OPTIONS:
* S_WERKS FOR MCHB-WERKS OBLIGATORY DEFAULT '1000'. "Plant
SELECTION-SCREEN END OF BLOCK B1.
************************************************************************
* Initialization *
************************************************************************
INITIALIZATION.
************************************************************************
* AT SELECTION-SCREEN Event *
************************************************************************
AT SELECTION-SCREEN OUTPUT.
**********************************************
AT SELECTION-SCREEN.
************************************************************************
* At User Command *
************************************************************************
AT USER-COMMAND.
************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
************************************************************************
* END-OF-SELECTION Event *
************************************************************************
END-OF-SELECTION.
訂閱:
文章 (Atom)