LOCKLOSE 发表于 2015-9-21 14:00:39

SAP abap学习的资料

  以前记录下来的资料,现在把它放到这个上面来.唉,就是不知道这个bolg怎么能把图贴上来,要不还可以做好多的操作手册放在上面.
  这两天改FI/CO的一个报表,弄得我头都大了,不想接手这一块,可是我们公司就我一个abap,不写谁写呢?可怜的孩子!最近家里又发生了事情,更加让我心神不宁了!

  SAP R/3
  System 系统
  Application 应用
  Products 产品
  Real-time 三层系统架构
  *******************************************************************************
  1,Abap的数据类型分为三种类型
  *1,类型 *2,结构 *3,内表
  
  *******************************************************************************
  2,数据定义
  *1 直接定义
  Data int_a type I.
  *2 参照自己定义的数据类型定义
  Type char_six(6) type c.
  Data chs type char_six.
  *3 参照se11中建立的数据类型定义
  *4 直接使用like
  Data ch4 like ch3. (其中ch3已经在se11中定义过)
  定义常数:使用constants
  基本语法:
  Constants: <const.name> type <type> value <literal>.
  CONSTANTS INT TYPE I VALUE 99.
  
  *******************************************************************************
  3. 选择copy按钮,输入程序名字即可(客户的程序名字,需要以Z开头)
  
  
  *******************************************************************************
  4,如何设置关键字的大小写功能?
  路径:在utilities--settings—pretty printer
  
  
  *******************************************************************************
  5,模式按钮
  作用:可以call function,写write等固定格式,message等功能
  操作方法:将光标放在程序中你要输入的地方,然后按pattern,输入你要输入的参数,回车即可。
  
  旁边的pretty printer 是美化program,即是以标准的缩进和注释对program
  
  *******************************************************************************
  6,如何进行程序调试?
  
  其中 F5 单步执行
  F6 执行子程序的时候,不进入子程序,即跳过子程序
  F7 跳出目前的子程序
  F8 直接执行
  
  *******************************************************************************
  7,在窗口上直接输入 /h 就可以进入程序调试的模式
  
  *******************************************************************************
  8,创建事务代码t-code:SE93
  另一种创建T-Code的方法是在程序中点击右键—创建—transaction 也可以创建一个T-Code
  
  
  *******************************************************************************
  9,write:a ,b,c。
  其中的冒号是语法链的作用。
  
  ******************************************************************************
  10,如何定义一格结构?
  *1,直接定义结构
  Data : begin of stru_ztaly,
  Name(10) type c,
  ……
  End of stru_ztaly.
  *2,自己在程序里先定义结构类型,再参照类型定义结构对象。
  Types: begin of stru_ztaly,
  Name(10) type c,
  ……
  End of stru_ztaly.
  Data: stru_ztaly2 type stru_ztaly.
  
  *3,在se11定义一个公共的类型,再参照类型定义结构对象。
  Data :stru_italy type ityp_s_ztaly.
  *4,使用like
  Data stru_italy2 like stru_italy (其中stru_italy是已经定义了的结构)
  
  *******************************************************************************
  11,如何建立内表?
  *1, 直接建内表
  Data : begin of itab_italy occurs 0,
  Ino type I,
  …..
  End of itab_italy.
  *2,自己先建一个结构类型,再根据这个结构类型建内表
  Type :begin of typ,
  ino type I,
  ……
  end of typ.
  Data: itab_typ type table of typ.
  其中关键字table不能少,否则还是结构,而不是内表
  
  *3,现在数据字典中建一个内表类型,再参照这个类型
  Data:itab_italys type zty_t_italy.
  说明:对内表的操作必须依靠结构进行。
  For example: append stru_italy to Itab_italy.
  增加一行到内表中。
  *4,内表输出必须依靠于结构,而且要循环输出
  For example:
  Loop at itab_italy into stru_ztaly.
  Write: / ……….
  Endloop.
  *5,特殊情况
  Tables: 表名A
  说明:定义了一个和A同样名称的数据结构。
  A type B occurs N。
  说明:定义出来的一格内表
  *6,data <itab> type <itabtype>
  说明:在定义的时候同时生成一个同名的结构
  
  
  *******************************************************************************
  12,如何理解程序中的流程呢?
  说明:程序其实存放在database中的
  
  
  *******************************************************************************
  13,数据元素,结构和内表的区别是什么?
  用一句话说明:就相当于数学中的 点 线 面
  
  *******************************************************************************
  14, open sql与 native sql的流程区别是什么?
  
  说明:使用了open sql 就不必要理会后台的数据库,只要掌握了open sql就ok
  使用native sql 只和后台数据库习习相关
  
  
  上图:主要说明了
  Open sql 只能使用DML 而 native sql 可以使用DML 和DDL
  Open sql 包含:insert,update,delete,modfy
  
  *******************************************************************************
  15,processing of tha abap processing block resumes(摘要)?
  
  
  *******************************************************************************
  16,系统参数sy-subrc的功能是?
  若返回值为 0 表示系统执行数据成功
  若返回值不为0 表示系统执行数据不成功(返回具体数据的含义参加F1帮助文件)
  
  *******************************************************************************
  17,message 的语法使用的例子?
  
  说明:
  其中bc400 是message class
  而message:
  040:the name of the airline &1 is &2.
  041:Airline &1 is not available. (&1和&2 都是program中的变量)
  
  *******************************************************************************
  18,系统得消息类型有几种?
  
  其中warning的类型,可以不必理会,直接回车,就可继续执行
  Error的类型,在执行过程中若产生Error类型的,将阻止系统继续往下执行
  19,t-code:se14的作用?
  主要是调整表的作用,具体功能未知
  20,系统参数sy-dbcnt的作用是?
  Sy-dbcnt表示找到的记录的序号,第一条记录为1,第二条记录为2,最后一条记录的序号也是记录数
  21,消息管理的t-code:se91
  管理请求号t-code:se10
  创建帐号 t-code:su01
  创建角色 t-code:pfcg
  传输管理系统t-code:stms
  跨客户端的应用层次 t-code:se81
  寻找跨客户端组件 t-code:se84
  创建事务代码:t-code:se93
  创建增强工程:t-code:cmod
  22,modify语句的作用?
  这个是sap特有的语句,若该数据在数据库中存在,则update
  若该数据在数据库中不存在,则insert
  
  23,报表分为哪四类?
  *1,tools --query
  *2,simple lists --简单报表
  *3,interactivelists --交互式报表
  *4,alv grid Control --alv
  24,query 的特征
  *1,user basic reports
  *2,each user defines own quickviews which only they can display
  *3,uses existing data
  *4,no administrative(管理的) work
  *5,可以使用query进行修改
  *6,interface to internal(EIS,ABC,ALV)and external application
  *7,fewer functions than infoset query
  *8,no transports
  24,如何产生一个简单的报表?
  Report zrl003.
  Data:wa_spfli like spfli.
  Select carrid connid cityfrom cityto
  into corresponding fields of wa_spfli
  from spfli.
  Write: / wa_spfli-carrid, wa_spfli-connid,
  Wa_spfli-cityfrom, wa_spfli-cityto.
  Endselect.
  25,setting the list format(报表的宽度和高度)?
  基本的语法:
  Report <name> line-size <s> line-count <m[(n)]>.
  For example:
  Report zrl003 line-size 50
  Line-count 12.
  ……
  Write:…
  产生出来的效果图为:
  
  26,如何在程序中显示图标?
  For example:
  Report zrl003.
  Include<icon>
  Include <symbol>
  ……
  *state of free seats
  If seatsfree < 1.
  Write icon_red_light as icon.
  Elseif seatsfree >1.
  Write icon_green_light as icon.
  Endif.
  *state of booked seats
  If wa_sflight-seatocc < 10.
  Write sym_left_hand as symbol
  Endif.
  
  
  27,设置固定列和显示最后一页的语法
具体的例子参考sapbc405_fold_scroll_boundary
28,系统参数sy-vline作用是画竖线
Sy-pagno 显示页数
Sy-colno 显示列数
Sy-linno 显示行数
29,如何使用checkbox and radiobutton
参看Example
* Radiobutton group with frame and frame text
SELECTION-SCREEN BEGIN OF BLOCK SEATS WITH FRAME TITLE TEXT-S02.
PARAMETERS PA_OCC RADIOBUTTON GROUP SEAT.
PARAMETERS PA_FRE RADIOBUTTON GROUP SEAT.
PARAMETERS PA_ALL RADIOBUTTON GROUP SEAT.
SELECTION-SCREEN END OF BLOCK SEATS.
* Parameters displayed in one line
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(20) TEXT-S03.
SELECTION-SCREEN COMMENT POS_LOW(8) TEXT-S04.
PARAMETERS PA_COL AS CHECKBOX.
SELECTION-SCREEN COMMENT POS_HIGH(8) TEXT-S05.
PARAMETERS PA_ICO AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK OUT_PUT.
30,如何使用select-options
程序名称:SAPBC405_SSCD_SEL_SCREEN_I
SAPBC405_SSCD_SEL_SCREEN_II
其主要的语法为:
select-options for
Default
Default to
Memory id
Lower case
Obligatory “必输
No-extension “不具有延伸功能
No intervals
屏幕输出还有一个参数为parameter
语法为:
Parameter p_xxxxx like 。
而select-option 和parameter的使用区别主要在:
*1 使用Select-option时候,默认的全部的值
而使用parameter的时候,默认的值是空值
*2 使用select-option 用for
使用parameter的时候,使用的是like
说明:
*1 由于parameter,默认的是空值,所有在程序中,往往需要用if先进行判断是否为初始值。****initial****
*2 在程序中如果是与范围的参数进行匹配的时候,where条件中用in
32,如何进行初始值?
在initialization的事件中输入
INITIALIZATION.
MOVE: MARK TO PA_ALL.
MOVE: 'I' TO SO_CARR-SIGN,
'BT' TO SO_CARR-OPTION,
'AA' TO SO_CARR-LOW,
'LH' TO SO_CARR-HIGH.
APPEND SO_CARR.
CLEAR SO_CARR.
MOVE: 'E' TO SO_CARR-SIGN,
'EQ' TO SO_CARR-OPTION,
'DL' TO SO_CARR-LOW.
APPEND SO_CARR.
31,input checks: at selection-screen
程序名称:SAPBC405_SSCD_AT_SEL_SCREEN
* Check of selection criterion SO_DEPT
**判断飞行的事件如果小于6点或者大于22点的时候,提示出错误。
AT SELECTION-SCREEN ON so_dept.
IF ( so_dept-low LT '060000' OR so_dept-high LT '060000' )
OR ( so_dept-low GE '220000' OR so_dept-high GE '220000' )
AND airp_fr EQ 'FRA'.
MESSAGE e002(bc405).
ENDIF.
其中MESSAGE e002(bc405).这句中的bc405是一个message的类,而e002是一个消息
For example:
32,如何在程序中call selection-screen?
程序中的部分代码为:sapbc405_sscd_call_sel_screen
Report sapbc405_sscd_call_sel_screen
….
Selection-screen: begin of screen 1100.
Parameters: pa_cus as check box,
Pa_agy as checkbox.
Selection-screen:end of screen 1100.
At selection-screen on pa_add.
If pa_add = mark.
Call selection-sreen 1100
Starting at 5 5 ending at 50 10.
If sy-subrc 0.
Leave to screen 1000.
Endif.
Endif.
显示出来的结果如下:

  33,层级报表的流程?
说明的是:
在使用层级报表的时候,必须要进行排序
  34,关于使用程序中的关键字notes
说明该程序中使用了逻辑数据库
  35,在write语句中,让鼠标移到输出的栏位上就会出现手型的图标
程序中的代码为参见例子
if wa_flights-seatsocc gt 0.
write: wa_flights-seatsocc hotspot on.
else.
write: wa_flights-seatsocc.
endif.
在write中如何画图标
Write icon_red_light as icon.
  36,如何得到鼠标取得的数?
程序中的代码为参见例子
基本语法:
Get cursor field
For example:
*1,data: field_name(30), field_value(50).
get cursor field field_name value field_value.
*2 Data: field_name(30).
……
AT LINE-SELECTION.
GET CURSOR FIELD field_name.
CASE field_name.
WHEN 'WA_FLIGHTS-CARRID'.
SELECT SINGLE carrname currcode INTO (carrname, currcode)
FROM scarr WHERE carrid = wa_flights-carrid.
WRITE: / 'Airline carrier:', carrname,
/ 'Short name:', wa_flights-carrid,
/ 'Local currency of the airline:', currcode.
WINDOW STARTING AT pos sy-curow
ENDING AT 50 30.
  37,事件on change of
参见例子
On change of 、
New page
说明:当改变变量的时候才开始新的一页。
页: [1]
查看完整版本: SAP abap学习的资料