2010年1月7日 星期四

建立Smartforms

1.T-CODESMARTFORMS
2.選擇表單輸入 表單名稱 按下建立

















3.通用設定-表單屬性 可選擇頁面格式 (本例為DINA4)
4.通用設定-表單介面 維護 匯入與表格
  4.1 匯入為程式呼叫的EXPORTING參數名稱
  CALL FUNCTION FM_NAME
   
EXPORTING
   
YTESTV = 'SAP Information System Co.'
   
CONTROL_PARAMETERS = G_CONTROL_PARAM
   
OUTPUT_OPTIONS = G_COMPOSER_PARAM
   
USER_SETTINGS = ' '
















  4.2 表格為程式呼叫的TABLES參數名稱
TABLES
   GT_ITEM     = GT_RPT
   SUB_ITEM    = SUB_TMP















5.通用設定-通用定義
  5.1通用資料:設定全域變數的宣告
  5.2類型:宣告結構或Type
  5.3初始化:進入程式流程前優先進行之流程

6.開始畫FORM  (按表單繪製器觀看圖型預覽)
  6.1在輸出選項:維護位置和大小、方塊與濃淡(邊線)
  6.2條件:設定條件附合的情況下呈現這個區塊

7.可建立的物件如圖
  7.1 MAIN主視窗:ITEM資料存放區
  7.2建立視窗TOPHEADER資料存放區
  7.3建立視窗ENDEND小計總計或總頁數
  7.4迴圈(LOOP)或程式行(程式碼控制)進行控制資料















  7.5範本:作為細節表格的繪製與內文存放的位址
  7.6內文:作為資料寫出的文本與欄位變式 ( &為變數欄位 )
    7.6.1輸出選項: TAB輸出結構 維護行與欄 ( 設定輸出定位點 )




2009年12月13日 星期日

ABAP常用的T-CODE

T-Code項目T-Code附註
表格  
ABAP/4 Dictionary maintenanceSE11表格 結構 域 加鎖物件 建立與管理
Table view and maintainSE16表格 View
Table views maintainerSM30表格維設產生器
Performance AnalysisST05追蹤畫面上的TABLE名稱
程式開發  
ABAP/4 Function LibrarySE37Function處理器
ABAP/4 EditorSE38程式編輯器
Object BrowserSE80元件總覽器
Maintain messagesSE91訊息編輯器
Maintain Transaction CodesSE93T-Code編輯器
Overview of sersSM04使用者控制清單
Display locksSM12解使用者Lock控制器
Batch job monitoringSM35批次輸入處理器
Overview of ProcessesSM50程式處理概覽
Font Maintenance Bar CodeSE73看Bar Code
Customizing: Execute ProjectSPRO進入後台控制
Change View "Country Global Parameters" OverviewOY01設定國家別(處理小數與千分位)
Conditions for Output ControlNACEoutput type控制條件
Transaction and Screen VariantsSHD0隱藏標準畫面欄位
Configuration of RFC ConnectionsSM59
SAP-DirectoriesAL11查存放資料至網路資料夾路徑
Spool Administration Initial ScreenSPAD印表機格式設定
SE18建立BADI
SE19建立IF
RSA1
UpLoad PICSE78圖型上傳
Search MessagesSE91查看MESSAGES
Creat Query Search ReportSQ01建立Query查詢報表
BDCSHDB錄制BDC
系統T-CODE  
Transport OrganizerSE09Request Display處理器
Transport Management SystemSTMS轉程式DEV TO QAS TO PRD
Legacy System Migration WorkbenchLSMW舊系統轉至新系統資料
Batch Input Session OverviewSM35查看LSMW上傳是否成功
SPAU查看那些程式上傳蓋掉
效能  
ABAP Runtime AnalysisSE30測式程式效能
User ListSM04查看個人花費記憶體資源
Workload MonitorST03N查看程式花費記憶體資源
ABAP Runtime AnalysisSE30查程式跑的時間
ABAP Runtime ErrorST22查程式跑的Error
設立權限物件 T-code  
User MaintenanceSU01使用者維護
User Information SystemSUIM使用者資訊系統
List of Authorization FieldsSU20權限清單
Maintant the Authorization ObjectsSU21維護權限物件
Display Authorization Data for UserSU53查看是否擁有T-CODE權限
Role MaintenancePFCG維護規責
Authorization Objects By Complex Selection CriteriaS_BCE_68001413尋找權限物件
Role MaintenancePFCG規則維護
System MeasurementUSMM人員重覆登入報表
Job 排程   
Define Background JobSM36Background
Creat Planning JobMC8D批次處理:生成計劃
Maintant Variant by JobMC8E批次處理:改變計劃
NetWeaver   
Display and maintain RFC destinationsSM59檢示與維護 RFC 目的地

2009年11月19日 星期四

彈出訊息視窗

在程式編寫時希望在USER對執行某個事件時
回傳一個資訊給USER詢問是否要再向下執行
這時我們可以拋出一個視窗給USER決定與選擇

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
TITLEBAR  = '確認視窗'
 TEXT_QUESTION    = '確認是否執行'
START_COLUMN    = 25
START_ROW      = 6
   IMPORTING
ANSWER        = L_IO
   EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS      = 2
    .
  IF L_IO = '1'.
    PERFORM TRANSFER_DATA.
  ENDIF.
  IF L_IO = '2'.
    MESSAGE S001(00) WITH '已終止傳送...'.
  ENDIF.

2009年11月10日 星期二

BAPI_GOODSMVT_CREATE

庫存盤點在作SCAN BARCODE之後依盤虧盤盈的結果依相同的PLANTStorage Location BY BATCH 去作311 Movement
使用BAPI_GOODSMVT_CREATE 來處理異動
基本結構為六項:Headergm_codegm_head_retmat_docgm_itemreturn


REPORT  ZBEN_AUTO_GT.
************************************************************************
* Data type definition segment
************************************************************************
*Header
DATA: GM_HEADER LIKE BAPI2017_GM_HEAD_01.
*GM_code
DATA: BEGIN OF GM_CODE.
    INCLUDE STRUCTURE BAPI2017_GM_CODE.
DATA: END OF GM_CODE.
*GM_head_ret
DATA: BEGIN OF GM_HEADRET.
    INCLUDE STRUCTURE BAPI2017_GM_HEAD_RET.
DATA: END OF GM_HEADRET.
*Mat_doc
DATA: MAT_DOC LIKE BAPI2017_GM_HEAD_RET-MAT_DOC.
*GM_item
DATA: BEGIN OF GM_ITEM OCCURS 100.
    INCLUDE STRUCTURE BAPI2017_GM_ITEM_CREATE.
DATA: END OF GM_ITEM.
*Return Msg
DATA: BEGIN OF ERRMSG OCCURS 10.
    INCLUDE STRUCTURE BAPIRET2.
DATA: END OF ERRMSG.

************************************************************************
* Selection screen definition segment
************************************************************************
PARAMETERS: P_MATNR LIKE MCHB-MATNR OBLIGATORY.
PARAMETERS: P_WERKS LIKE MCHB-WERKS OBLIGATORY.
PARAMETERS: P_LGORT LIKE MCHB-LGORT OBLIGATORY.

************************************************************************
* Main program entry
************************************************************************
**Header
GM_HEADER-PSTNG_DATE = '20091031'. "SY-DATUM.
GM_HEADER-DOC_DATE   = '20091031'. "SY-DATUM.
** IF PACK_NO NE SPACE.
*    GM_HEADER-REF_DOC_NO = POITEM-PACK_NO "DELIVER NOTE - GR
*    GM_HEADER-HEADER_TXT = POITEM-PACK_NO " FOR GT
** ENDIF.
**Code
GM_CODE-GM_CODE = '04'.
**Item
GM_ITEM-MATERIAL = ' 2C P 906011A F001'.
GM_ITEM-PLANT = 1000.
GM_ITEM-STGE_LOC = ' 14A 1'.
GM_ITEM-BATCH = ' 5M C1680002'.
GM_ITEM-MOVE_TYPE = '311'.
GM_ITEM-MVT_IND = ''.
GM_ITEM-ENTRY_QNT = 2.
GM_ITEM-ENTRY_UOM = 'EA'.
GM_ITEM-MOVE_STLOC = ' 1A 01'.
GM_ITEM-NO_TRANSFER_REQ = 'X'.
APPEND GM_ITEM.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER    = GM_HEADER
GOODSMVT_CODE = GM_CODE   "Transfer posting
*   IMPORTING
*    GOODSMVT_HEADRET = GM_HEADRET
*    MATERIALDOCUMENT = MAT_DOC
*    MATDOCUMENTYEAR   =
  TABLES
GOODSMVT_ITEM = GM_ITEM
RETURN     = ERRMSG
  EXCEPTIONS
OTHERS     = 1.

IF ERRMSG[] IS INITIAL.
  REFRESH: GM_ITEM, ERRMSG.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
  WAIT = 'X'.
ELSE.
*  MESSAGE = ERRMSG-MESSAGE.
  EXIT.
ENDIF.

2009年11月7日 星期六

ALV自訂工具按鈕控制

於ALV的STATUS SET內新增一個自訂的按鈕設定好圖示與回傳CODE
在EVENT這邊呼叫
並讀取 RT_EVENTS的KEY值為SLIS_EV_USER_COMMAND傳回的CODE
這時如果有值時..於內編寫程式要作那些事件

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
  I_LIST_TYPE = 0
    IMPORTING
  ET_EVENTS   = RT_EVENTS.
  READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
   INTO LS_EVENT.
  IF SY-SUBRC = 0.

  ENDIF.

2009年11月2日 星期一

ALV架構

呼叫前必須先完成TYPE-POOLS與ALV的欄位宣告
再程式輸出時呼叫CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'來完成


*&---------------------------------------------------------------------*
*& Report  ZBEN_TEST01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  ZBEN_TEST01 .
************************************************************************
* TYPES and TYPE-POOLS *
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* Working Area & Internal Tables    *
************************************************************************
*ITAB
DATA: BEGIN OF GW_RPT,
    EBELN LIKE EKPO-EBELN,
    EBELP LIKE EKPO-EBELP,
  END OF GW_RPT.
DATA: GT_RPT LIKE GW_RPT OCCURS 0 WITH HEADER LINE.

*ALV
DATA: GT_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV,
  GT_SORTINFO  TYPE SLIS_T_SORTINFO_ALV,
  GT_EVENTS    TYPE SLIS_T_EVENT,
  G_REPID   TYPE SY-REPID,
  L_LAYOUT TYPE SLIS_LAYOUT_ALV,
  L_SELFIELD   TYPE SLIS_SELFIELD,
  SAV_SY_REPID TYPE SY-REPID,
  L_PRINT   TYPE SLIS_PRINT_ALV,
  GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA: BEGIN OF SELTAB OCCURS 0.
    INCLUDE STRUCTURE RSPARAMS.
DATA: END OF SELTAB.
************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: P_EBELN LIKE EKKO-EBELN OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.
************************************************************************
* START-OF-SELECTION Event *
************************************************************************
START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM PROCESS_DATA.
  PERFORM PRINT_DATA.

************************************************************************
* END-OF-SELECTION Event    *
************************************************************************
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&   Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA.
  SELECT EBELN EBELP FROM EKPO
    INTO CORRESPONDING FIELDS OF TABLE GT_RPT
   WHERE EBELN = P_EBELN.
ENDFORM.     " GET_DATA
*&---------------------------------------------------------------------*
*&   Form  PROCESS_DATA
*&---------------------------------------------------------------------*
FORM PROCESS_DATA.
ENDFORM.     " PROCESS_DATA
*&---------------------------------------------------------------------*
*&   Form  PRINT_DATA
*&---------------------------------------------------------------------*
FORM PRINT_DATA.
  G_REPID = SY-REPID.
  PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
  PERFORM SORTINFO_INIT USING GT_SORTINFO[].
  PERFORM EVENTS_INIT   USING GT_EVENTS[].
  PERFORM LAYOUT_INIT   USING L_LAYOUT.
  PERFORM PRINT_INIT    USING L_PRINT.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
    I_CALLBACK_PROGRAM    = G_REPID
    IT_FIELDCAT   = GT_FIELDCAT[]
    IT_SORT   = GT_SORTINFO[]
    IT_EVENTS     = GT_EVENTS
    IS_LAYOUT     = L_LAYOUT
    I_SAVE    = 'A'
    IS_PRINT = L_PRINT
   TABLES
    T_OUTTAB = GT_RPT.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.     " PRINT_DATA
*---------------------------------------------------------------------*
*    FORM fieldcat_inite    *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT USING IT_FIELDCATE TYPE SLIS_T_FIELDCAT_ALV.
  DATA: ST_FIELDCATE TYPE SLIS_FIELDCAT_ALV.
  ST_FIELDCATE-TABNAME = 'IT_RPT'.
  ST_FIELDCATE-FIELDNAME   = 'EBELN'.
  ST_FIELDCATE-SELTEXT_L   = '單號'.
  ST_FIELDCATE-OUTPUTLEN   = 10.
  ST_FIELDCATE-KEY = 'X'.
  APPEND ST_FIELDCATE TO IT_FIELDCATE.
  CLEAR  ST_FIELDCATE.
  ST_FIELDCATE-TABNAME = 'IT_RPT'.
  ST_FIELDCATE-FIELDNAME   = 'EBELP'.
  ST_FIELDCATE-SELTEXT_L   = '項次'.
  ST_FIELDCATE-OUTPUTLEN   = 10.
  ST_FIELDCATE-KEY = 'X'.
  APPEND ST_FIELDCATE TO IT_FIELDCATE.
  CLEAR  ST_FIELDCATE.
ENDFORM.
*---------------------------------------------------------------------*
*    FORM sortinfo_init     *
*---------------------------------------------------------------------*
FORM SORTINFO_INIT  USING IT_SORTINFOE TYPE SLIS_T_SORTINFO_ALV.
  DATA: ST_SORTE TYPE SLIS_SORTINFO_ALV.
ENDFORM.
*---------------------------------------------------------------------*
*    FORM events_init   *
*---------------------------------------------------------------------*
FORM EVENTS_INIT USING RT_EVENTS TYPE SLIS_T_EVENT.
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
   EXPORTING
    I_LIST_TYPE = 0
   IMPORTING
    ET_EVENTS   = RT_EVENTS.
  READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
   INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE 'TOP_OF_PAGE' TO LS_EVENT-FORM.
    MODIFY RT_EVENTS FROM LS_EVENT INDEX SY-TABIX.
  ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
*    FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
    RS_SELFIELD TYPE SLIS_SELFIELD.
  L_SELFIELD = RS_SELFIELD.
ENDFORM.
*&---------------------------------------------------------------------*
*&   Form  LAYOUT_INIT
*&---------------------------------------------------------------------*
FORM LAYOUT_INIT USING P_L_LAYOUT TYPE SLIS_LAYOUT_ALV.
  P_L_LAYOUT-ZEBRA  = 'X'.
ENDFORM.     " LAYOUT_INIT
*&---------------------------------------------------------------------*
*&   Form  PRINT_INIT
*&---------------------------------------------------------------------*
FORM PRINT_INIT USING  P_L_PRINT TYPE SLIS_PRINT_ALV.
ENDFORM.     " PRINT_INIT

2009年10月20日 星期二

VA03 Enhancement Addon Field

想在VA01 VA02 VA03的畫面上加入一個欄位

這時先在TABLE VBAK APPEND一個新的結構

取得Object Key才能接下以下的動作
首先要找到的事情就是「User-Exit」
知道後才能再向下修改....

於前面的文章都已記錄過如何建立Table與Layout畫面了(不重覆介紹)


接下來要在Enhancement的Screen中作Layout 增加新欄位

取得Screen在裏面加入例如 ( Sales Document Header User Exit Header )

生成的程式 於PROCESS BEFORE OUTPUT.作MODULE編寫


程式中需要作控制VA01 VA02是Input模式

VA03則是Display模式

case vbak-vbtyp.
when 'C' or 'I' or 'G'.
CASE t180-trtyp.
WHEN 'H' or 'V'. "Create or Change mode
Loop at screen.
If screen-group1 = 'GP1'.
Screen-input = 1.
Modify screen.
else.
Screen-active = 0.
Modify screen.
Endif.
Endloop.

WHEN 'A'. " Display mode
Loop at screen.
If screen-group1 = 'GP1'.
Screen-input = 0.
Modify screen.
else.
Screen-active = 0.
Modify screen.
ENDIF.
ENDLOOP.
ENDCASE.

when others.
Loop at screen.
If Screen-group1 = 'GP1'.
Screen-active = 0.
Modify screen.
ENDIF.
ENDLOOP.

ENdcase.