ABAP 學習筆記一

Abap 的主要工作。

一。 報表的開發。
二。單據的打印。
三。數據的開發
 
*&---------------------------------------------------------------------*
*& Report  YLWY001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  YLWY001.
*WRITE 'MY 003 PROGAM'.
*data wa like spfli.
*WRITE:    10 'MAN',40 'CONNECT', 60 'COUNTRY CODE',80 'START CITY',100 'START PORT'.
*          uline.
*          Select * into wa from spfli.
*WRITE:  / WA-Carrid under 'MAN',
*          WA-Connid under 'CONNECT',
*          WA-Countryfr under 'COUNTRY CODE',
*          WA-cityfrom UNDER 'START CITY',
*          WA-airpfrom UNDER 'START PORT'.
*          endselect.
*      data mytb_spfli type table of spfli with  header line.
*      select * into table mytb_spfli from spfli package size 5.
*       *loop at mytb_spfli.
*       *write: / mytb_spfli-carrid, mytb_spfli-cityfrom,mytb_spfli-airpfrom.
*       *endloop.
*       *uline.
*       *endselect.
*       *data:begin of arcd,
*       *      carrid type spfli-carrid,
*       *      connid type spfli-connid,
*       * end of arcd.
*       * data arcd1 like arcd.
*      * select spfli~carrid spfli~connid into arcd1 from spfli
*       * inner join sflight on spfli~carrid = sflight~carrid up to 10 rows.
*       * write : / arcd1-carrid,arcd1-connid.
*       * endselect.

Tables spfli.
skip .
uline at /(106).
format color col_heading.
write :  / sy-vline,(15) 'man',sy-vline,(15) 'connect',sy-vline, (15) 'code',sy-vline, (15) 'start',
          sy-vline,(30) 'start port',sy-vline.
          uline at /(106).
 format color off.
    select * from spfli.
    write: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryfr,
    sy-vline,(15) spfli-cityfrom,sy-vline,(30) spfli-airpfrom,sy-vline.
    uline at /(106).
    endselect.
 
  write '*5'.
  write /.
  start-of-selection.
  write 'please click'.
  format hotspot on color 6 inverse on.
  write 'hot'.
  format hotspot off color off.
  at line-selection.
  write ' welcome'.
  
ABAP 報表求和統計功能實現方法
在寫abap 的過程中,可能需要統計,求和等
那麼如何實現呢?
其實在loop ... endloop 中間,有個AT <LEVEL>,<…>,ENDAT循環. 其中的<LEVEL>包括: FRIST, LAST, NEW , END OF.這些可以用來進行內表中按某個字段進行分組統計.
FIRST 內 表的第一行
 LAST 內 表的最後一 行
NEW <f> 行組 的開頭,與 字段 <f> 和 <f> 剩餘字段中 的內容相同
 END Of <f> 行組 的結尾,與 字段 <f> 和 <f> 剩餘字段中 的內容相同
 
AT - ENDAT 塊中的語句 塊使用這些 行條件代表 預定義的控 制結構。用 戶可以使用 它們處理內 表中的控制 斷點,而不 必使用 編程分支和循環 中所述的控 制語句自己 編程。
在 AT - ENDAT 語句塊中, 工作區域沒 有用當前表 格行進行填 充。初始化 所有不是標 準關鍵字部 件的字段( 參見
標識表格行 )。對於行 條件 FIRST 和 LAST, 系統用星號 (*) 改寫所有標 準關鍵字段 。對於行條 件 NEW <f> 和 END OF <f>,系 統用星號 (*) 改寫所有出 現在工作區 域中指定字 段 <f> 右邊的標準 關鍵字段。 用戶可根據 自己的需求 在 AT - ENDAT 語句塊中填 充工作區域 。
 
DATA: BEGIN OF LINE,
         COL1 TYPE C,
         COL2 TYPE I,
         COL3 TYPE I,
      END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
LINE-COL1 = 'A'.
DO 3 TIMES.
   LINE-COL2 = SY-INDEX.
   LINE-COL3 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
ENDDO.
LINE-COL1 = 'B'.
DO 3 TIMES.
   LINE-COL2 = 2 * SY-INDEX.
   LINE-COL3 = ( 2 * SY-INDEX ) ** 2.
   APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
   AT END OF COL1.
      SUM."按Col1 求和.
      ULINE.
      WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
      SKIP.
   ENDAT.
   AT LAST.
      SUM."總求和.
      ULINE.
      WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
   ENDAT.
ENDLOOP.
其輸出爲:
A          1          1
A          2          4
A          3          9
________________________________
A          6         14
B          2          4
B          4         16
B          6         36
________________________________
B         12         56
________________________________
*         18         70
   ABAP/4 報表編程模板
ABAP/4 報表編程模板 初學者必看
*&--------------------------------------------------------------*
*& Report  Z_X_XXXXX                                                
*& Module                   :  Module / SubModule                     
*&--------------------------------------------------------------*
*& Created                  :  author  (2003.10.09)                   
*& Modified                 :  author  (someday)                      
*  Intention                :  程序的詳細說明                         
*  請用戶在ABAP/4 REPORT編程時,參考本程序提供的編程框架              
*                       
*  在編碼規範有出入時,以本程序爲準
*  以下各事件可根據實際編程需要使用,對於需要處理的事件,可將該事
*  件後面的語句註釋去掉,再編寫相應的子程序代碼。
*&--------------------------------------------------------------*
INCLUDE Z_X_XXXXXTOP .           " TOP 子程序,用來聲明全局變量
*----以下三個子程序只有在多個程序調用同一邏輯時才建議使用-----*
*INCLUDE Z_X_XXXXXO01 .               " PBO 子程序
*INCLUDE Z_X_XXXXXI01 .               " PAI 子程序
*INCLUDE Z_X_XXXXXF01 .               " form 子程序
INITIALIZATION.
*  PERform  INI_SELECTION_SCREEN.       " 初始化選擇屏上的變量
AT SELECTION-SCREEN.
*  PERform  INI_DATA.                   " 初始化全局變量
START-OF-SELECTION.
*  PERform  PRECESS_DATA.               " 主要數據處理邏輯
AT LINE-SELECTION.
*  PERform  PRECESS_LINE_SELECTED.      " 行選擇時的處理
AT USER-COMMAND.
*  PERform  PRECESS_USER_COMMAND.      * 用自定義命令按鈕時的處理
TOP-OF-PAGE.
*  PERform  PAGE_HEADER.                " 頁眉
END-OF-PAGE.
*  PERform  PAGE_FOOT.                  " 頁腳

*&--------------------------------------------------------------*
*&      form  PRECESS_DATA
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form PRECESS_DATA.
*如果邏輯簡單, 則合併若干form爲一個
 PERform  SEL_DBTAB_XXXXX.   " 從透明表中取數據賦給內表
 PERform  CMP_ITAB_XXXXX.    " 內表中數據計算處理
 PERform  WRT_ITAB_RESULT.   " 輸出內表數據
ENDform.                    " PRECESS_DATA
*&--------------------------------------------------------------*
*&      form  SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form SEL_DBTAB_XXXXX.
select * into corresponding fields of itab_sales
        from bsid
        where bukrs = s_bukrs.
    authority-check object 'Z:FI-00001'
       id 'ACTVT' field '03'
       id 'BUKRS' field itab_sales-bukrs
       id 'GSBER' field itab_sales-gsber.   "權限檢查
if sy-subrc ne 0.                            "權限檢查未通過
continue.
endif.
append itab_sales.
clear itab_sales.
endselect.
ENDform.                    " SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*&      form  CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form CMP_ITAB_XXXXX.
ENDform.                    " CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*&      form  WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form WRT_ITAB_RESULT.
*  PERform WRT_ITAB_SUB.
ENDform.                    " WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*&      form  PAGE_HEADER
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form PAGE_HEADER.
ENDform.                    " PAGE_HEADER
*&--------------------------------------------------------------*
*&      form  INI_DATA
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form INI_DATA.
ENDform.                    " INI_DATA
*&--------------------------------------------------------------*
*&      form  INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form INI_SELECTION_SCREEN.
ENDform.                    " INI_SELECTION_SCREEN
 
 
*&--------------------------------------------------------------*
*& Include Z_X_XXXXXTOP                                             
*&--------------------------------------------------------------*
REPORT   Z_X_XXXXX                   .
*-------------------聲明系統字典對象----------------------------*
TABLES: t001.
*--------------------聲明 Selection-screen 變量-----------------*
SELECTION-SCREEN BEGIN OF BLOCK B1
                         WITH FRAME
                         TITLE TEXT-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_BUKRS  FOR  T001-BUKRS MEMORY ID  BUK.
PARAMETERS:     P_DATE   LIKE SY-DATUM   DEFAULT SY-DATUM.
SELECTION-SCREEN END   OF BLOCK B1.
*--------------------聲明全局變量-------------------------------*
*聲明內表時,表名爲 ITAB_XXXX,後綴儘可能爲關聯DBTab或內表用途
DATA:   bldat  like  bsid-bldat.
RANGES: R_FIELD   FOR   DBTAB-FIELD.
說明:以上是模板程序的框架及說明,在R/3系統的開發環境中有該模板程序(Z_X_XXXXX),建議編程序之前,先將該程序另存一新文件,再根據需要修改這新文件。
*&--------------------------------------------------------------*
*& Report  Z_X_XXXXX                                                
*& Module                   :  Module / SubModule                     
*&--------------------------------------------------------------*
*& Created                  :  author  (2003.10.09)                   
*& Modified                 :  author  (someday)                      
*  Intention                :  程序的詳細說明                         
*  請用戶在ABAP/4 REPORT編程時,參考本程序提供的編程框架              
*                       
*  在編碼規範有出入時,以本程序爲準
*  以下各事件可根據實際編程需要使用,對於需要處理的事件,可將該事
*  件後面的語句註釋去掉,再編寫相應的子程序代碼。
*&--------------------------------------------------------------*
INCLUDE Z_X_XXXXXTOP .           " TOP 子程序,用來聲明全局變量
*----以下三個子程序只有在多個程序調用同一邏輯時才建議使用-----*
*INCLUDE Z_X_XXXXXO01 .               " PBO 子程序
*INCLUDE Z_X_XXXXXI01 .               " PAI 子程序
*INCLUDE Z_X_XXXXXF01 .               " form 子程序
INITIALIZATION.
*  PERform  INI_SELECTION_SCREEN.       " 初始化選擇屏上的變量
AT SELECTION-SCREEN.
*  PERform  INI_DATA.                   " 初始化全局變量
START-OF-SELECTION.
*  PERform  PRECESS_DATA.               " 主要數據處理邏輯
AT LINE-SELECTION.
*  PERform  PRECESS_LINE_SELECTED.      " 行選擇時的處理
AT USER-COMMAND.
*  PERform  PRECESS_USER_COMMAND.      * 用自定義命令按鈕時的處理
TOP-OF-PAGE.
*  PERform  PAGE_HEADER.                " 頁眉
END-OF-PAGE.
*  PERform  PAGE_FOOT.                  " 頁腳

*&--------------------------------------------------------------*
*&      form  PRECESS_DATA
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form PRECESS_DATA.
*如果邏輯簡單, 則合併若干form爲一個
 PERform  SEL_DBTAB_XXXXX.   " 從透明表中取數據賦給內表
 PERform  CMP_ITAB_XXXXX.    " 內表中數據計算處理
 PERform  WRT_ITAB_RESULT.   " 輸出內表數據
ENDform.                    " PRECESS_DATA
*&--------------------------------------------------------------*
*&      form  SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form SEL_DBTAB_XXXXX.
select * into corresponding fields of itab_sales
        from bsid
        where bukrs = s_bukrs.
    authority-check object 'Z:FI-00001'
       id 'ACTVT' field '03'
       id 'BUKRS' field itab_sales-bukrs
       id 'GSBER' field itab_sales-gsber.   "權限檢查
if sy-subrc ne 0.                            "權限檢查未通過
continue.
endif.
append itab_sales.
clear itab_sales.
endselect.
ENDform.                    " SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*&      form  CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form CMP_ITAB_XXXXX.
ENDform.                    " CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*&      form  WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form WRT_ITAB_RESULT.
*  PERform WRT_ITAB_SUB.
ENDform.                    " WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*&      form  PAGE_HEADER
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form PAGE_HEADER.
ENDform.                    " PAGE_HEADER
*&--------------------------------------------------------------*
*&      form  INI_DATA
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form INI_DATA.
ENDform.                    " INI_DATA
*&--------------------------------------------------------------*
*&      form  INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
*       text
*---------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------*
form INI_SELECTION_SCREEN.
ENDform.                    " INI_SELECTION_SCREEN
 
 
*&--------------------------------------------------------------*
*& Include Z_X_XXXXXTOP                                             
*&--------------------------------------------------------------*
REPORT   Z_X_XXXXX                   .
*-------------------聲明系統字典對象----------------------------*
TABLES: t001.
*--------------------聲明 Selection-screen 變量-----------------*
SELECTION-SCREEN BEGIN OF BLOCK B1
                         WITH FRAME
                         TITLE TEXT-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_BUKRS  FOR  T001-BUKRS MEMORY ID  BUK.
PARAMETERS:     P_DATE   LIKE SY-DATUM   DEFAULT SY-DATUM.
SELECTION-SCREEN END   OF BLOCK B1.
*--------------------聲明全局變量-------------------------------*
*聲明內表時,表名爲 ITAB_XXXX,後綴儘可能爲關聯DBTab或內表用途
DATA:   bldat  like  bsid-bldat.
RANGES: R_FIELD   FOR   DBTAB-FIELD.
說明:以上是模板程序的框架及說明,在R/3系統的開發環境中有該模板程序(Z_X_XXXXX),建議編程序之前,先將該程序另存一新文件,再根據需要修改這新文件。
////////////////////////////////////////////////////////////
1,Object Navigator是ABAP工作平臺上衆中開發工具的中心入口,事務代碼爲:se80,其中還有幾個經常會用到的T-CODE: SE38, SE24, SE37.
2,在ABAP Editor中有一個Excute with variant 按鈕,代表通過變量運行(變式與選擇屏幕相關).
3,Editor Pretty Printer ON/OFF的設置: 菜單項: Utilites->settings有相關項,選中Indent,Convert upper/lowercase同Keyword Uppercase.
4,ABAP有三種類型的處理塊:Event blocks, Dialog Modules,Procedures只有後一種可擁有自己的局部變量,而且程序語句是內部調用,前兩者處理塊之間實行外部調用.
5,應用程序類型, 可執行的:以Report關鍵字引導,不能定義功能模塊但可以調用.模塊池的:以Program關鍵字引導,必須通過事務代碼運行.
6,語句鏈 Write: text1, text2. 等同於: Write text1. Write text2.
7,在一個Program中,處於Form和Endform之間的是Subroutines. 該程序由Program引導,不能直接運行,需被調用,不能包含自定義的用戶屏幕.
8,數據內部定義: types type(len) Type type [decimal dec]
data data(len) Type type [decimal dec] [value var]
Decimal 附加項只適用於指定P類型的小數位.
9,兩個結構體進行賦值操作,如果 Source與Destination的組件結構不完全相同,則用
Move-corresponding, eg: move-corresponding source-data to destination-data.
10.在ABAP數據表達式中,關鍵字前後必須有空格,eg: Fault: (a=b+c) true:: a = b + c .
11.在用戶主記錄裏可以設置日期的顯示分隔符,小數點字符和千位分隔符,在system->userprofile->owndata 或T-code: su01.
12,內表是一種大批量數據管理形式,用於在程序運行期間存儲多行結構相同的數據,程序對內表的行操作不能直接進行,必須通過一種接口來傳輸,這個接口就是工作區.
13,ABAP的兩種動態數據對象: Field symbols 與 Data reference.
14,內表有三種形式: standard table , sorted table , hashed table後一種不能進行索引查找,只能通過關鍵字搜索.
15,子程序的定義和調用分別用Form/Endform和perform來實現,如果想生成子程序的代碼框架,則在prefom add處雙擊即可.
1,package的命名規則: begin with A-S or U-X是SAP standard object, begin with Y or Z are customer objects, begin with T are private test package, begin with $ are local package.
2.在數據字典中,每創建一個TABLE,都將生成一個同名的結構化數據類型,其中的組件字段與實際物理數據庫表完全一致.
3,在select查詢中如果要指定多個數據對象,則需要將這些對象放在括號內,並用逗號隔開,eg: select * from spfli into (a, b).
4.Function Module是最爲常用的複用組件,它是獨立的R/3倉庫對象,也是一種過程模塊,在不同的系統間可以通過RFC(Remote function call)技術進行功能模塊的調用.
5,幾個有用的系統函數: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc, sy-bdcnt,sy-index, sy-tabix,sy-dynnr.
6,可用於交互式報表的列表事件有: at line-selection, at user-command 前者爲選擇某行時觸發,後者由某個GUI觸發.
7,在可執行程序中,只要在程序代碼中使用parametes或select-options語句,則在程序運行後就會產生用戶的選擇屏幕.

發佈了2 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章