SAP及ABAP綜合培訓教案_第1頁
SAP及ABAP綜合培訓教案_第2頁
SAP及ABAP綜合培訓教案_第3頁
SAP及ABAP綜合培訓教案_第4頁
SAP及ABAP綜合培訓教案_第5頁
已閱讀5頁,還剩268頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SAP及ABAP綜合培訓教案ABAPTrainingSAP及ABAP/4Overview系統開發語言創建企業報表應用事務開發商用文檔設計6/7/2025SAP介紹ERP巨人SAP:創立于1972年,ERP思想的倡導者,ERP領域中處于領導地位,全球最優秀的企業管理軟件供應商SAP:System,ApplicationandProductsinDataProcessing,即數據處理的系統、應用和產品6/7/2025SAPR/3——一體化ERP系統客戶/服務器FI財務會計CO財務控制TR司庫PS項目管理WF工作流程管理IS行業解決方案MM物料管理HR人事管理SD銷售與分銷PP生產計劃QM質量管理PM工廠維護后勤系統財務系統人力資源客戶及工業部門的特殊要求6/7/2025SAP新的業務模塊和組件CRM顧客關系管理SCM供應鏈管理BW商業信息倉庫APO高級計劃與優化(AdvancedPlannerandOptimizer)6/7/2025R/3主要業務模塊介紹生產計劃控制物料管理銷售與分銷財務會計管理會計人力資源6/7/2025SAP其他業務模塊跨應用組件(CA,Cross-ApplicationCompo-nents)基礎系統組件(BC,BasisComponents)品質管理(QM,QualityManagement)資產管理(AM,AssetsManagement)6/7/2025

SAP業務流程S&D

銷售訂單

PP主生產計劃物料需求計劃采購訂單庫存管理生產執行開票運輸生產訂單發票校驗成本財務MMCO/FI6/7/2025ERP實施步驟總體規劃,分步實施教育和培訓原形測試數據準備系統開發模擬運行切換6/7/2025SAP實施Roadmap6/7/2025SAP實施結構設計實施過程中需要多少個R/3系統需要多少個Client,具體任務是什么各個集團將如何分布在不同的系統中——通常將“開發”、“質量控制(測試)”、“產品”分別置于三個不同系統的不同集團中6/7/2025開發過程中標準制定制定命名規則:自定制的所有對象應當以“Z”或“Y”開頭;避免命名沖突界面風格指南:應與SAP的標準保持一致文檔維護:項目文檔:項目設計、實施進度等最終用戶文檔:對象說明、程序說明等技術說明文檔:程序代碼說明、程序規格等修訂列表維護:對所有對象的修改清單對象模塊化、在線文檔標準等6/7/2025ABAPTrainingSAP及ABAP/4Overview系統開發語言創建企業報表應用事務開發商用文檔設計6/7/2025R/3開發平臺介紹R/3體系結構R/3倉庫與開發平臺系統開發工具第一個ABAP程序ABAP數據字典介紹6/7/2025R/3邏輯體系結構邏輯上分為顯示層、應用層、數據庫層數據庫層:主要業務數據及開發過程中的程序和元數據通過關系數據庫管理系統進行操作;應用層:從數據層提取數據進行處理或者存儲新數據顯示層:SAPGUI,系統和用戶間的接口,用戶通過該層訪問系統應用、輸入新數據并接受工作過程的處理結果6/7/2025SystemArchitectureandABAPProgram6/7/2025ExcerptforanABAPProgram6/7/2025InteractionBetweenServerLayers6/7/2025R/3倉庫R/3倉庫儲存所有SAP系統開發過程中的對象,這些對象也被稱之為倉庫對象:ABAP程序數據庫表結構定義系統數據類型倉庫對象不是企業業務數據,而是系統內部數據,與Client無關倉庫對象要從R/3系統傳入另一R/3系統,需要開發類別輔助6/7/2025StructureoftheRepository6/7/2025開發類別倉庫對象創建時,需要指定所屬的開發類別倉庫對象在R/3倉庫中按照開發類別分類,這些對象的集合形成的組織單元即為開發類別開發類別的主要功能是對倉庫對象進行管理(目錄管理及傳輸控制管理等)開發類別中所包含的倉庫對象可以通過對象瀏覽器(SE80)查看和維護開發類是ABAP工作臺對象,其修改通過TransportOrganizer記錄,開發類別的開發類別是其自身6/7/2025TransportingDevelopmentObjects6/7/2025ABAP工作臺工具介紹(1)對象導航器:ObjectNavigator,通過開發類別組織R/3對象的瀏覽及維護程序編輯器:ABAPEditor,編輯ABAP程序代碼數據建模器:Datamodeler,業務數據建模工具數據字典:ABAPDictionary,定義系統數據類型及數據庫對象簡單報表創建器:ABAPQuery6/7/2025ABAP工作臺工具介紹(2)函數創建器:FunctionBuilder,創建功能模塊類創建器:ClassBuilder,創建ABAP類及方法等面向對象元素菜單繪制器:MenuPainter,用于創建屏幕的標題、菜單、工具欄中的元素及功能設定屏幕繪制器:ScreenPainter,用于創建SAP標準屏幕工作臺管理器:WorkbenchOrganizer,用于管理修改請求6/7/2025ABAPWorkbenchTools6/7/2025對象導航器ABAP工作臺的眾多開發工具的中心入口,可對各種R/3倉庫對象進行維護,具體見下圖事務碼:SE80包括導航區域、對象瀏覽及工具區域三大塊導航區域:對象列表選擇及名稱輸入區域對象列表:對象列表機上下文菜單(contextmenu)工具區域:ABAP工作臺工具、工具欄、菜單、標準工具欄、應用工具欄及附屬窗口等6/7/2025ABAP對象導航器圖例導航區域工具區域對象列表附屬窗口6/7/2025ABAP編輯器路徑事務碼SE386/7/2025Abap程序及相關介紹ABAPadvancedbusinessapplicationprogramming

是“高級商業應用編程”的縮寫“HelloWorld”程序系統程序實例:ABAPDOCU、DWDM6/7/2025ABAP(DDIC)數據字典介紹數據字典:定義和管理數據元素及數據庫元素的中心工具,所有的數據庫表結構及系統全局數據類型等都需要在其中創建并維護功能:自定義系統共用數據類型(基本類型、結構和表)定義數據庫對象結構(數據庫表、視圖和索引等)進行屏幕字段的格式化、編輯,比如F1和F4幫助事務碼:SE116/7/2025SE116/7/2025ABAPTrainingSAP及ABAP/4Overview系統開發語言創建企業報表應用事務開發商用文檔設計6/7/2025企業報表類型靜態報表交互式報表6/7/2025報表格式6/7/2025一般報表6/7/2025ALV報表(一)6/7/2025ALV報表(二)6/7/2025ABAPTrainingSAP及ABAP/4Overview系統開發語言創建企業報表應用事務開發商用文檔設計6/7/2025對話編程簡介事務是實施與用戶對話的程序。在典型的對話中,用戶可以在系統顯示的屏幕上輸入或請求信息。作為對用戶輸入或請求的響應,程序執行適當的動作:轉到下一個屏幕,顯示輸出或更改數據庫。SAP系統中的每個對話都是由動態程序控制的。動態程序包含一個屏幕和它的流邏輯并且精確控制一個對話步驟。流邏輯決定在顯示屏幕前(輸出前的PBO處理)和接收到用戶在屏幕上制作的條目后(輸入后的PAI處理)進行的處理。6/7/2025Dialog示例6/7/2025ABAPTrainingSAP及ABAP/4Overview系統開發語言創建企業報表應用事務開發商用文檔設計6/7/2025主要工具SMARTFORMSSCRIPT6/7/2025SMARTFORM6/7/2025謝謝大家Q/A6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理程序調試6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025ABAP程序結構ABAP是一種事件驅動語言,包括:數據定義:整個程序中可見的全局數據類型和數據對象處理塊(Processingblocks):ABAP程序的主要結構單元,除數據定義和聲明語句外的所有ABAP語句都必須隸屬于某一個處理塊ABAP程序基本結構如下圖所示:程序內部全局數據定義對話模塊事件塊子程序等ABAP程序6/7/2025處理塊類型事件塊(Eventblocks):事件關鍵字開頭,至下一事件關鍵字出現(或程序結束),無事件結束關鍵字報表事件:Initialization,Start-of-selection列表事件:At-line-selection屏幕事件(對話事件):Processbeforeoutput,processafterinput對話模塊(DialogModules):有開始和結束關鍵字,用于事務程序設計,從屬于對話事件,在對話事件塊中調用過程(Procedure):有開始和結束關鍵字,獨立的程序單元,包括功能模塊和子程序、ABAP對象的類方法6/7/2025StructuresandProcedures6/7/2025ABAP處理塊調用范例REPORTz_processing_blocks.DATA:text1(20)TYPEcVALUE'BasicList:',text2(20)TYPEcVALUE'SecondaryList:'.*Processingblock1:Eventblock--Start-of-selectionSTART-OF-SELECTION.DO5TIMES.PERFORMfrm_output_lineUSINGsy-index.ENDDO.*Processingblock2:Eventblock--atline-selectionATLINE-SELECTION.WRITE:/text2,sy-lsind.*Processingblock3:Procedure--subroutinefrm_output-lineFORMfrm_output_lineUSINGp_index.WRITE:/text1,sy-lsind,'Value:',p_index.ENDFORM.6/7/2025ABAP處理塊調用范例——運行結果6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025程序類型的設定程序類型包括應用程序類型和其它程序類型,在創建程序時在程序屬性中設定,如下圖所示:6/7/2025應用程序類型可執行程序(ExecutableProgram):創建報表,由Report關鍵字引導,可包括屏幕,可包含除功能模塊外的所有處理塊,可直接在ABAP編輯器中運行,類型代碼為1。對應為報表程序模塊池(ModulePool):由Program關鍵字引導,包括自定義的屏幕和對話模塊,必須通過事務碼運行,類型代碼M。對應為事務程序(也叫對話程序、動態程序)6/7/2025其它程序類型不可直接運行,可為ABAP程序提供模塊化單元,包括:功能組(FunctionGroup):由Function-pool語句引導,包含一個或多個功能模塊,類型代碼為F類庫(ClassPool):由Class-pool語句引導,類型代碼K接口庫(InterfacePool):由Interface-pool語句引導,類型代碼J子程序池(Subroutinepools):由Program語句引導,類型代碼S,包含子程序代碼或類方法類型組(Typegroups):由Type-pool語句引導,在數據字典中定義,無類型代碼包含程序(IncludeProgram):不需要語句引導,類型代碼I,只是代碼復用,可直接插入其它程序中,成為該程序一部分6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025程序元素類型ABAP元素:在ABAP編輯器中維護的元素屏幕元素:通過屏幕繪制器維護的元素GUI元素:通過菜單繪制器維護的元素6/7/2025程序元素源代碼(sourcecode)變式(Variants):與選擇屏幕相關,用于存放輸入的數據選擇值,以便反復調用該程序時重復輸入數據文本元素(Textelements):存儲于文本池中的文本,包括文本符號、選擇文本、列表標題等文檔(Documentation):寫給用戶的說明,用于解釋程序的功能、使用方法等文本元素和文檔均具有語言相關性,可以由系統翻譯工具進行翻譯6/7/2025文本元素維護界面6/7/2025屏幕元素SAP標準屏幕(Screen):多用于SAP事務程序設計,包括屏幕布局(Layout)和流邏輯(FlowLogic)選擇屏幕(SelectionScreen):多用于報表程序中接受用戶輸入報表的選擇標準,可通過ABAP語句控制其輸出格式傳統列表屏幕(Lists):只包含列表輸出區域,伸出內容通過write和uline等ABAP語句生成6/7/2025GUI元素為屏幕的一個組成部分,但設計時獨立于屏幕存在,各種屏幕都可以獨立分配GUI包括屏幕上方的菜單、標準工具欄、應用工具欄以及功能鍵和功能代碼等GUI元素在程序調用時分為狀態(GUIstatus)和標題(GUITitle)兩部分6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025ABAP語句結構以一個ABAP語句關鍵字引導,句號結束ABAP語句中還可以含附加項和操作元素各關鍵字、選項、操作數之間應至少保留一空格范例:

Reportz_simple_program. DataText(20)VALUE‘Simpleprogram’. Start-of-selection. WRITEtext.6/7/2025ABAP語句類型(1)聲明語句:用于數據元素的定義和聲明(如變量)DATA,PARAMETER,TABLES,TYPES模塊化語句:用于定義運行時的處理代碼塊,分為事件關鍵字語句和過程定義關鍵字語句事件關鍵字包括:AT-SELECTION-SCREEN,START-OF-SELECTION,ATUSER-COMMAND過程定義關鍵字包括:FORM/ENDFORM,FUNCTION/ENDFUNCTION,MODULE/ENDMODULE控制語句:以條件控制程序處理塊內部的程序流程IF/ENDIF,WHILE/ENDWHILE,CASE/ENDCASE6/7/2025ABAP語句類型(2)調用語句:用于調用已定義好的處理塊PERFORM,CALL,SUBMIT,LEAVETO操作語句:用于程序內部數據操作或輸出WRITE,MOVE,ADD以及運算符等數據庫語句:用于數據庫操作,含OpenSQL和NativeSQL兩種6/7/2025語句鏈關鍵字“:”和“,”可以把連續使用的相同關鍵字引導的語句連接在一起,以簡化代碼,如:WRITE:text1,text2.等價于WRITEtext1.WRITEtext2.6/7/2025注釋“*”,在行的開頭使用,可注釋該行“””,單個雙引號,可注釋該行中其后的文字,如下所示

*Thiswholelineiscomments WRITEtext. “Contentsbehindsthisiscomments6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025程序調用直接運行:在事務SE38或SA38中直接運行通過系統目錄或者在命令域中輸入事務代碼運行內部調用:事務代碼調用:LEAVETOTRANSACTION,CALLTRANSACTION(調用返回)SUBMIT,SUBMITANDRETURN(調用返回)6/7/2025程序結束自動結束:程序完全運行,自動結束強制結束:通過LEAVEPROGRAM.語句可以在任意點結束程序6/7/2025ABAP語言概述程序結構程序類型程序元素語句格式程序運行內存管理6/7/2025內存管理(1)運行時內存管理與用戶對話相關(同一個用戶和系統進行最多六個SAPGUI對話),包括SAP內存和ABAP內存兩部分主對話:又稱外部對話,用戶登錄SAP之后,即開始和應用服務器之間的主對話,各對話間無聯系內部對話:在主對話中運行可執行程序或者模塊池程序,開始內部對話調用序列:調用不返回,新程序內部對話代替原程序內存,并刪除原程序內存;調用返回時,生成程序調用序列,生成堆棧,調用結束時,恢復上一級程序內存狀態6/7/2025內存管理(2)ABAP內存:主對話內部有一個ABAP內存區域,在該對話內部,可通過EXPORTTO和IMPORTFROMMEMORY在內存堆棧之間進行數據傳遞,以隊列的方式存儲SAP內存:所有對話都可以訪問的內存區域,可在SAP各對話間共享,通過SETPARAMETER和GETPARAMETER訪問裝載程序:調用或執行程序時,程序實例被裝載到ABAP內存,第一個被裝載的程序為主程序;程序裝載,觸發LOAD-OF-PROGRAM事件對象創建:創建對象(CREATEOBJECT),類的實例被裝載到內部對話,該內部對話中的程序及對象都可以使用該類實例6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理6/7/2025數據定義與宣告語句DATA:用于定義變量以及內表、工作區間TYPE:定義類型TABLES:宣告某一個系統中的表或者結構,以便于程序中使用,同時創建表的工作區間CONSTANTS:定義一個常量Parameters、selection-options6/7/2025數據對象生存周期:程序的運行期保存:存儲于數據庫或者輸出到文件范例:

DATAtxt1(15)TYPEcVALUE‘DataObject’.初始值類型為字符串存儲長度15個字節6/7/2025數據類型體系基本類型(ElementTypes)分為固定長度和可變長度兩種固定長度(C、N、T、D、I、P、F、X)可變長度String、XString復雜類型結構類型:結構體表類型:內表引用類型:基于基本數據定義參考變量的數據參考變量的對象6/7/2025基本類型固定長度6/7/2025基本類型可變長度String:字符串,如’AString’XString:十六進制字符串,如’A3FF’6/7/2025補充文本文字最長可達255個字符。如果某文本文字包含引號,必須重復引號,以使系統能夠將內容識別為文本文字而不是文字的結尾。新壓縮類型P在系統中存放時所占內存空間只有同長度的浮點數、整數的一半數字字符N,實際上是一個字符串,但是其中的字符只能是數字。如果給該類型變量賦值不足與定義的長度,系統會自動在左邊補零6/7/2025確定數據對象屬性DESCRIBE語法格式:

DESCRIBEFIELDf[LENGTH][TYPEt[COMPONENTSn]][OUTPUT-LENGTHo][DECMIALSd][EDITMASKm][HELP-IDh]變量:LENGTH,對象長度TYPE,對象類型OUTPUT-LENGT,確定輸出長度DECIMALS,確定P類型數據對象的小數位長度EDITMASK確定在數據字典中定義轉換例程HELP-ID確定數據字典中定義的F1幫助信息6/7/2025其他定義方式DataAlikeB.Emp:Data:matnrlikemara-matnr,datelikesy-datum.6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理程序調試6/7/2025基本的數據操作——數據賦值MOVE:把源字段的值賦給目標變量,如MOVEsourceTOdestination. 等價于Destination=source.注意事項:源對象和目標完全兼容(類型,長度等),則賦值過程中結果不變不完全兼容但可以進行類型轉換,按固定的轉換規則轉換不兼容且不能轉換,則不能賦值,提示語法錯誤或者編譯過程中有錯誤,否則會出現運行時錯誤6/7/2025基本的數據操作——結構體賦值兩個結構體組件結構完全一致,可以直接賦值,如stur1=stur2兩結構體組件結構不完全一致,但有部分組件有對應關系,可逐個組件賦值或者使用move-correspondingstru1tostru2.語句賦值6/7/2025基本的數據操作——初始值設定將已經賦值的變量值清空,恢復為初始狀態,采用clear語句,如:clearg_var1.Clear基本數據類型:初始值根據數據類型定Clear結構體類型:逐層、逐個組件拆分按上一規則執行Clear內表,清除內表表頭數據語句為:clearit_test.;清除內表標題數據語句為:clearit_test[].或者refreshit_test.引用類型數據:恢復初始狀態,不指向任何數據對象6/7/2025數值運算——算術預算語句6/7/2025數值運算——算術預算原則運算后賦值時需要注意類型轉換多種數學表達式共存時注意優先級除法/整除運算時要注意除數不能為0運算符號及括號都是ABAP關鍵字,前后都需要有空格使用P類型進行計算時,程序屬性FixedPointedarithmetic沒有選中的話,運算時會被當作整數類型進行處理兩個結構體同名字段也可以整體進行算術運算,語句為ADD-CORRESPONDING,前綴和運算關鍵字一樣6/7/2025數值運算——任意類型參數的數學函數6/7/2025數值運算——浮點數類型的數學函數6/7/2025數值運算——時間日期運算系統將日期時間先轉換為數值類型,根據這兩種特殊的類型進行合理的增減,如下所示DATA:secondsTYPEi,hoursTYPEi,time1TYPEtVALUE'100000',time2TYPEtVALUE'080000'.seconds=time1-time2.hours=seconds/3600.WRITE:/'Secondsbetweentime1andtime2:',seconds,/'Hoursbetweentime1andtime2:',hours.6/7/2025數據輸出——基本輸出格式數據輸出及格式化語句:WRITE,ULINE,FORMAT,SKIP.基本輸出語法如下:WRITE[/]f.ULINE.FORMATcolor….SKIPn.6/7/2025基本數據類型的默認輸出模式6/7/2025格式化輸出(write語句)語法格式:write…f<format_options>.具體的格式化選項請參考F1幫助在用戶主記錄中,可以設置輸出時顯示的日期分隔符、小數點字符和千分符等選項,進入方式為:任意一SAP屏幕的菜單System->UserProfile->Owndata6/7/2025邏輯表達式基本格式:…f1<operator>f2…通用邏輯表達式列表6/7/2025邏輯表達式——特殊操作符ISINITIAL:檢查變量是否是初始值BETWEEN:檢查對象的值是否屬于特定范圍之間:…f1betweenf2andf3…IN:用于檢查數據對象的內容是否遵從某個選擇表的邏輯條件選擇表:一種特殊的內表,每一行包含一個特定的邏輯條件,DATAseltablikerangeoff.組合邏輯表達式:AND,OR,NOT,如下IF(ALTN)and(NGTF).6/7/2025邏輯表達式——比較兩種類型數據兼容類型:不需要做轉換,按照通常的比較方式進行不兼容類型:可轉換的則先轉換,轉換規則:操作數之一為F類型,則其他操作數轉為F類型操作數無F類型,之一為P類型,則其他操作數轉為P類型無F,P類型,之一為T或D類型,其他操作數轉為T或D類型無F,P,T,D類型,之一為C類型且其他為X類型,X類型轉為C類型操作數之一為C類型,其他為N類型,則兩種類型均轉換為P類型比較結構化數據:可轉換,則逐個組件比較;若不可轉換,則先轉為C類型在比較比較內表:首先決定于行數,若行數相同,則逐行逐個組件進行比較;如果使用等于之外的操作副,則系統找到不對等的組件即停止比較并返回結果6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理程序調試6/7/2025結構控制程序處理塊內部的代碼由下列三種結構組織順序結構:程序順序執行分支結構:根據不同的條件執行不同的語句塊循環結構:反復執行某個語句塊在ABAP中,控制結構都是在程序處理塊內部的,作用范圍不能超出一個處理塊,所以稱為處理塊內部塊內部控制6/7/2025分支控制包括兩種分支控制條件分支語句:IF/ENDIFIfconditions. ...elseifconditions. …Endif.CASE/ENDCASECASEf.whenf1[orf2or…]…when……whenothers.…Endcase.6/7/2025循環控制——無條件循環無條件循環,使用DO語句實現

DO[ntimes]. … ENDDO.N用于控制循環次數,可以是數字或者變量如果N為0或者負數,則不進入該循環;如果不限定N的值,則需要用EXIT(推出當前循環),STOP或REJECT等語句強制結束循環,避免死循環系統變量SY-INDEX為已經處理過的循環次數值,DO循環可以嵌套,SY-INDEX為當前循環的次數6/7/2025無條件循環范例REPORTz_do_loop.DATA:out_indexTYPEi,in_indexTYPEi.DO2TIMES.out_index=sy-index.WRITE:/out_index.SKIP.DO3TIMES.in_index=sy-index.WRITE:out_indexNO-GAP,'-'NO-GAP,in_indexLEFT-JUSTIFIED.ENDDO.SKIP.ENDDO.6/7/2025條件循環使用WHILE語句實現,進入循環之前,先檢查語句中邏輯表達式的值,如果為真,執行后面的語句;當邏輯值不再為真或者執行到中止語句時,結束循環,語句格式如下:

WHILE<condition>.……ENDWHILE.SY-INDEX包含已執行的循環次數,可以嵌套循環,要避免死循環問題,一般需要在程序中修改邏輯表達式某變量值,確保一定次數后語句條件為假,否則語句塊中必須含有循環中止語句6/7/2025條件循環語句范例REPORTz_while_loop.DATA:g_lenthTYPEi,g_str01(30)TYPEcVALUE'Beijing2008'.WHILEg_str01NEspace.g_lenth=sy-index.SHIFTg_str01.ENDWHILE.skip5.WRITE:/'Lengthofg_str01:',g_lenth.注釋:該程序確定字符串的有效長度,每次執行循環時,將字符串左移一位,直到其僅包含空格為止6/7/2025循環的中止無條件循環:設定循環次數實現中止條件循環:在循環過程中修改邏輯表達式中變量的值,使條件語句為假強制結束循環語句CONTINUE用于無條件中止當前循環,運行該語句后跳過當前語句塊所有生于語句執行——但并非結束循環,而是開始下一輪循環或條件判斷CHECK用于有條件中止當前循環,與CONTINUE語句類似EXIT,無條件中止循環,系統退出當前循環,繼續執行當前循環后面的代碼,嵌套循環時執行上一級循環STOP、REJECT,退出循環并無條件結束程序6/7/2025循環中止范例REPORTz_terminate_loop.DO4TIMES.IFsy-index=2.CONTINUE.ENDIF.WRITEsy-index.ENDDO.SKIP.DO4TIMES.CHECKsy-indexBETWEEN2AND3.WRITEsy-index.ENDDO.SKIP.DO4TIMES.IFsy-index=3.EXIT.ENDIF.WRITEsy-index.ENDDO.6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理程序調試6/7/2025處理字符數據字符數據操作連接字符串拆分字符串查找字符串替換字符串內容確定字符串長度其他操作語句字符串比較定位操作字符串6/7/2025字符數據操作——連接字符串語句關鍵字:CONCATENATEconcatenates1…snintos_dest[separatedbysep]連接字符串s1~sn并將結果賦給字符串s_destseparatedby用于指定一個字符(串)作為分隔符如果連接字符串后的總長度超過目標字符串長度,則把結果截斷后賦值;一旦出現截斷情況,sy-subrc為4,否則為0為了避免截斷,可以把目標字符串定義為string類型6/7/2025連接字符串范例REPORTz_string_concatenate.data:g_s1(9)typecvalue'Firstname',g_s2(10)typecvalue'Secondname',g_s3(20)typec,g_sp(1)typecvalue'.'.concatenateg_s1g_s2intog_s3.write/g_s3.concatenateg_s1g_s2intog_s3separatedbyg_sp.write/g_s3.6/7/2025字符數據操作——拆分使用SPLIT語句可將字符串拆分未多個小串

splitsourceatsepintos1…sn.在源字符串中搜索分隔符(sep),并根據該分隔符把源串拆分為多個小串并放到目標字串s1~sn中子串中不包括分隔符與連接語句類似,如果目標字串長度不夠會進行截斷,且sy-subrc為4,否則為0如果源串拆分的字串數量多于目標字串數量,則源串最后剩余部分包括其后的分隔符都將寫入最后一個字串。可采用內表來避免這種情況6/7/2025字符串拆分范例REPORTz_string_split.DATA:textTYPEstring,itabTYPETABLEOFstring.text='ABAPisaprogramminglanguage.'.SPLITtextATspaceINTOTABLEitab.LOOPATitabINTOtext.WRITE/text.ENDLOOP.6/7/2025字符數據操作——查找字串使用search語句:searchcforstr.在變量C中查詢字符串str,如果找到,sy-subrc返回0,sy-fdpos返回變量C中該字符串的位置(從左算起的字符偏移量),否則將sy-subrc返回4字符串str,可以使用通配符‘*’,也可以設定保存或者忽略str末尾的空格,如下所示:str,搜索str并忽略尾部空格.str.,搜索str不忽略尾部空格*str,搜索以str結尾的單詞str*,搜索以str開頭的單詞注意:單詞是指以符號(空格,標點符號,其他字符)分隔的字串6/7/2025查找字符串范例REPORTz_string_search.DATAg_str(30)TYPEcVALUE'Thisisatestsentence.'.WRITE:/'Searched','SY-SUBRC','SY-FDPOS'.SEARCHg_strFOR'X'.WRITE:/'X',sy-subrcUNDER'SY-SUBRC',sy-fdposUNDER'SY-FDPOS'.SEARCHg_strFOR'e'.WRITE:/'e',sy-subrcUNDER'SY-SUBRC',sy-fdposUNDER'SY-FDPOS'.SEARCHg_strFOR'.e.'.WRITE:/'.e.',sy-subrcUNDER'SY-SUBRC',sy-fdposUNDER'SY-FDPOS'.SEARCHg_strFOR'*e'.WRITE:/'*e',sy-subrcUNDER'SY-SUBRC',sy-fdposUNDER'SY-FDPOS'.SEARCHg_strFOR's*'.WRITE:/'s*',sy-subrcUNDER'SY-SUBRC',sy-fdposUNDER'SY-FDPOS'.6/7/2025字符數據操作——替換字符串內容用其他字符串替換字段的某些部分,使用

replacestr1withstr2intos_dest[lengthl]先對字段s_dest進行搜索,發現字串str1即用str2替換第一次出現的部分如果指定length,則只搜索前L個字節如果SY-SUBRC返回為0,則找到并替換成功,否則為進行任何替換6/7/2025替換字符串范例REPORTz_string_replace.DATAnameTYPEstring.name='Michael-Cheong'.WRITE:/'notreplaced:',name.WHILEsy-subrc=0.REPLACE'-'WITH''INTOname.ENDWHILE.WRITE:/'replaced:',name.6/7/2025字符數據操作——確定字串長度字符串長度:從首字符開始到最后一個非空字符的長度,即不包括結尾空格,使用:

n=STRLEN(str).將操作數str作為字符數據類型處理,不考慮其實際類型,也不進行轉換,范例如下:REPORTz_strlen.DATA:text(24)typecVALUE‘ABAPLanguage’, lenTYPEi.Len=strlen(text).Write:/‘Lengthof‘,text,’is’,len.6/7/2025字符數據操作——其他操作語句SHIFT,將字符串整體或者字串進行位移CONDENSE,刪除字符串中多于的空格TRANSLATE,字符轉換CONVERTTEXT創建一個可以排序的格式OVERLAY用一個字符串覆蓋另一個字符串6/7/2025字符數據比較6/7/2025定位操作字串通過制定長度及偏移量來操作指定的部分字串,語句為:s[+o][(L)]對變量S從第o+1位開始且長度為L的部分執行該語句的操作,如果未指定長度,則對第o+1位至程序末尾之間的所有位進行處理,偏移量和長度可以為變量動態指定,但是只能是如下情況:MOVE賦值;WRITETO賦值;ASSIGN分配給字段符號;PERFORM將數據傳給子程序。范例如下:REPORTz_string_comparison.DATA:f1(8)VALUE‘ABCDEFGH’,f2+6(5)=f1+3(5).6/7/2025系統變量所有的系統字段存放于結構SYST中,可以通過SE11來瀏覽SY-SUBRC,該變量是多數命令行執行成功與否的標志,比如數據庫操作、功能函數調用等等,0表示操作成功,其他為操作失敗。是ABAP編程中最常用、最有用的系統變量6/7/2025建表DataelementDomin6/7/2025謝謝大家Q/A6/7/2025ABAP基礎ABAP語言概述數據定義基本數據操作結構控制處理字符數據使用內表動態數據對象模塊化技術錯誤處理程序調試6/7/2025結構、工作區、內表結構(Structure)工作區(Workarea)內表(Innertable)6/7/2025結構屬于復雜類型,內容包含定義的數據字段

TYPES:BEGINOFline, idTYPEi,name(30), agetypei,ENDOFline.6/7/2025內表工作區內表:用于在程序運行期間存儲多行結構相同的數據工作區:內表是按行進行訪問的。必須使用某個工作區域作為與表格互相 傳輸數據的接口。工作區與內表的定義

data:wa_linetypeline, it_linetypetableofline.表頭行(…withheaderline):隱式工作區讀取數據行更新數據行工作區

內表6/7/2025內表的分類內表種類:標準表排序表哈希表6/7/2025定義內表語法格式:

TYPES|DATAitab{TYPE|LIKE}

tablekindOF{LINETYPE|LINEOBJECT}

{WITHkey}{INITIALSIZEn} {withheaderline}.tablekind:內表類型linetype|lineobject:行結構key:表關鍵字Initialsizen:內表分配的初始內存大小withheaderline:定義表頭行6/7/2025內表的重要概念——邏輯索引對于標準表和排序表,每一條數據記錄都有一個邏輯索引在對標準表和排序表進行插入、刪除、附加操作的時候,系統自動的對每一條數據記錄賦一個邏輯索引,記錄該數據記錄在該內表中的邏輯位置(第X行)對于標準表和排序表,可以通過邏輯索引操作數據行,關鍵字為INDEXn,表示讀取第多少行數據記錄6/7/2025內表的重要系統變量SY-TABIX,當前內表的當前數據記錄的邏輯索引值內表嵌套循環時,如果需要使用到sy-tabix變量,請盡量把sy-tabix賦給一個變量再進行處理6/7/2025內表類型——標準表標準表(standardtable或者省略關鍵字):系統為每一行數據生成一個邏輯索引;填充標準表時,可附加在現有行之后或者是插入到指定位置;程序對內表的尋址操作可以通過關鍵字或者索引進行;對內表進行插入、刪除等操作時,其數據行在內存中的位置不變,系統近重新排列各數據行的索引值不能定義唯一關鍵字,相同關鍵字的數據可重復出現標準表的另一種定義方式:

data:beginofitaboccurs0, …

endofitab.6/7/2025內表類型——排序表關鍵字SORTEDTABLE,也有一個邏輯索引總是按照關鍵字升序排序后再進行存儲可按照關鍵字訪問內表行也可按照邏輯索引尋找內表行,與標準表相同可以把排序表的關鍵字定義為唯一關鍵字或者普通關鍵字6/7/2025內表類型——哈希表關鍵字:HASHEDTABLE無索引,只能通過關鍵字訪問系統用哈希算法管理表中的數據尋址一條數據記錄的時間與表的行數無關必須定義且只能定義為唯一關鍵字不可能有關鍵字相同的兩行數據出現6/7/2025AttributesandUseoftheTableTypes6/7/2025表關鍵字WITHkey:指定內表關鍵字,如不指定,則系統使用默認(標準)關鍵字可以用UNIQUE|NON-UNIQUE來決定內表中具有相同關鍵字的數據記錄是否可以重復出現如果未指定關鍵字,則默認關鍵字為非數字和非內表的組件字段。比如內表中含有C,N,P三種類型的字段,則默認關鍵字為C,N類型的字段6/7/2025初始內存大小關鍵字:…initialsizen…N可以為正數或者0N值的選擇不影響程序執行的正確性,但可能影響執行效率:如果N設置過小,重新分配內存空間要占用時間如果N設置過大,則造成內存分配的浪費如果n為0或者不指定,則程序為內表對象分配8KB的內存6/7/2025工作區(WorkArea/WorkSpace)程序不能直接進行內表的行操作,需要通過工作區來處理工作區必須具有與內表行一致或者可以互相轉換的結構,通常是與內表行類型相同的結構體定義內表對象的同時,需要定義一個與該內表行結構相同的工作區供程序使用添加內表數據時,先給工作區賦值,然后把工作區內的數據添加、插入到內表修改內表數據時,把已定位的內部行內容覆蓋工作區的內容,修改工作區內容,再回寫6/7/2025工作區與內表數據交換圖例讀取數據行更新數據行6/7/2025隱式工作區——表頭行(HeaderLine)創建內表的時候隱式地定義一個同名工作區,這個同名工作區就叫表頭行或標題行語法:DATAitab…WITHHEADERLINE…創建內表的時候,通過該附加項決定內表是否帶表頭行創建帶表頭行的內表,則創建了內表和與內表行結構一致的結構體;對帶表頭行的內表,不需要指定工作區,系統隱式使用表頭行作為工作區表頭行帶來方便也增加了混淆:同一語句內表名稱可能代表內表或者同名工作區,加[]代表內表,不帶[]表示表頭行6/7/2025行訪問方式通過關鍵字訪問(適合所有內表):通過索引訪問(不適合哈希表):所有行操作成功,SY-SUBRC為0,否則為非0值6/7/2025行操作性能分析標準表:定位一行數據所需時間取決于表的行數,隨行線性增長排序表:定位一行數據所需時間取決于表的行數,隨行數對數級增長哈希表:定位一行數據通過關鍵字進行,查找速度與行數無關Notes:程序中使用何種內表,取決于預計需要容納的數據行數及訪問頻率:行數很少,用標準表;數據量巨大,且不存在重復行,用哈希表;運行期內必須用某種排序形式出現時,用排序表。多數程序都使用標準表6/7/2025行操作語句插入行(INSERT):附加行(APPEND):聚集附加(COLLECT):讀取行(READ):修改行(MODIFY):刪除行(DELETE):循環處理(LOOP…ENDLOOP):6/7/2025聚集附加語句COLLECT檢查工作區中的標準關鍵字段值(非數字字段)與內表中已存在的數據行是否相同如果不同,collect和append語句一樣,將新行附加至內表的最后一行如果相同,collect語句不附加新行,而是將工作區內數字字段的內容累加到已有數據行(與其具有相同關鍵字值)中數字字段內容上6/7/2025COLLECT范例6/7/2025操作整個內表語句(1)數據行排序(SORT…BY…):控制級操作(需要先按照行組進行排序):ATFIRST:第一次循環操作執行該語句塊ATLAST:最后一次循環操作執行該語句塊ATNEWf:行組的開頭執行該語句塊。行組是指f以及f左邊的全部字段(指字符字段)ATENDOFf:行組的結尾執行該語句塊sum初始化內表、工作區CLEAR:it_mara,it_mara[],REFRESH,FREE6/7/2025操作整個內表語句(2)整體賦值:MOVE語句或者賦值操作符=,需要注意內表是否具有表頭行,若有表頭行整體賦值時需要在內表名稱后加[]比較內表大小:使用邏輯操作符,EQ,=,NE,<>,><,GE,>=,LE,<=,GT,>,LT,<,等等6/7/2025ExtractDatasets允許動態地存儲并排序結構化數據,其列數目是可變的通過循環處理每一個程序,只能有一個未命名的ABAPExtract行結構分配語法:FIELD-GROUPSfg.動態生成fg的結構:INSERTf1f2…fnintofg.填充的語法格式:EXTRACTfg.可以包含多個不同結構的字段組可以排序:SORT.該語句無內表,則為Extract排序LOOP:逐行獲得Extract中的字段組6/7/2025ExtractDatasets程序示例REPORTz_extract_datasets.*Extract處理DATA:f1TYPEi,f2TYPEi.FIELD-GROUPSheader.INSERTf1f2INTOheader.DO10TIMES.f1=sy-index.f2=sy-index*2.EXTRACTheader.ENDDO.SORTDESCENDING.LOOP.WRITE:/f1,f2.ENDLOOP.6/7/2025動態數據對象概述普通數據對象的尋址靜態地通過對象名稱進行,動態數據對象只有在程序運行時,系統才知道其名稱和屬性,并進行動態尋址字段符號(Fieldsymbols):數據對象語義上的名稱,可以看作是解除引用的指針。訪問它時,實際操作的時分配給該對象的數據對象內容數據引用(Datareference):數據對象的地址,程序訪問的時期指向的數據對象的地址,要通過數據引用操作實際的數據對象的內容,需要先進行引用解除(Dereferencing)操作6/7/2025動態數據對象——字段符號聲明字段符號:

FIELD-SYMBOLS<fs>[TYPEtype|Likedobj]分配數據對象:靜態分配,程序運行前指定分配給字段符號的對象名稱

ASSIGNf[+o][(L)]to<fs>.若<fs>聲明時完全限定類型,則<fs>保持其技術屬性否則將只適用其定義的一般屬性可在分配時指定分配數據對象的偏移量和長度動態分配,運行時才確定分配給字段符號的數據對象名

ASSIGN(f)to<fs>.找到字段f的內容,將其內容作為一個新的數據對象分配給<fs>不能指定偏移量和長度成功分配給<fs>,sy-subrc返回0,否則為46/7/2025字段符號動態分配范例REPORTz_fs_dynamic_assign.*字段符號動態分配范例field-symbols:<fs>.data:str(20)typecvalue'OutputString',name(20)typecvalue'str'.*靜態分配assignnameto<fs>.write/<fs>.*動態分配assign(name)to<fs>.write/<fs>.6/7/2025字段符號強制類型轉換運行時可將任何數據對象分配給字段符號字段符號繼承數據對象的所有屬性采用強制轉換,無論原始對象類型如何,系統都按照字段符號的類型對分配的對象進行處理強制轉換,要求字段符號的類型完全指定或者是ABAP內置類型C、N、P、X之一6/7/2025字段符號強制類型轉換范例REPORTz_fs_casting.*字段符號強制類型轉換范例TYPES:BEGINOFt_date,year(4)TYPEn,month(2)TYPEn,day(2)TYPEn,ENDOFt_date.FIELD-SYMBOLS<fs>TYPEt_date.*ASSIGNsy-datumTO<fs>.ASSIGNsy-datumTO<fs>CASTING.WRITE:/<fs>-year,/<fs>-month,/<fs>-day.6/7/2025動態數據對象——數據引用(1)數據引用:程序通過引用數據對象地址進行操作或者動態的創建數據對象,以數據引用和對象引用兩種形式存在聲明引用變量:引用類型定義:TYPESt_drefTYPEREFTODATA引用變量定義:DATAt_drefTYPEREFTODATA引用對象指向實際操作對象的方法:通過變量動態創建數據對象通過變量獲取一個數據對象的引用給該變量分配其他已經存在的數據引用變量6/7/2025動態數據對象——數據引用(2)動態對象創建:CREATEDATAdrefTYPEtype|LIKEobj.動態的創建一個對象,且引用變量dref指向它無名稱,可通過數據引用變量尋址操作該對象之前,需要通過字段符號解除引用數據類型可以是變量獲取對象引用:GETREFERENCEOFobjintodref.Obj可以是通過data語句定義的靜態變量或者是指向某數據對象的字段符號解除數據引用:ASSIGNdref->*TO<fs>[CASTING…]將數據引用變量dref指向的數據對象賦給字段符號若數據引用變量的值為初始值或者不正確,則無法進行解引用操作,sy-subrc為4;若解引用成功,則為0動態創建的數據對象,解引用是獲取其內容的唯一方式6/7/2025數據引用范例REPORTz_data_reference.*數據引用范例TYPES:BEGINOFt_struct,col1TYPEi,col2TYPEi,ENDOFt_struct.DATA:dref1TYPEREFTOdata,dref2TYPEREFTOdata.FIELD-SYMBOLS:<fs1>TYPEt_struct,<fs2>TYPEi.CREATEDATAdref1TYPEt_struct.ASSIGNdref1->*TO<fs1>.<fs1>-col1=1.<fs1>-col2=2.dref2=dref1.ASSIGNdref2->*TO<fs2>CASTING.WRITE:/'Valueof<fs2>first',<fs2>.GETREFERENCEOF<fs1>-col2INTOdref2.ASSIGNdref2->*TO<fs2>.WRITE:/'Valueof<fs2>second',<fs2>.6/7/2025模塊化技術概述模塊化的作用:使程序結構清晰、易懂、易讀、易于維護實現代碼復用實現數據封裝,數據或功能僅通過接口與模塊外部發生關聯模塊化技術:處理塊子程序功能模塊包含程序宏對象方法對話模塊6/7/2025模塊化技術——子程序程序內部的模塊實現定義為某一個程序使用,可以將一個程序只能給的具體功能分解成幾個子程序實現子程序往往位于程序的最后,不屬于任何處理模塊,減少出現不屬于任何處理塊而無法執行的代碼(兩子程序之間無事件代碼的程序不屬于任何事件塊)定義:FORMsubr[using…[value()p[typet]]][chaning…[value()p[typet]]]. ENDFORM.調用:PERFORMsubr[using…p…] [changing…p…].6/7/2025UsingSubroutines6/7/2025子程序范例REPORTz_subr.*子程序范例data:int1typeivalue1,int2typeivalue2,sumtypei.start-of-selection.performfrm_add.write:/(1)int1no-gap,'+'no-gap,(1)int2no-gap,'='no-gap,(1)sum.formfrm_add.sum=int1+int2.endform."frm_add6/7/2025子程序參數接口參數:子程序和主程序之間傳遞的數據對象使用USING|CHANING實現,子程序中為形參,主程序中為實參REPORTz_subr.data:int1typeivalue1,int2typeivalue2,sumtypei.start-of-selection.performfrm_addusingint1int2changingsum.write:/(1)int1no-gap,'+'no-gap,(1)int2no-gap,'='no-gap,(1)sum.formfrm_addusingp_int1p_int2changingp_sum.p_sum=p_int1+p_int2.endform."frm_add6/7/2025參數傳遞方式傳遞方式通過形參的定義來決定值傳遞:using…value(pi1)修改子程序中形參的值時不影響主程序中實參的值引用傳遞:using…pi1

changing…pi2修改子程序中形參的值時影響主程序中實參的值值和結果傳遞:changing…value(pi2)修改子程序中形參的值時影響主程序中實參的值,但如果子程序非正常結束,則實參的值不改變6/7/2025參數傳遞方式范例data:int1typeivalue1,int2typeivalue1.write:/'Beforecallingsubroutine:',int1,int2.performfrm_self_addUsingint1int2.write:/'Aftercallingsubroutine:',int1,int2.formfrm_self_addusingp1typeivalue(p2)typei.p1=p1+1.p2=p2+1.write:/'InsideSubroutine:',p1,p2.endform.6/7/2025參數類型及兼容形參獲取實參的所有技術屬性,形參可以代表多種類型的實參實參必須有指定的屬性參數傳遞時不會進行類型轉換,因此實參和形參必須能夠兼容6/7/2025功能模塊(FunctionModule)最常用的復用組件,是獨立的倉庫對象,可由ABAP程序或者外部程序調用功能模塊基本思想和子程序一致,但是它是獨立的R/3對象需要通過單獨的工作臺工具維護,通過FunctionBuilder在功能組(FunctionGroup)中維護每一功能模塊在系統中是唯一的功能模塊與功能組的關系,類似于普通的ABAP程序和子程序之間,系統通過功能組來管理功能模塊6/7/2025Functiongroup6/7/2025Functionmodule6/7/2025功能組和功能模塊功能組是工作模塊的容器功能組包括的程序:L<fgrp>TOP:功能組內部全局變量定義區L<fgrp>UXX:具體的功能代碼,XX為序號L<fgrp>FXX:用于容納功能組內部的子程序6/7/2025功能模塊創建步驟(1)——初始界面6/7/2025功能模塊創建步驟(2)——創建功能組6/7/2025創建功能組——描述信息6/7/2025創建功能組——保存6/7/2025創建功能模塊步驟(3)——功能模塊6/7/2025功能模塊和功能組關聯6/7/2025忽略提示,繼續創建6/7/2025功能模塊設計界面簡述Attribute:屬性維護,定義類型名稱等Import:輸入參數維護Export:輸出參數維護Changing:輸入輸出參數維護Tables:內表參數維護Exceptions:異常維護6/7/2025功能模塊屬性維護6/7/2025功能模塊輸入參數維護6/7/2025功能模塊輸出參數維護6/7/2025創建功能模塊步驟(4)——源代碼6/7/2025創建功能模塊步驟(4)——激活6/7/2025創建功能模塊步驟(5)——測試6/7/2025測試功能模塊界面6/7/2025測試功能模塊結果6/7/2025功能模塊的調用6/7/2025查找功能模塊6/7/2025代碼自動生成6/7/2025完善代碼6/7/2025測試輸出結果6/7/2025數據對象的生存期和可見性局部數據:在過程內部創建的數據對象,作用域僅限于過程內部全局數據:在過程內部外創建的數據對象,作用于限于程序內部

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論