ABAP:从例子学习ABAP
生活随笔
收集整理的這篇文章主要介紹了
ABAP:从例子学习ABAP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、插入內表行:
*插入內表行: DATA: BEGIN OF man, name(20) TYPE c, high TYPE p DECIMALS 2, weight TYPE p DECIMALS 2, END OF man. DATA: man1 LIKE TABLE OF man. man-name = '張參'. man-high = '1.68'. man-weight = 120. INSERT man INTO TABLE man1. man-name = '劉志'. man-high = '1.78'. man-weight = 160. INSERT man INTO TABLE man1. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP. ULINE. man-name = '錢華'. man-high = '2.22'. man-weight = 220. INSERT man INTO man1 INDEX 3. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP. ULINE. man-name = '錢華'. man-high = '2.22'. man-weight = 220. INSERT man INTO man1 INDEX 1. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP.2、讀取文件
2.1、使用upload函數
*讀放文件 DATA: BEGIN OF man, name(20) TYPE c, high TYPE p DECIMALS 2, weight TYPE p DECIMALS 2, END OF man. DATA: man1 LIKE TABLE OF man. CALL FUNCTION 'UPLOAD' EXPORTING codepage = 'test' filename = 'd:\temp\testa.txt' filetype = 'dat' item = '讀取文件' TABLES data_tab = man1 EXCEPTIONS invalid_filesize = 1 invalid_table_width = 2 invalid_type = 3 no_batch = 4 unknown_error = 5 gui_refuse_filetransfer = 6 OTHERS = 7. IF sy-subrc <> 0. * message id sy-msgid type sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP.?2.2、使用WS_UPLOAD函數
*讀取文件 DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2, END OF man.DATA: man1 LIKE TABLE OF man.CALL FUNCTION 'WS_UPLOAD'EXPORTINGcodepage = 'test'filename = 'd:\temp\testa.txt'filetype = 'DAT'TABLESdata_tab = man1EXCEPTIONSinvalid_filesize = 1invalid_table_width = 2invalid_type = 3no_batch = 4unknown_error = 5gui_refuse_filetransfer = 6OTHERS = 7. IF sy-subrc <> 0. * message id sy-msgid type sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.2.3、使用GUI_UPLOAD函數
*直接讀取文件 DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2, END OF man.DATA: man1 LIKE TABLE OF man.CALL FUNCTION 'GUI_UPLOAD'EXPORTINGfilename = 'd:\temp\testa.txt'FILETYPE = 'DAT' * HAS_FIELD_SEPARATOR = ' ' * HEADER_LENGTH = 0 * READ_BY_LINE = 'X' * DAT_MODE = ' ' * CODEPAGE = ' ' * IGNORE_CERR = ABAP_TRUE * REPLACEMENT = '#' * CHECK_BOM = ' ' * VIRUS_SCAN_PROFILE = * NO_AUTH_CHECK = ' ' * IMPORTING * FILELENGTH = * HEADER = tablesdata_tab = man1 * CHANGING * ISSCANPERFORMED = ' ' * EXCEPTIONS * FILE_OPEN_ERROR = 1 * FILE_READ_ERROR = 2 * NO_BATCH = 3 * GUI_REFUSE_FILETRANSFER = 4 * INVALID_TYPE = 5 * NO_AUTHORITY = 6 * UNKNOWN_ERROR = 7 * BAD_DATA_FORMAT = 8 * HEADER_NOT_ALLOWED = 9 * SEPARATOR_NOT_ALLOWED = 10 * HEADER_TOO_LONG = 11 * UNKNOWN_DP_ERROR = 12 * ACCESS_DENIED = 13 * DP_OUT_OF_MEMORY = 14 * DISK_FULL = 15 * DP_TIMEOUT = 16 * OTHERS = 17 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.2.4、讀取文件小例子
DATA file_table TYPE file_table. "引用FILE_TABLE對象DATA: lt_file_names TYPE filetable, lwa_file_name LIKE LINE OF lt_file_names, lv_subrc TYPE i.SELECT-OPTIONS: i_file FOR file_table NO INTERVALS.AT SELECTION-SCREEN ON VALUE-REQUEST FOR i_file-low. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING * WINDOW_TITLE = * DEFAULT_EXTENSION = * DEFAULT_FILENAME = * FILE_FILTER = initial_directory = 'd:\temp' multiselection = 'X' CHANGINGfile_table = lt_file_names[]rc = lv_subrc "打開文件的數量 * USER_ACTION = EXCEPTIONSfile_open_dialog_failed = 1cntl_error = 2error_no_gui = 3 OTHERS = 4. IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.i_file-sign = 'I'. i_file-option = 'EQ'.LOOP AT lt_file_names INTO lwa_file_name.i_file-low = lwa_file_name.APPEND i_file. ENDLOOP.START-OF-SELECTION.WRITE:'打開文件的數量:',lv_subrc LEFT-JUSTIFIED.WRITE: / '打開文件的數量:',LINES( i_file ) LEFT-JUSTIFIED. LOOP AT i_file.WRITE: / i_file-low. ENDLOOP.3、保存文件
*保存文件 DATA: BEGIN OF man, name(20) TYPE c, high TYPE p DECIMALS 2, weight TYPE p DECIMALS 2, END OF man. DATA: man1 LIKE TABLE OF man. DATA: name TYPE rlgrap-filename, typa TYPE rlgrap-filetype. man-name = '張參'. man-high = '1.68'. man-weight = 120. INSERT man INTO TABLE man1. man-name = '劉志'. man-high = '1.78'. man-weight = 160. INSERT man INTO TABLE man1. man-name = '錢華'. man-high = '2.22'. man-weight = 220. INSERT man INTO man1 INDEX 2. name = 'd:\temp\testad.txt'. typa = 'dat'. CALL FUNCTION 'DOWNLOAD' EXPORTING codepage = 'testa' filename = name filetype = typa item = '文件測試' TABLES data_tab = man1 EXCEPTIONS invalid_filesize = 1 invalid_table_width = 2 invalid_type = 3 no_batch = 4 unknown_error = 5 gui_refuse_filetransfer =6 OTHERS = 7. IF sy-subrc <> 0. * message id sy-msgid type sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.4、格式化輸出
DATA wa LIKE spfli. WRITE:/.WRITE:10'航班承運人',40'航班連接',60'國家代碼',80'起飛城市',100'起飛機場'.5、內表排序
*內表排序 DATA: BEGIN OF man, name(20) TYPE c, high TYPE p DECIMALS 2, weight TYPE p DECIMALS 2, END OF man. DATA: man1 LIKE hashed TABLE OF man with unique key name. man-name = '張參'. man-high = '1.68'. man-weight = 120. INSERT man INTO TABLE man1. man-name = '劉志'. man-high = '1.78'. man-weight = 160. INSERT man INTO TABLE man1. man-name = '錢華'. man-high = '2.22'. man-weight = 220. INSERT man INTO table man1. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP. ULINE. sort man1 ascending by weight descending . skip. uline. LOOP AT man1 INTO man. WRITE: / man-name,man-high,man-weight. ENDLOOP.6、消息
*消息 *--開始 *DATA: msg1(20) TYPE c VALUE '測試'. *DATA: msg2(20) TYPE c VALUE 'ABAP'. *DATA: msg3(20) TYPE c VALUE '消息!'. * *MESSAGE i006(ymess) WITH msg1 msg2 msg3. * *data:BEGIN OF man, * name(30) TYPE c, * high TYPE p DECIMALS 2, * weight TYPE p DECIMALS 2, *END OF man. * *FIELD-SYMBOLS <fsa> LIKE man. *DATA man1 LIKE man. * *man-name = '雨荷'. *man-high = '1.78'. *man-weight = 140. * *ASSIGN man TO <fsa>. *WRITE:/ <fsa>-name, * man-high, *<fsa>-weight. *--結束 *--開始 *DATA: msg1(20) TYPE c VALUE '測試'. *DATA: msg2(20) TYPE c VALUE 'ABAP'. *DATA: msg3(20) TYPE c VALUE '消息!'. * *MESSAGE i001(00) WITH msg1 msg2 msg3. * * *DATA: c1(2) TYPE c, * c2(2) TYPE c, * c3(2) TYPE c, * c4(2) TYPE c, * c5(20) TYPE c VALUE '91* 12*23*344445', * c9(2) TYPE c. * *c9 = '* '. *WRITE: / . *WRITE c5. *SPLIT c5 AT c9 INTO c1 c2 c3 c4 . *WRITE: / c1,c2,c3,c4. *--結束 *--開始 *DATA: msg1(20) TYPE c VALUE '測試'. *DATA: msg2(20) TYPE c VALUE 'ABAP'. *DATA: msg3(20) TYPE c VALUE '消息!'. * *MESSAGE i001(00) WITH msg1 msg2 msg3. * * *DATA: BEGIN OF man, * name(20) TYPE c, * high TYPE p DECIMALS 2, * weight TYPE p DECIMALS 2, *END OF man. * *DATA: man1 LIKE TABLE OF man WITH HEADER LINE, *man2 LIKE TABLE OF man. * *man-name = '張參'. *man-high = '1.68'. *man-weight = 120. *APPEND man TO man1. * *man-name = '劉志'. *man-high = '1.78'. *man-weight = 160. *APPEND man TO man1. * *MOVE man1[] TO man2. * * * WRITE: / man-name,man-high,man-weight. * * *LOOP AT man1. *write: / man1-name,man1-high,man1-weight. *ENDLOOP. *--結束?7、讀取數據表
**讀取數據表 *定義工作區 DATA a_spfli TYPE spfli. *定義內表,請注意有Header line DATA ta_spfli TYPE TABLE OF spfli WITH HEADER LINE. *分隔線 ULINE. WRITE / '使用工作區'. ULINE. * 將數據表逐行轉移至工作區,只讀前5行 SELECT * INTO CORRESPONDING FIELDS OFa_spfli FROM spfli UP TO 5 ROWS.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto. ENDSELECT.ULINE. WRITE / '使用內表'. ULINE. SELECT * INTO CORRESPONDING FIELDS OFTABLE ta_spfli FROM spfli UP TO 5 ROWS. *從數據表讀數據至內表,直接從內表輸出 *如果TA_SPFLI沒有定義Header line,會出錯 LOOP AT ta_spfli.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto. ENDLOOP. ULINE. WRITE / '將內表數據轉移至工作區'. ULINE. LOOP AT ta_spfli INTO a_spfli.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto. ENDLOOP.8、內連接和外連接
*內連接和外連接 *定義結構 DATA: BEGIN OF arcd,carrid TYPE spfli-carrid,connid TYPE spfli-connid,fldate TYPE sflight-fldate,END OF arcd. *工作區 DATA arcd1 LIKE arcd. *關聯數據表,讀取前10條記錄,寫入工作區,并輸出 SELECT spfli~carrid spfli~connid sflight~fldate INTO arcd1 FROM spfliINNER JOIN sflight ON spfli~carrid = sflight~carridAND spfli~connid = sflight~connid UP TO 10 ROWS.WRITE: / arcd1-carrid,arcd1-connid,arcd1-fldate. ENDSELECT.9、使用package size 讀取數據
**使用package size 讀取數據 *定義內表,請注意有Header line DATA wa_spfli TYPE TABLE OF spfli WITH HEADER LINE. *分隔線 ULINE. * 以每次讀取5條記錄,直到讀取所有數據 SELECT * INTO TABLE wa_spfli FROM spfli PACKAGE SIZE 5. *輸出內表記錄LOOP AT wa_spfli.WRITE: / wa_spfli-connid,wa_spfli-carrid,wa_spfli-cityfrom,wa_spfli-cityto.ENDLOOP. *輸出5條記錄后輸出一條橫線ULINE. ENDSELECT.10、交互式列表
**交互式列表 START-OF-SELECTION.WRITE:'初如列表,sy-lsind = ' ,sy-lsind.AT LINE-SELECTION.IF sy-lsind = 1.WRITE: '第二列表,sy-lsind =',sy-lsind.ENDIF.AT LINE-SELECTION.IF sy-lsind = 2.WRITE: '第三列表,sy-lsind =',sy-lsind.ENDIF.?11、列表顏色
**列表顏色 *數據庫表spfli相關 TABLES spfli. SKIP.*輸出表頭,背景灰藍 FORMAT COLOR COL_HEADING. ULINE AT /(91).WRITE: / sy-vline,(15) '航線承運人', sy-vline , (15) '航班連接', sy-vline,(15) '國家代碼', sy-vline,(15) '起飛城市', sy-vline,(15) '起飛機場',sy-vline. ULINE AT /(91). FORMAT COLOR OFF. *輸出內容,輸出關鍵值為‘LH’為紅色 SELECT * FROM spfli.IF spfli-carrid = 'LH'.FORMAT COLOR COL_NEGATIVE.ELSE.FORMAT COLOR OFF.ENDIF.WRITE: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto, sy-vline,(15) spfli-cityfrom,sy-vline,(15)spfli-airpfrom,sy-vline.ULINE AT /(91). ENDSELECT.12、輸出熱點
**輸出熱點 start-of-selection.write '請按'.format hotspot on color 5 inverse on.write '熱點'.format hotspot off color off. at line-selection.write 'welcome!'.13、為列表定義工具條和菜單
*為列表定義工具條和菜單 START-OF-SELECTION. * 設置已使用的狀態條SET PF-STATUS 'STA1'.WRITE:'測試工具條按鈕 '.AT USER-COMMAND. *當單擊按鈕時輸出CASE sy-ucomm.WHEN '&NFO'.WRITE: '已選擇!'.WHEN 'E'.leave to screen 0.when others.WRITE '1111'.ENDCASE.14、在彈出式窗口中顯示列表
*在彈出式窗口中顯示列表 START-OF-SELECTION. * 設置已使用的狀態條SET PF-STATUS 'STA1'.WRITE:'測試工具條按鈕 '.AT USER-COMMAND. *當單擊按鈕時輸出CASE sy-ucomm.WHEN '&NFO'.WRITE: '已選擇!'.WHEN 'E'.leave to screen 0.when others.IF sy-lsind = 1.SET PF-STATUS 'STA1'. *定義子窗口并輸出WINDOW STARTING AT 10 10 ENDING AT 30 20.WRITE '在子窗口輸出!'.WRITE: '請注意!'.ENDIF.ENDCASE.15、隱藏字段技術
**隱藏字段技術 *數據庫表spfli相關 TABLES: spfli, sflight.START-OF-SELECTION.SKIP. *輸出ULINE AT /(91).WRITE: / sy-vline,(15) '航線承運人', sy-vline , (15) '航班連接', sy-vline,(15) '國家代碼', sy-vline,(15) '起飛城市', sy-vline,(15) '起飛機場',sy-vline.ULINE AT /(91).*輸出SELECT * FROM spfli * WHERE carrid = 'UA' AND connid = 3504 .WRITE: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto,sy-vline,(15) spfli-cityfrom,sy-vline,(15) spfli-airpfrom, sy-vline. *隱藏關鍵字HIDE: spfli-carrid,spfli-connid.ULINE AT /(91).ENDSELECT.AT LINE-SELECTION. *只輸出第一頁IF sy-lsind = 1.write : / 'spfli-carrid:',spfli-carrid.write : / 'spfli-connid:',spfli-connid.ULINE AT /(91).WRITE: / sy-vline,(15) '航線承運人', sy-vline , (15) '航班連接', sy-vline,(15) '國家代碼', sy-vline,(15) '起飛城市', sy-vline,(15) '起飛機場',sy-vline.ULINE AT /(91). *根據隱藏字段讀取并打印從表SELECT * FROM sflightWHERE carrid = spfli-carrid AND connid = spfli-connid.WRITE: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto,sy-vline,(15) spfli-cityfrom,sy-vline,(15) spfli-airpfrom, sy-vline.ULINE AT /(91).ENDSELECT.ENDIF.16、使用hide技術從列表讀取行
**使用hide技術從列表讀取行 *數據庫表spfli相關 TABLES: spfli. DATA: sela(1) TYPE c,num TYPE i VALUE 0.START-OF-SELECTION.SKIP. *輸出ULINE AT /(95).WRITE: / sy-vline,'',sy-vline,(15) '航線承運人', sy-vline , (15)'航班連接', sy-vline,(15) '國家代碼', sy-vline,(15)'起飛城市', sy-vline,(15) '起飛機場',sy-vline.ULINE AT /(95).*輸出SELECT * FROM spfli.WRITE: / sy-vline,sela AS CHECKBOX,sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto,sy-vline,(15) spfli-cityfrom,sy-vline,(15) spfli-airpfrom,sy-vline. * 隱藏關鍵字HIDE: spfli-carrid,spfli-connid,spfli-countryto,spfli-cityfrom,spfli-airpfrom.ULINE AT /(95). * 隱藏選擇框,使表格行不會選擇HIDE sela.num = num + 1.ENDSELECT.END-OF-SELECTION. * num1 = sy-lsind - 1.AT LINE-SELECTION.WRITE : 'sy-lsind:',sy-lsind.WRITE : 'num:',num. *只輸出第一頁IF sy-lsind = 1.DO num TIMES. * 讀取行READ LINE sy-index FIELD VALUE sela. * 如果checked,輸出隱含字段IF sela = 'X'.WRITE: / spfli-carrid,spfli-connid,spfli-countryto,spfli-cityfrom,spfli-airpfrom.ENDIF.ENDDO.ENDIF.?
轉載于:https://www.cnblogs.com/miaosj/p/10384232.html
總結
以上是生活随笔為你收集整理的ABAP:从例子学习ABAP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人编程和python的区别_乐高机器
- 下一篇: appium 下载