标题：abap
介绍
ABAP是一种高级企业应用编程语言（Advanced Business Application Programming），起源于20世纪80年代。经过不断的发展，的版本为ABAP/4，SAP R/3的应用程序就是用ABAP/4编写的。
ABAP/4是面向对象语言。它支持封装性和继承性。封装性是面向对象的基础，而继承性则是建立在封装性基础上的重要特性。  ABAP/4具有事件驱动的特性。
ABAP/4和COBOL具有类似之处。
ABAP/4适合生成报表。
ABAP/4支持对数据库的操作。
SAP最初开发ABAP/4（高级商业应用程序设计）语言仅为内部使用，为应用程序员提供优化的工作环境。经过不断的改进和修改以满足商业领域的需要。ABAP/4已成为SAP开发所有自己的应用程序的仅有工具。
SAP客户用ABAP/4进行其自身开发。这样的开发对R/3标准解决方案适应特殊问题非常重要。ABAP/4开发工作平台包含所有用于创建和维护ABAP/4程序的工具。
ABAP/4的可解释特性使其易于生成、测试并运行程序的中级版本，以便将来生成最终版本。此过程也叫做早期原形处理，意味着您不必丢弃中级版本。
ABAP/4是第四代支持结构化程序设计的语言。它合并了所有通常的控制结构和模块化概念。
发展历史
了解一下ABAP的发展历史是必要的，ABAP产生的最初的目的是用以生成简单打印报表程序，我们知道SAP最初是为解决财务实时数据处理问题的，ABAP(Advanced Business Application Programming->；高级业务应用编程语言）用于编写SAP AG的几乎全部产品源代码。 严格地讲，ABAP/4不仅仅是一个开发工具，而且是一套完整的client/server开发环境，这很好理解，微软的Visiual Studio是一开发环境，VB,VC++等是开发工具.ABAP开发环境包含支持程序开发的一些函数和包等。
SAP开发环境的三层(多层）概念也不新鲜，比如在安装SAP时也可将DB instance安在一台server,Central instance在另一台所谓的Application server（我想这应是相关SAP基础系统包括各种应用程序所在），而通常客户端安装的SAP Logon Front End,SAP会话管理器等是所谓的表示层，它通过TCP/IP,SAP演示协议或RFC和应用服务器进行数据传输，用户看到的只是处理后的数据返回。
和Delphi的三层逻辑相近，在应用层包含多个组件象ABAP开发平台，身份验证，系统管理维护等用以处理会话，更新，排队，网关，数据层处理native和Open SQL等（这是从内部机制方面看），SAP各模块应用的业务逻辑都在应用层被处理（从用户角度）然后结果被返回。
SAP Logon,[1]表示应用服务器（通常企业为了节省成本和方便管理可能会将应用服务器和数据库安装在同一起），[2]System number，举个实例，开发和测试服务共用一台服务器，开发使用system number00，而测试使用system number 01，通过system number逻辑地将一台physical server逻辑地分成了两台application server。
ABAP
- 带有各种类型和结构的声明数据的声明元素
- 数据制作的操作元素
- 控制程序流的控制元素
- 反应外部事件的事件元素
· ABAP/4支持多种语言。文本摘要（例如，标题、页眉和其他文本）将根据程序代码分别存储。您可以随时在不改变程序代码的情况下更改、转换和维护这些文本摘要。
· ABAP/4支持商业数据类型和操作。您可以用特殊日期和时间字段进行计算。系统会自动执行必需的类型转换。
· ABAP/4提供一系列功能处理字符串。
· ABAP/4包含一个叫OpenSQL的SQL子集。用OpenSQL，您可以读取和访问数据库表，与所用的数据库系统无关。
· ABAP/4允许您定义和处理内部表，该表只在运行程序时存在。内部表使其更容易处理数据表，并帮助使用程序中的复杂数据结构。
· ABAP/4允许您定义和调用子程序。也可以调用其他程序的子程序。参数能够以各种方式从子程序传递或传递到子程序。
· ABAP/4包含一种特殊子程序，叫做功能模块。您可以在中央库中创建和维护功能模块。在调用程序和子程序之间功能模块有一个明确定义的数据接口。它们能够以调用程序的独立模式进行分别测试。
这里有两种主要的ABAP/4程序类型：
· 报表程序
报表程序用于分析数据库表中的数据。这种分析的结果可以显示在屏幕上或发送到打印机上。逻辑数据库支持报表程序。逻辑数据库是特殊的ABAP/4程序，使开发者不必编码所有的数据库访问。
· 对话程序
将对话程序组织为包含对话模块的模块池。每个动态程序（由一个屏幕及其流逻辑组成的“动态程序”）都基于一个ABAP/4对话程序。流逻辑包含对ABAP/4对话模块的调用。
特征
1.和SAP紧密结合，尤其在开发报表方面，坦率地讲，除了和SAP集成的好处，.我定认为ABAP在报表开发上比Crystal report Tool要高效简单。
2.和VB一样，ABAP是解释形的，如读者精通VB，学习ABAP应该毫不费力，倒是既然SAP是企业管理解决方案，ABAPer必须对企业管理流程熟悉。
解释性的另一好处是可以很好跟踪程序逻辑（使用/H），这对了解业务逻辑的实和追踪错误很有效. 和VB不同的是，VB跟踪时允许程序运行指针随意往回或往全拉而ABAP程序却不行，但是ABAP程序允许在运行时修改变量的值，这是编译程序不能做到的.当然通常编译比解释执行的速度会更快。
ABAP程序执行并不直接读取源代码，而是执行内部经过“生成”的描述，对于ABAP/4字典的修改激活后将触发内部描述的重新生成，如程序并没激活就执行原版本，或者出现错误（程序没激活可能造成ABAP Dumping ABAP）。
3.在对数据库处理方面，除了可直接执行SQL（使用native sql，缺点是错误处理很难控制，相当于有开发环境将SQL语句直接传给DB去执行），SAP在ABAP开发环境层还提供了一套Open SQL访问底层数据库。
4. 程序员都知道Windows平台下开发都支持事件驱动，Windows系统本身也支持事件驱动,ABAP也提供了事件驱动，这表Dialog编程方面，但是ABAP在此方面并不强，而且相对讲也比较难于掌握（在后面会讨论）。
5.基于面向对象的风靡，ABAP在此方面也有相当反应，在SAP强大的软件包中提供了大量可重复使用的程序，读者也可定义类并使用它快速建立新的对象。
6.类似Java,ABAP开发的程序能运行于任何操作系统（Java有Java虚拟机，ABAP也有ABAP processor），多种数据库（比如在ABAP字典中实现了透明表对各种底层数据库表的映射，这样在ABAP层看到的透明表就和具体数据库无关），各种网络系统。
操作
1. 在“SAPR/3”初始屏幕上选择“工具->ABAP/4工作台”。
出现“ABAP/4开发工作台”屏幕
2. 选择“ABAP/4编辑器”  
“ABAP/4编辑器初始屏幕”如下所示：
3. 为在“程序”字段中创建的程序输入名称（关于创建程序名称的详细信息，参见命名程序规则（页455））。
4. 选择“创建”。
不论在“对象组件”下选择什么，都出现“ABAP/4：程序属性”屏幕。
当命名并创建程序后，可以定义其属性（关于定义程序属性的详细信息，参见指定程序属性（页457））。
创建ABAP/4程序还有其它过程。例如，可以：
1. 选择“ABAP/4开发工作台”屏幕上的“对象浏览”。
2. 选择“对象列表”下的“程序”。
3. 选择“单一对象”下的“程序对象”。
4. 输入程序名并单击“显示”。
命名规则
当创建程序名称时请遵循如下规则：
- 使用至少1个但不超过8个字符。
- 不要使用下列字符
- 句点（.）
- 逗号（，）
- 空格（）
- 括号'('')'
- 单引号（')
- 双引号（")
- 等号（=)
- 星号（*)
- 元音变音（_,_,_,_,_,_）和'_'
- 百分号（%）和下划线（_）：因为这些符号是SQL语句的通配符，所以也会导致问题（参见为在程序中选定行指定条件）。SAP建议在程序名称中不要使用它们。
创建程序名称时请遵守这些命名约定：
_ 报表程序（以列表格式输出数据分析）：Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。用任何有效字符替换x。注意SAP报表程序遵守相似的命名约定：Raxxxxxx。
_ 任何其它ABAP/4程序（培训程序或事务程序）：SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定：SAPMaxxx，其中a代表某应用程序区。
程序属性
介绍程序属性决定程序属于哪种应用程序以及程序所链接的逻辑数据库。必须谨慎输入属性以便系统能正确处理程序（有关程序属性的详细信息，参见重要的程序属性（页459））。
已经将名称分配给程序并选择“ABAP/4编辑器初始屏幕”上的“创建”时，出现“ABAP/4：程序属性”屏幕。程序操作1. 在字段“标题”中输入程序标题。选择描述程序功能的标题。系统自动将标题与文本摘要合并。如果以后要更改标题，请按如下操作进行：
- 选择“ABAP/4编辑器初始屏幕”上的“文本摘要”或“属性”。
- 选择“更改”。
2. 完成两个强制字段：
- 如果创建报表程序，则在“类型”字段中输入1，如果创建模块存储，则在“类型”字段中输入M。关于可能类型的列表，请单击可能条目箭头。
- 在“应用程序”字段中为应用程序输入分类字母，如财务会计输入F。
3. 如果创建报表（类型=1），请选择“确定”。
系统将特定报表属性自动插入输入字段。然后看见附加字段“逻辑数据库”、“从应用程序”和“选择屏幕”（版本）。
4. 指定与程序相关的所有其他属性（有关程序属性的详细信息，参见重要的程序属性（页459））。
5. 选择“保存”以保存属性。
6. 出现“维护对象目录条目”窗口。
7. 输入开发类。
如果为培训或测试目的创建程序（如某私有对象），则输入开发类$TMP或选择“逻辑对象”。
8. 选择“保存”以保存开发类。
这将关闭“维护对象目录条目”窗口并返回“ABAP/4：程序属性”屏幕。
9. 选择“后退”离开屏幕。如果要直接转到ABAP/4编辑器，请选择“转向->；源代码”。
如果通过预定义开发类在“对象浏览器”中创建程序，则跳过步骤6到8。
程序属性
最重要的程序如下所述。关于其它属性的详细信息（或关于此处描述的属性的详细信息），请选择相关的输入字段，并单击可能的条目箭头。
注意下述某些属性只适用于报表程序并不适用于其他ABAP/4程序。
类型
除了类型1（如同报表的独立程序）和M（模块存储），还应该注意类型I（包含程序）。包含程序是个独立的程序，它有两个主要特征。首先，它包含程序代码，不同程序都可使用该代码。其次，它用于模块化程序源代码，该代码分成逻辑相关部分。其中每个部分都存储在不同的包含程序中。包含程序改善源代码的可读性并有助于
维护。（有关包含程序的详细信息，参见包含程序）。
应用程序
“应用程序”字段包括应用程序的缩写，如，财务会计缩写为F。该必需条目使系统能将程序分配给适当的业务区。
开发类
开发类对系统之间进行传输非常重要。执行传输时，可以将分配给某个开发类的工作台对象组合起来。
如果用户在某组中工作，也许要将程序分配给现有开发类或创建新的开发类。分配给开发类$TMP的程序是私有对象并且不能传输到其他系统。
但是，也可以通过选择“ABAP/4编辑器初始屏幕”上的“程序->重新分配...”更改分配给程序的开发类。
应用程序中的逻辑数据库（仅报表程序）
这些属性决定报表使用哪个逻辑数据库检索数据，以及逻辑数据库属于哪个应用程序。应用程序中数据库名称必须是唯一的。但是，整个系统可以包括数个同名数据库。因此指定应用程序很重要。关于逻辑数据库的详细信息，参见逻辑数据库的特性和维护。
如果报表程序直接读取数据，而未使用逻辑数据库（关于此主题的详细信息，参见访问带逻辑数据库的数据库表），则应该象通常一样指定应用程序，但将“逻辑数据库”字段置空。
选择屏幕版本（仅报表程序）
如果没有指定选择屏幕版本，则系统在逻辑数据库选择标准、报表特定参数及选择选项的基础上自动创建选择屏幕（关于选择屏幕的详细信息，参见使用选择屏幕）。
如果想使用自己的选择屏幕，请在此字段中输入号码。该号码必须小于1000。可以通过按F4或在DBxxxSEL程序中找到现有选择屏幕号码（详细信息，参见逻辑数据库选择）。
大写/小写
显示和存储时，如果要让ABAP/4编辑器将程序代码与输入时保持相同，则请将该字段置空。如果选择该字段，则所有的程序代码（除了引号中的文本及注释外）都转换成大写字母。屏幕显示依赖于所使用的编辑器模式（详细信息，参见文档ABAP/4工作台工具。
编辑器锁定
如果设置此属性，则其他用户则不能修改、改名或删除程序。只有用户可以更改程序、维护属性、文本摘要及文档；或者解除锁定。
定点算术
如果设置此属性，系统则根据小数点位数将类型P字段四舍五入，或用零填补（关于类型P字段的详细信息，参见数字数据类型（页3-4））。这种情况下，无论在用户主记录中指定了什么，小数点字符总是句点（.）。
通过变式启动（仅报表程序）
如果设置该属性，则用户只可以使用变式启动报表程序。在启动程序之前，必须创建至少一个报表变式（关于创建变式的详细信息，参见使用变式预设置选择）。
编写程序
介绍在ABAP/4编辑器中编写ABAP/4程序。
可以直接从“ABAP/4程序属性”屏幕切换到编辑器，也可以从“ABAP/4编辑器初始屏幕”中调用编辑器。进行操作1. 在“ABAP/4程序属性”屏幕上选择“转向->；源代码”或“源代码”。
选定“源代码”并选择“ABAP/4编辑器初始屏幕”上的“更改”。
出现“ABAP/4编辑器编辑程序”屏幕。
系统自动输入第一个ABAP/4语句，如
REPORT <report name> or PROGRAM <program name>.
对于 <report/program name>；，系统使用在“ABAP/4编辑器初始屏幕”上输入的名称。
语句REPORT和PROGRAM实际上具有相同功能。它们使系统能识别报表程序或任何其他ABAP/4程序并允许为输出列表指定一定的标准：
REPORT或PROGRAM语句可以有不同的参数，如LINE-SIZE、LINE-COUNT或NO STANDARD PAGE HEADING。这些参数主要适用于报表程序，用来分析数据并输出结果列表。
关于列表的详细信息，参见[ See also: 第六章 创建列表 <file://nyf:\1\2\5\> ]或参见REPORT和PROGRAM上的关键字文档。
2. 输入程序代码。
3. 选择“检查”进行语法检查。然后系统扫描程序代码寻找语法错误及不相容处。如果检查出错误，则出现消息报告它并且有可能的话将建议解决方案或更正。将光标放在适当的位置上。
4. 选择“保存”保存代码。
源文本存储在程序库中。
测试程序
测试程序检查代码是否正确工作。
为测试目的要运行程序，选择“ABAP/4编辑器编辑程序”屏幕上的“程序->；执行”。
系统执行该程序，如同从“ABAP/4编辑器初始屏幕”中启动的一样。例如，创建报表程序之后，则首先出现从中输入条件的选择屏幕，然后是结果列表。
如果正创建ABAP/4程序模块，则必须在运行程序之前创建事务代码（关于创建事务代码的详细信息，参见对话编程简介）。
出于测试目的，可以先不进行保存，直接运行某个不是模块存储部件的程序。编辑器保留一个包含更改的临时版本。但是，测试结束后必须返回编辑器以确保所有更改都已保存。
显示更改
本节主要说明如何显示或更改现有程序。此处相关的是技术步骤而不是实际代码更改。
要显示或更改程序，请进行如下操作：
1. 在“ABAP/4编辑器初始屏幕”上的“程序”字段中输入要更改的程序名称。
2. 选择“源代码”并选择“显示”或“更改”。
如果选择“更改”则继续步骤3。
如果选择“显示”，则看到“ABAP/4编辑器显示程序”屏幕。此处也显示源代码，但不能进行更改。可以通过选择“显示->；更改”切换到更改模式。
3. 如果其他用户锁定该程序对编辑器的访问，则系统显示下列消息：
User <name> forbade all changes.
在这种情况下，不能更改程序。要更改程序，必须将它复制到新程序中并用新程序名再开始步骤1。否则，继续步骤5。
4. 输入对程序代码的更改。
5. 选择“检查”检查语法。
6. 保存程序的更改版本。
如果更改程序的私有版本（开发类$TMP），则立即保存更改版本。
如果从$TMP之外的开发类更改程序，则会出现一个窗口，从中可以指定更正请求号（Change Request Number）。
7. 运行程序测试它（关于测试的详细信息，参见测试程序（页11））。
配给程序
介绍可以将事务代码分配给类型1的单独程序，以后就将这些程序作为事务代码处理。在[ See also: 第三部分 编写ABAP/4事务 <file://nyf:\1\3\> ]中对事务有说明。操作1. 按照本节上述主题所述，创建单独程序。
2. SAP菜单树：工具 -> ABAP 工作台 -> 开发 -> 其他工具 -> 事务，事务代码：SE93。
3. 填入事务代码并选择“维护事务”屏幕上的“创建”
4. 在下列对话屏幕上选择“报表事务”；
5. 在下列“创建报表事务”屏幕上填入所需条目“事务说明”和“程序”。
6. 将事务代码保存在开发类中。
开发类可以用事务代码SM30维护视图V_TDEVC来创建或修改。
快速入门
首先、ABAP是技术开发，想快速培训出师，你必须得有编程基 础。从这点考察培训机构，你就看看他们有没有笔试，如果 啥条件都不要求，那肯定是不能参加的。编程基础不是一天 两天都锻炼出来的。
其二、打听定向委培的公司，是否真正有项目。这个很好办， 招聘求职的网上一搜就知道了。
其三、看培训机构的老师水平和课程安排如何。这个没办法 从网上了解太多，只能实地考察了。
其四、做好这方面的求职准备。培训机构推荐是一回事，你自 己找机会也不能忽略。
其五、ABAP职位需求非常旺盛，有点谱，学到了其实是蛮 容易找工作的。培训带你入门，修行看个人嘛 我见到过很好 的培训机构，里面有的学员照样学不出来，为啥？ 不努力呗 ！
最后、目前市 面上做这方面培训的，叫的出来的有 sap私塾和 91abap，赛跑网ABAP。选择比较好的培训机构至关重要。建议考虑口碑，价格，就业率等等各方面的因素。
展示报表
ABAP是SAP的基石，入门SAP，首先学好ABAP至关重要，ABAP中ALV部分也很重要，现在展示一个例子：
TABLES:marav. "MARA&MAKT 视图
*---------------------------------------------------------------------*
DATA:BEGIN OF gt_tab OCCURS 100,
matnr LIKE marav-matnr,
maktx LIKE marav-maktx,
matkl LIKE marav-matkl,
ntgew LIKE marav-ntgew,
gewei LIKE marav-gewei,
END OF gt_tab.
DATA i_repid LIKE sy-repid.
***ALV设定
TYPE-POOLS: slis.
DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA is_layout TYPE slis_layout_alv.
***选择屏幕制作
SELECT-OPTIONS:
s_matnr FOR marav-matnr MATCHCODE OBJECT mat1.
START-OF-SELECTION.
***取数据
SELECT * FROM marav
INTO CORRESPONDING FIELDS OF TABLE gt_tab
WHERE
matnr IN s_matnr.
END-OF-SELECTION.
i_repid = sy-repid.
*使用函数得到gt_fieldcat内表
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = i_repid
i_internal_tabname = 'GT_TAB' "capital letters!
i_inclname = i_repid
CHANGING
ct_fieldcat = gt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
***layout设定
is_layout-zebra = 'X'.
is_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置
***单击弹出明细设定
* is_layout-f2code = '&ETA'.
* is_layout-detail_popup = 'X'.
* is_layout-detail_initial_lines = 'X'.
* 展示数据
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = i_repid
it_fieldcat = gt_fieldcat
i_save = 'A'
i_callback_user_command = 'FRM_UCOMM' "实现双击事件
is_layout = is_layout
TABLES
t_outtab = gt_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.