study

st05跟踪   
tcode:se37创建函数     se91:创建消息   se93:创建t-code(良好习惯+2009-05-05)    sm30:表维护(或se55)    se78:图片上传    se41:创建按钮    se51:屏幕screen创建
sm01:tcode加锁解锁(挑勾即可)   sm04:在线用记   sm12:解锁表  
sm69:连接sftp配置(上海)
pi清队列:tcode/smq2
------------------------------------------------------------
STMS:查看传输(传输出错时,在eq8下用户查)   上传excel:smw0  
第一类是同SYSTEM,不同CLIENT:SCC1->输入请求号和源集团,记住打勾->立即执行
第二类是不同SYSTEM,STMS->点小汽车图标->PRD->在传输队列中找到请求号->点小汽车图标,单个传输
配置:FICO模块先传,而后各后勤模块再开始传输
传输请求表:E070

se14  也可激活表
smartforms:smart       su21:维护权限对象  su53:查看当前权限   sm21:读日志   
强制激活表:se14 
传输请求号修改和查看:se10 se09        修改密码:SU3       浏览器:se80
改角色:zrole    录屏:shdb    返回主菜单:s000  
流水号建立:Number Range的通用Tcode:SNRO  
al11 读服务器上的文件
使用job sm36 sm37  查看转储分析  st22
运行时间分析se30 评估:ABAP,数据库,R/3系统 的执行时间         ST05: 性能分析
逻辑数据库se36
badi:se18(定义) se19(实现)
se21 建包
增强cmod  smod    se18(先)  se19(后)
工作流制作器:SWDD
建立权限对象:su20(字段)  su21(对象)
查找DEMO:ABAPDOCU
变式:shd0
查看运行错误 ST22
打开transformation:strans
更改报错类型:OVAH
打开webservice 报错:srt_util
查看SAP所有报表的事物代码:SAP1
查看pi日志:sxmb_moni
se38:RSTXICON 显示所有icon图标
打印:mb90,配置打印m706  老form设计:se71
smicm->display service 显示服务及端口
编译:tcode/sgen 可能运行起来会顺畅点,不用一个个编译。

查找代码的标准程序:se38:RPR_ABAP_SOURCE_SCAN  
代码分析:scii
查看打印输出:sp01    显示假脱机:sp02   查找sap菜单:SEARCH_SAP_MENU

basis:进程查看 sm50,sm66    系统资源状况查看:st06
------------------------------------------------------------
配置 spro   
scc4 看有哪些client
批处理scat(catt)  定义后台sm36  查看后台作业sm37
定义系统消息sm02(即开机消息)

用户及权限控制:
(1)角色创建修改:pfcg
(2)用户创建及配置su01
(3)用户批量处理su10
(4)用户组创建维护sugr

系统监控tcode:
(1)系统日志分析命令
(2)系统进程监控命令
(3)用户状态监控命令

basis
(1)st01   跟踪系统
(2)查看缓存
------------------------------------------------------------
显示列表前面字母:工具栏,最后一项,选项,专家,使用对话框显示确定字段
显示程序:trdir   所有tcode:tstc,tstct    
所有表:DD02L
所有函数:TFDIR

包:TDEVC 
程序名:TADIR(包括所有对象:函数,程序名,即对象名,数据表,数据元素,域等等)
所有程序:PROGDIR(程序对应属性)
视图:TDEVCVT和TDEVC_TADIR_V

存储域(Domain)信息的表为DD01L;
存储数据元素(Data Elements)的表为DD04L;
存储SAP表信息的为DD02L;
DD03L存储Table Fields。
DD01L的LOWERCASE字段决定是否数据会全部转换成大写

调tcode CALL TRANSACTION 'ZR5MMRP002_V2' AND SKIP FIRST SCREEN..
断点设置:BREAK-POINT.    调试 debug
显示cr:se11--->应用程序下--->版本管理    函数组中:utilities--->(点详细)版本--->管理版本
单步调度激活:先进程序,再/h.
表在Q系统下出问题,重新生成过程:se11--->表维护生成器--->删除--->重新生成即可(这时应该生成新cr,如果没有,注意看函数组:版本,以前有旧cr)
查看传输日志:se10---->查找(根据cr)---->光标放在cr号上,点"传输日志"

va01:创建销售订单   vk11:创建条件记录   vk12:修改记录(记住修改完后一定要回车才能保存)
------------------------------------------------------------
修改状态栏标题:set pf-status 'SET_STATUS'.set titlebar 'BAR1' with '库到库的订单审批'.
sy-batch  = 'X' 后台运行
sy-subrc   0有值   4空
sy-cprog  取运行的程序名    
区别:报表ZPANJIN01 调用fm:ZPANJIN02,  sy-repid :SAPLZPANJIN (不可以更改)(当前程序名字)(FM所在FunctionPool的名字(不是function名字)
                                       SY-CPROG:ZPANJIN01(可以改)(调用程序的名字)
                                       
SY-DYNNR:当前Screen号
SY-LANGU   语言(SPRAS = SY-LANGU)   SY-ULINE: 画横线  SY-VLINE: 画竖线   SY-LINNO: 当前行  SY-INDEX : 当前LOOP循环过的次数 
SY-DATUM(类型:datum) 当前日期  2009.06.26    SY-UZEIT(类型uzeit): 当前系统时间;
sy-ucomm  当前取的按钮名称(okcode)
SY-MANDT
IF sy-sysid EQ 'PRD'.
sy-tabix loop at itab from 2 to sy-tabix
sy-index(do enddo中用 while)和sy-tabix(loop中用  read 中用)  用来记录循环的次数
while sy-index < 8  执行8次  

sy-repid 程序名    SY-DYNNR 屏幕号
------------------------------------------------------------
sy-repid 与 sy-cprog 的区别:
sy-repid is the name of the current program.
sy-cprog is the name of the calling program.
比如在一个Function里面设置断点,sy-repid的这个FM所在FunctionPool的名字,sy-cprog是调用这个FM的Report的程序名。
另:sy-repid 不可以人为更改,sy-cprog可以
------------------------------------------------------------
F8执行程序        F5复制游标所在列的内容        F11储存档案        CTRL+F11删除游标所在列
数据类型
C    :字符串
D    :日期型    格式为  YYYYMMDD  例:'1999/12/03'
F  :    浮点数    长度为 8:
I    :整数
N    :数值组成的字符串    如:011,'302'
P  :  PACKED 数    用于小数点数值    如:12.00542
T  :    时间    格式为:HHMMSS    如:'14:03:00'
X  :  16 进制数    如:'1A03'
------------------------------------------------------------
定义变量
  DATA zgzs TYPE int4.
  DATA zjts TYPE int4.
  DATA zgzl TYPE char8.
------------------------------------------------------------
DATA变量宣告
定义变量
例:
    data:msg(20) type c value '测试'.
    DATA: STR1(10) TYPE C VALUE 'AABBCCDDEE'.
    DATA: S1 TYPE I,SUM TYPE I.
    DATA N TYPE I VALUE 100.
    CLEAR N.    '变量 N 的内容变成 0    
定义常数
    CONSTANTS PI TYPE P DECIMALS 5 VALUE ‘3.14159’.
定义字段变量    
    DATA: BEGIN OF ADDRESS,
        NAME(10) TYPE C ,
        NUMBER TYPE P,
    END OF ADDRESS.    "使用时用字段变量加上组件名称, 如 ADDRESS-NAME
------------------------------------------------------------
字符串函数:
合并字符串:concatenate c1 c2 c3 c4 into c5      
合并字符串并间隔:concatenate c1 c2 c3 c4 into c5 separated by c6   连接,中间用c6间隔符  例: "ab+cd+de"

拆分字符串:split c5 at c9 into c1 c2 c3  "把  11*22*33  用* 折分到c1 c2 c3中
替换:lt-zwels_txt = lt-zwels_txt+1(*).  "从第二个字符取起
------------------------------------------------------------
TYPE 叙述
    用来指定数据型态或宣告自定数据型态
    Example:
    TYPES: BEGIN OF MYLIST,
    NAME(10) TYPE C,
    NUMBER TYPE I,
    END OF MYLIST.
    DATA LIST TYPE MYLIST.
------------------------------------------------------------    
LIKE 叙述
    跟TYPE叙述使用格式相同, 如 DATA TRANSCODE LIKE SY-TCODE.
    不同的是 LIKE 用在已有值的数据项, 如系统变量, 而TYPE叙述则是用在指定数据型态。    
------------------------------------------------------------
STATICS
    宣告的变量仅在目前的程序中使用, 结束后会自动释放
------------------------------------------------------------
write:
write / .    write at(10) str.  write str no-zero.去前面0    write no-grouping.省千分号(20,0000,0001 -> 2000000001)
write  str dd/mm/yy  yymmdd mmddyy
write str no-gap  去空格
表格制作  
画横线  uline at 3(10). 或 write at 3(10) sy-uline.
画坚线  write /1 sy-vline,50 sy-vline.   "1和50位置画一坚线
------------------------------------------------------------
TABLES
用来宣告 Table Work Area 的数据, 对映至 ABAP/4 资料文件(Dictionary Object),
由SQL 指令加载所需数据
语法:TABLES <dbtab>
Example:
    TABLES: SPFL.
        Select * FROM SPFL.
        WRITE: SPFL-MANDT, SPFL-CARRID,SPFL-CONNECTION.
    ENDSelect.
从ABAP/4 Dictionary 的 SPFL 档载入MANDT,CARRID,CONNECTION三个字段至SPFL 此Table Work Area
------------------------------------------------------------
系统变量
SY-SUBRC  :  系统执行某指令后,表示执行成功与否的变量,'0'    表示成功
    SY-UNAME: (类型:UNAME) 当前使用者登入 SAP 的 USERNAME;
    SY-DATUM: (类型:datum) 当前系统日期;
    SY-UZEIT: (类型:uzeit)   当前系统时间;
    SY-TCODE:    当前执行程序的 Transaction  code
    SY-INDEX  :      当前 LOOP 循环过的次数
    SY-TABIX:  当前处理的是 internal  table    的第几笔
    SY-TMAXL:  Internal  table 的总笔数
    SY-SROWS:    屏幕总行数;
    SY-SCOLS:  屏幕总列数;
    SY-MANDT:  CLIENT  NUMBER
    SY-VLINE:  画竖线
    SY-ULINE:  画横线
    IF sy-tcode eq 'ZR5MMRP070'.
    
SY-SUBRC返回代码值(0,如果操作成功)
SY-UNAME用户的登录名
SY-DATUM当前日期
SY-UZEIT当前时间
SY-TCODE当前事务    
------------------------------------------------------------
WRITE    
LEFT-JUSTIFIED  资料*左对齐
          CENTERED          数据*中间对齐
          RIGHT-JUSTIFIED    资料*右对齐
          UNDER  <g>        正对在数据项<g>的下面显示
          NO-GAP          紧接着显示,不留空格
          USING  EDIT  MASK  <m>:    使用内嵌子元显示,    如  12:03:20
          USING  NO  EDIT  MASK:    不使用内嵌子元
          NO-ZER        数字前面  0    的部分不显示
          NO-SIGN:            不显示正负号
          DECIMALS  <d>:    显示  <d>    位小数
          EXPOENT  <e>:    F(浮点数)指数的值
          ROUND  <r>:      四舍五入至小数点后<r>位
          CURRENCY  <c>:  币别显示
          DD/MM/YY  :      日期显示格式
          MM/DD/YY:         
          YY/MM/DD:   
          YY/DD/MM
          MM/DD/YYYY:
          DD/MM/YYYY
          YYYY/MM/DD:
          YYYY/DD/MM:
Write AT [/] [<pos>] [(<len>)] 资料项    "有扩号表取长度
/ : 先往下一列        pos : 屏幕X轴坐标         (len): 显示数据的长度          
write 'hello world'.
WRITE /6 'Second Line'.    "往后退6格
WRITE: (5) NUMBER, /(6) TEXT.    "取NUMBER变量的前5位    取text的前6位
skip 5.      "空5行
skip to line 10.  在第10行创建一个空行
INCLUDE <SYMBOL>     INCLUDE <ICON>
WRITE: / 'Phone Symbol:' , SYM_PHONE AS SYMBOL.    WRITE: / 'Alarm Icon:' , ICON_ALARM AS ICON.    "输出符号
SKIP TO LINE 15.   WRITE 'PASS1'.               "直接跳到第15行输出

DATA: FLAG1 VALUE ' '.        FLAG2 VALUE 'X'.    
WRITE: / ‘CHECK FLAG 1:’ , FLAG1 AS CHECKBOX.    WRITE: / ‘CHECK FLAG 2:’ , FLAG2 AS CHECKBOX.  "显示 CHECK BOX 数据
------------------------------------------------------------
MESSAGE使用(se91 维护 消息:"转到"-"消息") (表:T100:包含所有的message)
    message w000(mid).
    定义:000   aaa, 001  bbb,003 ccc
    可以定义输入参数&,如“& & &”表示有 3 个参数。
    消息的类型:
    E——错误    W——警告    I——信息(弹出框)    A——异常终止(弹出框,并同时强制退出)    S——成功
    注:E,W,S 一般会在状态栏显示  
例1:MESSAGE E003(YMESS).”  其中,E 表示错误类型,编号 003 的消息表示“价格不能为空”。
例2: report za1 message-id 00.
    message w002.
    也等于  report za1.
            message w002(00).
例3:
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.    //YMESS为定义的消息类   I:表信息        with:为连接符
message e000 'aaa'
例4:MESSAGE '必须输入请求号和地址' TYPE 'I'.
    EXIT.
or MESSAGE '必须输入请求号和地址' TYPE 'E'.

data l_rt type table of bapiret2 with header line.
loop at l

message '转出成本中心与对应的活动类型不符' type 'S' display like 'E'.  "这种报错,不会屏幕变黑,不会影响下面程序运行
stop.
改成:
 lerror = 1.
 message '转出成本中心与对应的活动类型不符' type 'S' display like 'E'.
 if lerror ne 1.
        perform frm_save.
 endif
------------------------------------------------------------
为新程序增加标题和列标题
    "转到"-"文本"-"清单标题"
    
文本设定
    "转到"-"文本"-"文本符号"    
    例:001   潘劲1   
       002   潘劲2
       003   潘劲3
      
      使用:write / text-001.    //输出   潘劲1      
------------------------------------------------------------
定义内表
无表头
方法一:
types: begin of wa_itab,
         bookname(30) type c,
         author(50)   type c,
       end of wa_itab.
DATA: itab LIKE TABLE OF wa_itab ,   
方法二:
data: wa_prps type prps(结构或表)
      lt_prps type table of prps.(like一样)

方法三:data:wa like line of it_itab    "声明一个结构



有表头
方法一:(用occurs_with head)
types: begin of typ_book,
         bookname(30) type c,
         author(50)   type c,
end of typ_book.
data itab type typ_book occurs 0 with head line."有表头(用like 有时,不能用结构,要用内表)

方法二:(用standard+ with head)
data itab type standard table of typ_book with header line. "有表头()

方法三:(直接WITH HEADER LINE)
DATA: itab LIKE TABLE OF marc(有头内表) WITH HEADER LINE. (也可用type)

方法四:
data: begin of ibook occurs 0,    "有表头
         bookname(30) type c,
         author(50)   type c,
       end of ibook.

方法五:data:t_stpu TYPE OPTIONAL OCCURS 0 WITH HEADER LINE.   " OPTIONAL是个结构      
---------------------工作区使用---------------------------
begin of ty_bseg,  
    belnr type bseg-belnr,
end of ty_bseg.

loop at t_bseg into wa_bseg.    
    append wa_bseg to g_t.
endloop.
------------------------------------------------
例:定义有表头和无表头的内表
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.   "定义有表头内表
DATA:   MAN1 LIKE TABLE OF MAN.   "定义无表头内表
    MAN-NAME = '刘志'. 
    MAN-HIGH = '1.78'.
    MAN-WEIGHT = 160. 
APPEND MAN TO MAN1.      "操作有表头内表
MOVE MAN1[] TO MAN2.     "操作无表头内表
move-corresponding gt_output to gt_output2.  "对应字段的move   

LOOP AT MAN1.                            ""输出有表头内表
  WRITE: / MAN1-NAME,MAN1-HIGH,MAN1-WEIGHT.
ENDLOOP.

LOOP AT MAN2 INTO MAN.                  "输出无表头内表
  WRITE: / MAN-NAME,MAN-HIGH, MAN-WEIGHT.
ENDLOOP.


SAP中常用的内表与工作区的定义方式
DATA:
1、wa type spfli. "工作区
    wa type spfli occurs 0. "无表头的表
    wa type spfli occurs 0 with header line. "有表头的表
2、data: BEGIN OF wa, "工作区
            carrid TYPE spfli-carrid,
            connid TYPE spfli-connid,
            cityfrom TYPE spfli-cityfrom,
            cityto TYPE spfli-cityto,
    END OF wa,
    itab LIKE SORTED TABLE OF wa WITH NON-UNIQUE KEY cityfrom cityto. "排序表
3、itab TYPE STANDARD TABLE OF spfli, "表
       wa LIKE LINE OF itab. "工作区
4、DATA: line(72) TYPE c,
       list LIKE TABLE OF line(72). " 表
------------------------------------------------------------
读取内表:
格式一:
LOOP  AT  <itab>  [INTO  <wa>][FROM  <n1>  TO  <n2>][Where  <conditions>] <statement>  
"loop at itab from 1 to 10.  "读取1到10行
ENDLOOP.
Example:
                  LOOP  AT  ITAB  INTO  LINE  Where  COL1  >100.
                      WRITE:  /  SY-TABIX,LINE-COL1.
                  ENDLOOP.
仅读取  COL1  >  100    的元素
格式二:
READ  TABLE  <itab>  [INTO  <wa>]  [INDEX  <idx>  /  WITH  KEY  <conditions>]
举例.  
DATA:  BEGIN  OF  ITAB  OCCURS  10,
              COL1  TYPE  I,
              COL2  TYPE  I,
      END  OF  ITAB.
      DO  10  TIMES.
          ITAB-COL1  =  SY-INDEX.
          ITAB-COL2  =  SY-INDEX  *  2.
          APPEND  ITAB.
ENDDO.
READ  TABLE  ITAB  INDEX  3.
(或者:  READ  TABLE  ITAB  WITH  KEY  COL1  =  3.)
WRITE:  /  'ITAB-COL1  =  ',  ITAB-COL1,  'ITAB-COL2  =  ',  ITAB-COL2.
执行结果同样是:   
ITAB-COL1  =      3
ITAB-COL2  =      6.

READ TABLE gt_BSAK_tmp WITH KEY AUGBL(3) = '150'.   取表里前3位是
------------------------------------------------------------
使用工作区和内表分另输出数据(三种输出方式):
DATA A_SPFLI TYPE SPFLI.    *定义工作区
DATA TA_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE. *定义内表,请注意有HEADER LINE

Select * INTO CORRESPONDING FIELDS OF A_SPFLI FROM SPFLI UP TO 5 ROWS.     "使用工作区
  WRITE: / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM,A_SPFLI-CITYTO.
ENDSelect. 

Select * INTO CORRESPONDING FIELDS OF TABLE TA_SPFLI FROM SPFLI UP TO 5 ROWS.  "使用内表
LOOP AT TA_SPFLI.
  WRITE: / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM,A_SPFLI-CITYTO.
ENDLOOP.

LOOP AT TA_SPFLI INTO A_SPFLI.     '将内表数据转移至工作区'.
  WRITE: / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM,A_SPFLI-CITYTO.
ENDLOOP.
------------------------------------------------------------
修改内表值:(记住最后一定要modify,不然没法保存 )
格式:  MODIFY  <itab>  [FROM  <wa>][INDEX  <idx>][TRANSPORTING  <f1><f2>…][Where  <conditions>]
举例一.  READ  TABLE  ITAB  INDEX  3.
        LINE-COL1  =  29.
        MODIFY  ITAB  FROM  LINE  TRANSPORTING  COL1.    "将第三笔记录的 COL1 字段的值修改为 29.
举例二.  T_SALARY-salary  =  50.
        MODIFY  T_SALARY  TRANSPORTING  salary  Where  birthday  =  '1999/12/06'.


修改内表的一行: MODIFY 表itab  FROM   工作区wa_ TRANSPORTING  Field1 Field2.----  Where 条件1 and 条件2.
修改内表的多行:MODIFY 表itab  FROM   工作区wa_  INDEX 行号 TRANSPORTING  Field1 Field2--


DATA:itab  LIKE TABLE OF 结构  WITH KEY col1 col2.  
MODIFY TABLE  itab  FROM wa_itab.    "itab  一定要有key,如果没有key ,相当于全部是主键,全部字段是key, 更新失败 subrc  = 4
------------------------------------------------------------
删除内表元素:
格式:  Delete  <itab>  INDEX  <idx>.
或:    Delete  <itab>[FROM  <n1>  TO  <n2>]  [Where  <conditions>]
Example:
    Delete ITAB FROM 3 TO 10.
    删除第3至第10个元素
------------------------------------------------------------
insert 内表元素:(注:只能插入单行)
(1)Insert wa1 INTO TABLE <itab>.
(2)通过索引插入:Insert LINE INTO ITAB INDEX IDX.
1.对于标准表而言,和APPEND LINE TO ITAB。的结果一样。
2.对于排序表而言,插入行不可以打乱关键字的排序顺序,否则报错。
3.对于哈希表而言,插入过程中系统按照关键字对行进行定位
------------------------------------------------------------
选择屏幕输入命令
Select-OPTIONS AIRLINE FOR SPFLI-CARRID NO INTERVALS   "单值选择
                                        NO-EXTENSION.  "

空一行:SelectION-SCREEN: SKIP 1.
要从屏幕输入变量,    使用的命令是  PARAMETERS 及 SelectION-OPTIONS:   
    1.  PARAMETER:    输入一个变量或字段内容
    2.  SelectION-OPTIONS:    使用条件筛选画面来输入数据
PARAMETERS    指令
基本的输入命令,    类似如 BASIC 的 INPUT 命令,    但无法使用 F 格式(浮点数)
语法:
        PARAMETERS  <p>  [DEFAULT  <f>]  [LOWER  CASE]
                            [OBLIGATORY]  [AS  CHECKBOX]
                            [RADIOBUTTON  GROUP  <rad>]   
        Example:
            PARAMETERS:  NAME(8),
                            AGE  TYPE  I,
                            BIRTH  TYPE  D.
                            
1.  DEFAULT   
设定输入的默认值
Example:
    PARAMETERS:  COMPANY(20)  DEFAULT  'DELTA',
                    BIRTH  TYPE  D  DEFAULT  '19650201'.
2.    LOWER  CASE
      ABAP/4    预设是将字符串输入值自动转换为大写,    加上此参数会将输入的数
据转成小写,   
3.    OBLIGATORY
强制要求输入,    屏幕上会出现一个  ?  ,    使用者必须要输入才可.  必填
4.    AS  CHECKBOX
输入  CHECKBOX 的格式
Example:
          PARAMETERS:  TAX  AS  CHECKBOX  DEFAULT  'X',
                          NTD  AS  CHECKBOX.
执行结果:

5.    RADIOBUTTON  GROUP  <rad>
输入  RADIO  BUTTON  GROUP    的方式
      Example:
      PARAMETERS:  BOY  RADIOBUTTON  GROUP  SEX  DEFAULT  'X',           
                    GIRL  RADIOBUTTON  GROUP  SEX.
exp  :
TABLES  SPLFI.
PARAMETERS:  LOW  LIKE  SPFLI-CARRID,  
              HIGH  LIKE  SPFLI-CARRID.
            Select  *  FROM  SPLFI  Where  CARRID  BETWEEN  LOW  AND  HIGH.
                ........
            ENDSelect.


SelectION-OPTIONS指令
    SelectION-OPTIONS 所输入的值实际上是放在 internal  table 中的,该 Intern
al  table    有四个字段,分别是:SIGN,OPTION,LOW,HIGH..    条件筛选检查条件输
入画面指令,    输入条件后可配合 Select 指令自 TABLE 读取符合条件的数据,    直
接执行或放入  Internal  Table 中,    条件有四个参数:
1.  SIGN:   
      I:    表筛选条件符合的资料
      E:    表筛选条件不符合的资料
2.  OPTION:    比较的条件符号
          EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)  
          CO(仅包含) CN(不仅包含)  CA(包含任何)  NA(不包含任何)  CS(包含字符串)  NS(不包含字符串) CP(包含),NP(不包含)
3.  LOW:    最小值
4.  HIGH:    最大值
语法:
          SelectION-OPTIONS  <check-option>  FOR  <table-field>
Example:
          TABLES  SPFLI.
          Select-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
将条件的输入值存放入  AIRLINE,    筛选选择为 SPFLI 中的 CONNID 字段

改变条件输入格式
1.  DEFAULT  <begin>  TO  <end>
设定开始结束范围输入默认值
      Example:
      Select-OPTIONS  AIRLINE  FOR  SPFLI-CONNID  DEFAULT  '2042'  TO  '
4555'.
2.  NO-EXTENSION
设定不要 Multi-Option 输入画面
3.  NO  INTERVALS
设定不要区间范围输入画面
4.  LOWER  CASE
输入转换成大写
5.  OBLIGATORY
强制要求输入 
------------------------------------------------------------          
选择屏幕:
1.大框里套小框  select-screen begin of block out_put with frame title text-001.
                    select-screen begin of block out_put with frame title text-002.
2.复选框做一行:
    selection-screen begin of line.
        selection-screen comment 1(20) text-01.  "说明
        parameters pa_col as checkbox.
    selection-screen end of line.
3.单选框做一行
selection-screen begin of line.
PARAMETERS: R1 RADIOBUTTON GROUP RAD1  DEFAULT 'X'.
SelectION-SCREEN COMMENT 4(6) C1.
LOAD-OF-PROGRAM.
INITIALIZATION.                      "INITIALIZATION事件
C1 = '明细'.
C2 = '产品型号汇总'.    
4.定义屏幕:
    selection-screen 1100.
    selection-screen:end of screen 1100. 
------------------------------------------------------------         
事件:
1.at selection-screen on help-request for so_dept.    "按F1 出屏幕
        call screen 100 starting at 30 03
                            end     at 10 10. 
2.回车复选框出屏幕
  at selection-screen on pa_add.
        call                        
------------------------------------------------------------
SelectION-SCREEN (屏幕输出格式:空行,框面板等)   (选择屏幕空白行)
    1.产生空白列
语法:
      SelectION-SCREEN  SKIP  [<n>]
          Example:
                    SelectION-SCREEN  SKIP  2.   "空2行
                    SelectION-SCREEN SKIP.  "空一行
产生两列空白列
    2.产生底线
语法:
      SelectION-SCREEN  ULINE  /  <pos>(length)
          Example:
                    SelectION-SCREEN  ULINE  /10(30).
自第 10 格开始产生长度 30 的底线
    3.印出备注说明
语法:   
      SelectION-SCREEN  COMMENT  /  <pos>(length)  <name>
          Example:
                    REMARK  =  'Pls  enter  your  name'.
                    SelectION-SCREEN  COMMENT  /10(30)  REMARK.
    4.    同一列中输入数个数据项
语法:
      SelectION-SCREEN  BEGIN  OF  LINE.
……
      SelectION-SCREEN  END  OF  LINE.
      Example:
              SelectION-SCREEN  BEGIN  OF  LINE.
                  SelectION-SCREEN  POSITION  20.
                  PARAMETERS  NAME(10).
                  SelectION-SCREEN  POSITION  40.
                  PARAMETERS  BIRTH  TYPE  D.
              SelectION-SCREEN  END  OF  LINE.
在 20 格输入 NAME 内容,  40 格输入  BIRTH 的内容

    5.    绘出 BLOCK  PANEL
语法:
SelectION-SCREEN  BEGIN  OF  BLOCK  <block>
                      [WITH  FRAME  [TITLE  <title>].
…….
SelectION-SCREEN  END  OF  BLOCK  <block>.
Example:
                SelectION-SCREEN  BEGIN  OF  BLOCK  RADIO    WITH  FRAME.
                  PARAMETER  R1  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R2  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R3  RADIOBUTTON  GROUP  GR1.
                SelectION-SCREEN  END  OF  BLOCK  RADIO.  
                
                
------------------------------------------------------------
SQL 语法
Select 语句
语法格式:
Select  <result>  [INTO  <target>]  [FROM  <source>]  [Where  <condition>]
                [GROUP  BY  <fields>]  [ORDER  BY  <sort  order>]
相关的系统变量:
      SY-SUBRC  =  0  表示读取数据成功
                <>  0    表示未找到符合条件的记录
      SY-DBLNT:    被处理过的记录的笔数.
相关的命令:
      EXIT.    退出循环.
      CHECK  <logistic  statement>.如果逻辑表达式成立,则继续执行,否则,开
始下一次循环.

利用循环方式读取所有记录
Select    ….ENDSelect.是循环方式读取记录的.
◆将读取的记录存放至 Work Area
    Select ….. INTO <wa>
    Example: TABLES SPFLI.
    DATA WA LIKE TABLES.
        Select * FROM SPFLI INTO WA.
        WRITE: / WA-COMPANY,WA-PLANT.    "输出方式不是select
    ENDSelect.
    逐笔写入WA 工作区中
◆将读取的数据写入 Initial Table 中
Select .. INTO TABLE <itab>
Example:
    TABLES SPFLI.
    DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
    Select * FROM SPFLI INTO ITAB.      "输出方式
    一次读10笔(Initial Table的长度)记录存入 ITAB 中
◆读取一笔数据
Example:
    TABLES  SPFLI.
    Select  SINGLE  *  FROM  SPFLI    Where  PLANT  ='CHUNGLI'  AND  TEL='4526174'.
    WRITE:  /  SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL.

    Select SINGLE AUGBL AUGDT INTO (gt_t001-AUGBL,gt_t001-AUGDT) FROM bsak Where BELNR = gt_t001-BELNR and GJAHR = gt_t001-GJAHR and UMSKZ = 'Y'.
    多条 select 
         endselect
◆将读取的记录放在 work  area 中,并且加入 Internal  table    中.
举例一:
TABLES  MARD.   
DATA:  BEGIN  OF  ITAB  OCCURS  10,
              MATNR  LIKE  MARD-MATNR,
              WERKS  LIKE  MARD-WERKS,
              LGORT  LIKE  MARD-LGORT,
              LABST  LIKE  MARD-LABST,
        END  OF  ITAB.
Select  MATNR  WERKS  LGORT  LABST   
              INTO  CORRESPONDING  FIELDS  OF  ITAB   
              FROM  MARD
              Where  MATNR  =  '3520421700'.
        APPEND  ITAB.
        CLEAR  ITAB.
ENDSelect.
(将读取的结果放在 Internal  table  ITAB 中)
举例二.
TABLES  MARD.
Select  MATNR  MTART  MAKTX  INTO  (t_matnr,  t_mtart,  maktx)   
FROM  MARD
                Where  MATNR  =  '3520421700'.
        <Statements>.
ENDSelect.
(从 MARD 中抓取料号=3520421700 的料号、类型和描述,放在变量 t_matnr,  t_
mtart,  maktx 中)。

        Example:
                  TABLES  SPFLI.
                  DATA  WA  LIKE  TABLES.
                  Select  *  FROM  SPFLI  INTO  WA.
                    WRITE:  /  WA-COMPANY,WA-PLANT.
                  ENDSelect.
逐笔写入 WA    工作区中
举例三.
将读取的数据写入  Initial  Table    中
语法:
        Select  ..  INTO  TABLE  <itab>     
        Example:
        TABLES  SPFLI.
        DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER  LINE.
        Select  *  FROM  SPFLI  INTO  ITAB.
一次读 10 笔(Initial  Table 的长度)记录存入  ITAB    中

        Select  ..  INTO  TABLE  <itab>  PACKAGE  SIZE  <n>
一次读取  <n>    笔记录至  <itab>中
        Example:
            TABLES  SPFLI.
            DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER  LINE.
            Select  *  FROM  SPFLI  INTO  ITAB  PACKAGE  SIZE  5.   
一次读取  5    笔记录

exp  :

TABLES  SPFLI.
DATA:  BEGIN  OF  WA,
          NUMBER  TYPE  I  VALUE  1,
          CITYFROM  LIKE  SPFLI-CITYFROM,
          CITYTO    LIKE  SPFLI-CITYTO,
      END  OF  WA.
Select  *  FROM  SPFLI  INTO  CORRESPONDING  FIELDS  OF  WA.
    WRITE:  /  WA-NUMBER,  WA-CITYFROM,  WA-CITYTO.
ENDSelect.
输出如下所    示:
在该示例中    ,系统只将    数据库表SPFLI中选定行的    列CITYFROM和CITY
TO传送到WA中。WA中的组件NUMBER保持不变。
------------------------------------------------------------
Insert    语句
加入一笔记录至数据库
◆自 Work Area 工作区,从 work  area    加入到 Internal  Table 中
    格式:  Insert  INTO  <database>  VALUES  <work  area>
    例如:   
    DATA:  BEGIN  OF  WA,
                  CODE(6)  TYPE  C,
                  NAME(30)  TYPE  C,
            END  OF  WA.
    DATA:  VEN  LIKE  WA  OCCURS  10.
    …
    WA-CODE  =  '530120'.
    WA-NAME  =  'XINGDA  ELECTRONICS  CO.,LTD'.
    Insert  INTO  VEN  VALUES  WA  
    如果 work  area 的名称就是 internal  table 的名称,可以直接写成:
          Insert  <internal  table>
    例如:
    DATA:  BEGIN  OF  WA  OCCURS  10,
                  CODE(6)  TYPE  C,
                  NAME(30)  TYPE  C,
            END  OF  WA.
    …
    WA-CODE  =  '530120'.
    WA-NAME  =  'XINGDA  ELECTRONICS  CO.,  LTD'.
    Insert  WA.
◆自 Internal Table,从另外一个 Internal  table 中 Insert    数据
    格式:
    Insert  <itab1>  FROM  TABLE  <itab2>  [ACCEPTING  DUPLICATE  KEY]
    将<itab2>中非 NULL 的数据加入<itab1>中,加上[ACCEPTING  DUPLICATE  KEY]
    能限制相同 PRIMARY  KEY 不重复加入.
    Example:
        TABLES SPFLI.
        DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
        ITAB-NO = ‘34051920’.
        ITAB-COMPANY = ‘DELTA’.
        APPEND ITAB.
        ….
        Insert SPFLI FROM TABLE ITAB
        ACCEPTING DUPLICATE KEY.

加入一笔记录至数据库
1.自  Work  Area    工作区
语法:
        Insert  INTO  <database>  VALUES  <wa>
        Example:
                  TABLES  SPFLI.
                  DATA  WA    LIKE  SPFLI.
                  WA-NO  =  '34051920'.
                  WA-COMPANY='DELTA'.
                  Insert  SPFLI  VALUES  WA.
将  ITAB    数据加入  SPFLI 中,    也可写成  Insert  SPFLI  FROM  IT
AB.

                  SPFLI-NO='34299876'.
                  SPFLI-COMPANY='HP'.
                  Insert  SPFLI  FROM  SPFLI.
将 Work  Area  SPFLI 中的数据加入数据库档案  SPFLI 中
因 Work  Area  SPFLI 的结构与数据文件  SPFLI 一样,    所以也可
写成  Insert  SPFLI.

    2.自  Internal  Table
语法:
Insert  <database>  FROM  TABLE  <itab>  [ACCEPTING  DUPLICA
TE  KEY]
将  <itab>中非  NULL 的数据加入  <database>中,    加上  [ACCEPTING
DUPLICATE
            KEY]能检查不加入有重复 primary  key,    若有重复则  SY-SUBRC    会传回
  4
            Example:
                    TABLES  SPFLI.
                    DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER  LINE.
                    ITAB-NO  =  '34051920'.
                    ITAB-COMPANY  =  'DELTA'.
                    APPEND  ITAB.
….
                    Insert  SPFLI  FROM  TABLE  ITAB  
                              ACCEPTING  DUPLICATE  KEY.
------------------------------------------------------------
Update    指令
异动已存在的记录内容

1.使用  Primary  Key
语法:   
            Update  <database>  FROM  <wa>
            Example:
                      TABLES  SPFLI.
                      DATA  WA  LIKE  SPFLI.
                      WA-NO='34051920'.
                      WA-COMPANY='DELTA'.
                    Update  SPFLI  FROM  WA.
如  SPFLI    的  Primary  Key 是  NO,    则会找到  NO='34051920'
的记录,    将其  COMPANY 字段异动为  DELTA

2.使用条件式
语法:
        Update  <database>  SET  <  f1>=<values>…  Where  <condition>
根据条件式异动符合条件式的记录
        Example:
                  Update  SPFLI  SET  NO='34051920'
                                        COMPANY  =  'DELTA'
                                  Where  TEL='4526107'.
------------------------------------------------------------
3.    MODIFY    语法(也可以操作数据库 modify table from table itab)
      MODIFY  <internal  table>  [FROM  <work  area>].
根据  Primary  Key    寻找数据文件中符合的记录,    若找到则更新异动,
则新增记录
语法:
        MODIFY  <database>  FROM  <wa>
        Example:
                WA-NO='34051920'.
                WA-COMPANY='DELTA'.
                MODIFY  SPFLI  FROM  WA.
------------------------------------------------------------
4.    Delete    语法
      Delete  <internal  table>  [FROM  <work  area>].
或:  Delete  <internal  table>  [Where  <conditions>]
删除数据文件的记录

1.使用  Primary  Key
语法:   
            Delete  <database>  FROM  <wa>
            Example:
                      TABLES  SPFLI.
                      DATA  WA  LIKE  SPFLI.
                      WA-NO='34051920'.
                      WA-COMPANY='DELTA'.
                      Delete  SPFLI  FROM  WA.
如  SPFLI    的  Primary  Key 是  NO,    则会找到  NO='34051920'
的记录,    找到后将此笔删除

2.使用条件式
语法:
        Delete  FROM  <database>  Where  <condition>
根据条件式删除符合条件式的记录
        Example:
                  Delete  FROM  SPFLI  Where  AREA  =  'AMERICAN'.
------------------------------------------------------------
5.  DATABASE  CURSOR
  Database  Cursor 是一个数据库暂存区,    将经 Select 指令读取的记录存放至
此暂存区,    再由此暂存区放至 Work  Area 中,    可减少数据库读取的次数.
1.开启  Database  Cursor
语法:
        OPEN  CURSOR  <c>  FOR  Select    …  Where  <condition>
        Example:
                TABLES  SPFLI.
                DATA:  WA  LIKE  SPFLI,
                        C1  TYPE  CURSOR.
                OPEN  CURSOR  C1  FOR  Select  *  FROM  SPFLI 
     Where  AREA  ='TAIWAN'.
  2.读取  Database  Cursor 的数据存入  Work  Area
语法:
      FETCH  NEXT  CURSOR  <c>  INTO  <wa>
          Example:
                    FETCH  NEXT  CURSOR  C1  INTO  WA.
读取下一笔 Cursor 位置的数据存入 WA,    如果已无数据可读,  SY-SUBRC  <>0.

关闭  Database  Cursor
语法:
      CLOSE  CURSOR  <c>
      Example:
                CLOSE  CURSOR  C1.
------------------------------------------------------------ 
COMMIT WORK 与 ROLLBACK WORK
   要确定资料成功写入数据库, 可使用 COMMIT  WORK 指令, 如: 
   COMMIT  WORK.
   相反的, 如果反悔要复原, 可使用 ROLLBACK  WORK, 可复原在上个COMMIT WORK
   指令之后的数据, 如:
   ROLLBACK  WORK.    
------------------------------------------------------------   
BAPI_TRANSACTION_COMMIT
BAPI_TRANSACTION_ROLLBACK
------------------------------------------------------------
条件述叙
1.  IF    
例: IF  3  >  8.
                    WRITE  /  '3  is  less  than  8'.
                ENDIF.

2.  CASE    
例: S  =  'A'.   
                  CASE  S.
                    WHEN  'X'.
                        WRITE  /  'String  is  X'.
                    WHEN  OTHERS.
                        WRITE  /  'String  is  not  X'.
                  ENDCASE.
3.DO 
例: DO  2  TIMES.
                    WRITE  /  'X'.
                ENDDO.
4.while
例: I  =  1.
              S=0.
              WHILE  I  <=  10.
                S  =  S+I.
                I=I+1.
              ENDWHILE.
              WRITE:  /  '  1+2+3+…+10=',S.
5. CONTINUE
例: DO  3  TIMES.
            IF  SY-INDEX  =  2.
              CONTINUE.
            WRITE  /  SY-INDEX.
        ENDDO.
6.CHECK (CHECK    之后条件成立才继续往下执行迥圈)
例: Example:
            DO  5  TIMES.
              CHECK  SY-INDEX  BETWEEN  2  AND  4.
              WRITE  /  SY-INDEX.
            ENDDO.
7.  EXIT(跳离迥圈叙述)
例: DO  10  TIMES.
            IF  SY-INDEX  =  4.
              EXIT.
            ENDIF
            WRITE  /  SY-INDEX.
          ENDDO.
          
 ------------------------------------------------------------
Module         
可分成以下几个部分:
    1.Macro Block
    2.Include Program
    3.Subroutine Program
    4.Function Module
◆Macro Block    类似宏
    定义:DEFINE <macro>.
            <宏叙述
        END-OF-DEFINITION.
        Example:利用宏计算N次方
            DATA RESULT TYPE I.
            DEFINE MULTI.
            RESULT = &1 ** &2.
            WRITE: / ‘&1 ^ &2 = ‘,RESULT.
            END-OF-DEFINITION.
            MULTI 3 4.
            执行结果为 3 ^ 4 = 81
            
example2:
        DATA: RESULT TYPE I,
              N1     TYPE I VALUE 5,
              N2     TYPE I VALUE 6.
        DEFINE OPERATION.
           RESULT = &1 &2 &3.
           OUTPUT   &1 &2 &3 RESULT.
        END-OF-DEFINITION.
        DEFINE OUTPUT.
           WRITE: / 'The result of &1 &2 &3 is', &4.
        END-OF-DEFINITION.
        OPERATION 4 + 3 .
        OPERATION 2 ** 7.
        OPERATION N2 - N1.
        输出如下:
        The result of 4 + 3 is          7
        The result of 2 ** 7 is        128
        The result of N2 - N1 is          1        
◆Include Program(很类似C 的Include header file 的做法,也常用于全变量)    
Example:
    PROGRAM YTEST1.
    INCLUDE YSTART. “载入 YSstart的所有内容    
◆Subroutine Procedure
1.    Call By Reference:
    FORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]
    PERFORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]
2.    Call By Value
    FORM  <subr>  USING  VALUE(<f1>…)
3.    Call By Value and Return Result
传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制
一份传回给外部实际变量.
    FORM  ….. CHANGING  VALUE(<f1>)
    PERFORM  …. CHANGING …. <f1>

◆Function Module
在最左边开发工具下选择函数编译器
<1>.Import Parameter: 传入的参数名称, 但实际在程序中使用时刚好与Export 相颠们
<2>.Export Parameter: 传回的参数名称, 程序中变成 Import 的使用 
<3>.Changing Parameter:使用Call By Value and Return Result方法的参数
<4>.Table Parameter: 使用的 Initial Table参数
<5>.Exceptions: 错误处理参数 


------------------------------------------------------------
(1)CLEAR    ITAB.       同时清空表头和行内表的值

(2)CLEAR    ITAB.       只清空内表本身的值,保留表头行的值。   
    例改内表内容
  LOOP AT t_vbeln.
        If t_vbeln-LFART EQ 'EL'.    "发运日期就取LFDAT
            t_vbeln-wadat_ist = t_vbeln-LFDAT.
        ELSE . "发运日期就取WADAT
           t_vbeln-wadat_ist = t_vbeln-WADAT.
        EndIF.
        modify t_vbeln.
        clear:t_vbeln.
  ENDLOOP.

(3)REFRESH I   TAB     只清空内表本身的值,保留表头行的值。

(4)FREE    ITAB.            只清空内表本身的值,保留表头行的值。


------------------------------------------------------------
Initial Table
1.    REFRESH  <itab>
使用在没有 HEADER LINE 的 Internal Table中, 清除所有元素
     Example:
              REFRESH  ITAB.
  
2.     CLEAR  <itab>[ ]
使用在有 HEADER LINE 的 Internal Table中, 清除所有元素
     Example:
              CLEAR  ITAB[ ].

3.    FREE  <itab>
释放(Release) Internal Table所占的内存空间, 用在 REFRESH和 CLEAR指令之后
Example:
        FREE  ITAB.

------------------------------------------------------------
SAP ABAP 开发中常用的方法总结
1, 在ABAP开发中, 我们经常会删除内表中的去重复行,这时我们会需要一个很方便的语句,就是"Delete ADJACENT DUPLICATES FROM", 但是在使用这个语句,要注意它删除相邻的重复行,我们一般要通过SORT 对这个语句进行排序,示例如下:
DATA: BEGIN OF wa_pa0001,
    pernr LIKE pa0001-pernr,
    uname LIKE pa0001-uname,
    bukrs LIKE pa0001-bukrs,
    plans LIKE pa0001-plans,
END OF wa_pa0001.
DATA: itab_pa0001 LIKE TABLE OF wa_pa0001 WITH HEADER LINE.
SORT itab_pa0001 BY pernr.
Delete ADJACENT DUPLICATES FROM itab_pa0001.
根据某一字段去重复  Delete adjacent duplicates之前一定要sort
  SORT T_ZR5_MM006 BY MBLNR.
  Delete ADJACENT DUPLICATES FROM T_ZR5_MM006 COMPARING MBLNR.  一个字段
  Delete ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.   比较所有字段
  
  delete itab from  450  to 550.  "指定行范围删除
2, 在ABAP开发中,有时要进行一个耗费时间的处理,这时不想让客户感到处理出现问题或者以为是电脑死机,给出一个提示,“请等待的...”,可以使用下面语句:

CALL FUNCATION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = '数据处理中,请等待...'.
" 进行耗费时间处理
3, 在ABAP开发中,有时我们做的程序界面是不需要全部必选的,例如:
SelectION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE TEXT-001.
    PARAMETERS: p_werks LIKE mseg-werks. " 物料凭证-工厂
    PARAMETERS: p_lgort LIKE mseg-lgort OBLIGATORY. " 物料凭证-库存地点
    Select-OPTION: s_mblnr FOR mseg-mblnr. " 物料凭证-编号
SelectION-SCREEN END OF blk.
在选在屏幕中p_lgort 是必选;s_mblnr 是一个范围,在OPEN-SQL中可以使用IN查询范围, 若s_mblnr 没有数据时,取全部,有数据时取符合条件的数据;p_werks为一个数据值,在写SQL语句时,我们要根据条件进行SQL拼加。在这我们可以通过Select-OPTION 做一个操作,通过如下语句 Select-OPTION: s_werks FOR mseg-werks NO-EXTENSION NO INTERVALS. 可以去掉Select-OPTION 的区间选项、后缀选项,但有个问题是不能去掉"=、<=、<、>、>="选择。
------------------------------------------------------------
宏定义:
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.

MAN1-NAME = '张林'. 
MAN1-HIGH = '1.78'.
MAN1-WEIGHT = 140. 

ASSIGN MAN1 TO <FSA>.
WRITE: / <FSA>-NAME, 
                  <FSA>-HIGH, 
                  <FSA>-WEIGHT. 
------------------------------------------------------------
常用函数
1.把内表值保存到本地    DOWNLOAD                    
2.与上相反读本地文件值到内表      UPLOAD(有提示窗口)    
                        CALL FUNCTION    'WS——UPLOAD'   (无提示窗口)    
------------------------------------------------------------    
常用代码和过程名:
FORM sub_select_data .
FORM sub_show_result .
FORM sub_lgort_help
------
START-OF-SelectION.
  perform get_lxno_ranges.
  PERFORM frm_get_data.
END-OF-SelectION.
  PERFORM frm_show_data.
------------------------------------------------------------
选择屏幕同时设置几个默认值
INITIALIZATION.
s_mblnr-sign = 'I'.
S_MBLNR-OPTION = 'EQ'.
S_MBLNR-LOW = '5000013533'.
APPEND S_MBLNR.

append lines of itab1 to itab2.  把第一个内表给到第二个内表
------------------------------------------------------------
判断内表是否为空:
if it_itab[] is not initial
------------------------------------------------------------
判断日期是否为空:
不是DEAKT = '',也不是DEAKT is initial,而应该写成DEAKT = '00000000' (8个0)。 
------------------------------------------------------------
注1.传输时:report texts 为表维护生成时生成的,不用管    
  2.事务smw0 改excel模板
  3. zr5  省   开发类无 w1                        -------王阳
     zr2  大区   开发类有 w1  即"推广1"           -------雷刚,潘银星 
  4.
--------------------------------------------------------------
创建消息过程:
例:message class:se91,输入/BDL/BDL3--->display--->添加后激活即可
    MESSAGE s888(sabapdocu) WITH '输入错误或数据不存在,请重输!'.    (红色报警)
    MESSAGE e888(sabapdocu) WITH '输入错误或数据不存在,请重输!'.    (红色报警)
    MESSAGE E398(00) WITH '领料数量不能大于原数量!'.    (福田)
报警告时,屏幕停止在当前界面,用AT SelectION-SCREEN.  与  START-OF-SelectION.  之间
如果在START-OF-SelectION.   下,则会退出当前界面
--------------------------------------------------------------
状态:gui status
注:1.应用于start-of-selection 事件中
    2.sy-ucomm来获取
例:set titlebar 'gui_title'.  "设置字  
at user-command.
    case sy-ucomm.
start-of-selection.
    wet pf-status 'gui_status'.
--------------------------------------------------------------
将他人的cr复制成本人cr:
方法:se09-->display-->复制
--------------------------------------------------------------
查找选择屏幕所用字段及搜索帮助:光标放在文本框内-->F1-->技术支持
--------------------------------------------------------------
内表操作
delete itab.  删除
delete itab where name = 'northsnow'.
delete itab index i.  (利用 sy-tabix)
loop at itab.
    delete itab.   相当于delete itab index i.  ,只不过是省略了 index i
endloop.    
或者
loop at itab.
    delete itab index sy-tabix.
endloop. 

T_ITAB-ZJHTS_OUT = T_ITAB-ZJHTS.    "修改
T_ITAB-yckts_OUT = T_ITAB-yckts. 
MODIFY t_itab.
CLEAR:t_itab.
或MODIFY t_output TRANSPORTING mblnr zeile.
--------------------------------------------------------------
屏幕选择
SelectION-SCREEN BEGIN OF BLOCK so WITH FRAME TITLE text-001.
SelectION-SCREEN END OF BLOCK so.

Select-OPTIONS: s_fzhan FOR zlyxs_mm391-fzhan NO-EXTENSION NO INTERVALS,
                s_dzhan FOR zlyxs_mm391-dzhan NO-EXTENSION NO INTERVALS.
SelectION-SCREEN END OF BLOCK so.

PARAMETERS: p_werks LIKE t001w-werks OBLIGATORY.   

Select   m4~werks = p_werks
Select   m4~versn IN s_versn
----------------------------------------------------------------
定义复杂内表
data:begin of  T_ZR5_MM0063 occurs 0.
        include STRUCTURE ZR5_SS04 .   " ZR5_SS04 是内表
data:xblnr like ekbe-xblnr.
data:ebelp like ekbe-ebelp.
data:end of t_zr5_mm0063.

data:begin of gt_itab occurs 0.
data:checkbox(1).
    include type zfis_itab.
data:xblnr like ekbe-xblnr.
data end of gt_itab.
---------------
data: begin of messtab occurs 0.
        include structure bdcmsgcoll.
data: end of messtab.
"例:data: begin of gt_mm07 occurs 0.    "引用自 ZR2_LYXS_M1_SDDG005
        include structure zlyxs_mm07.
data: sele.
---------------
DATA:T_OUTPUT LIKE TABLE OF T_ZR5_MM006 WITH HEADER LINE,
     WA_OUTPUT LIKE T_OUTPUT.
------------------
data:gt_itab1 type standerd table of ty_itab with header line.
-----------------
data gt_itab1 like table of gt_itab with header line.
-----------------
data gt_itab1 like zs_itab(结构) occurs 0 with header line.
     
     
     
     
------------------设置看gui字段中英文  设置--用户参数--字段名  字段文本
CONVERSION_EXIT_MATN1_OUTPUT   物料前补0函数
CONVERSION_EXIT_ALPHA_INPUT    补0函数
-----------------------------------------
取内表记录数量
1.LOOP AT it_itab.
g_lines1 = g_lines1 + 1.  "(不推荐)
ENDLOOP.
2.DESCRIBE TABLE lt_download3 LINES g_lines2."(推荐)
3.g_lines3 = lines( it_itab ). "(推荐) 使用函数来计算内部表行数
好像也可以 lines( itab[] )

select 数据表总数:
1. 通过系统表量sy-dbcnt
 Select * 
  FROM vbap 
  INTO TABLE @DATA(lt_vbap) 
 Where vbeln = '4500000001'.
WRITE sy-dbcnt.

2.通过Count(*)
Select count(*)
  FROM vbap 
  INTO @DATA(lv_cnt) 
 Where vbeln = '4500000001'.
WRITE:/ lv_cnt.

3.通过Describe table或line()----通过内表方式
DESCRIBE TABLE lt_vbap LINES DATA(lv_lines_cnt).
WRITE lv_lines_cnt.
lv_lines_cnt = LINES(lv_lines_cnt).
WRITE lv_lines_cnt.
-----------------------------------------
复制内表(也可以loop 第一个内表,append 到 第二个内表):
    方法一:t_zr5_mm006_tmp[] = t_zr5_mm006[].  
注:table A = table B .table A[] = table B[] .  对于包含表头的内表A和B。A = B 是工作区赋值 A[] = B[]是表内容赋值。
                                                对于不包含表头的内表A和B。 A=B=A[]=B[]。    
    方法二:
  DESCRIBE TABLE lt_download3 LINES l_line.
  IF l_line > 0.
    APPEND LINES OF lt_download3 FROM 1 TO l_line TO lt_download.
  ENDIF.
  -------------------------------------
  正反排序 SORT T_OUTPUT BY MBLNR MJAHR DESCENDING.
        方法三:(直接后面添加)(追加表内容)
  append lines of lt1 to lt.   表的批量添加数据  
------------------------------------------------------------
整体复制内表,目标内表原有内容被覆盖 
MOVE <itab1> TO <itab2>                            不带表头行的内表之间进行复制 
MOVE <itab1>[] TO <itab2>[].                      带表头行的内表之间进行复制 
MOVE <itab1> TO <itab2>[].                        不带表头行的内表复制到带表头行的内表 
MOVE-CORRESPONDING <itab1> TO <itab2> 复制内表1中与内表2具有相同结构的字段进行复制,同样适用于工作区
------------------------------------------------------------
for all entries in用法:
select table1 join table2  中
  if t_zr5_mm006[] is not initial.
    t_zr5_mm006_tmp[] = t_zr5_mm006[].
    sort t_zr5_mm006_tmp by mblnr mjahr.
    delete ADJACENT DUPLICATES FROM t_zr5_mm006_tmp comparing mblnr mjahr.
    select mblnr mjahr zeile bwart
          into table t_bwart from mseg for all entries in  t_zr5_mm006_tmp
                                 where MBLNR eq  t_zr5_mm006_tmp-MBLNR
                                   and MJAHR eq  t_zr5_mm006_tmp-MJAHR.
    sort t_bwart by mblnr mjahr bwart.
    loop at t_zr5_mm006.
       read TABLE  t_bwart  WITH  KEY  mblnr = t_zr5_mm006-mblnr MJAHR = t_zr5_mm006-MJAHR binary search(binary search前一定要排序,因为是二分查找).
       if sy-subrc eq 0.
         t_zr5_mm006-bwart = t_bwart-bwart.
       endif.
       modify t_zr5_mm006 TRANSPORTING bwart.
       CLEAR t_zr5_mm006.
    endloop.
  endif.
---------------------------------------- 
表的复制操作
ZTEST_BACK_MM31BAK程序  张世东
-------------------------------------
选择屏幕取描述
例:ZR2_LYXS_M1_SDDG006  执行计划综合维护(红军)
------------------------------------
diolog弹出框大小:  CALL SCREEN 0300 STARTING AT 10 10 ENDING AT 80   25.    "引用自 ZR2_LYXS_M1_SDDG006  
-----------------------------------------
屏幕程序搜索帮助    
例: ZR2_LYXS_M1_SDDG005
----------------------------------------
怎样具体比较程序:(此版本与上一版本区别)
1.打开上一个版本,拷出一份  2.设置->更多设置->拆分屏幕分析器->输入原程序   即可比较
---------------------------------------
po:生产订单   so:销售订单
---------------------------------------
红绿灯:表icon    light TYPE c,    light = '1'  红灯
--------------------------------------
alv输出格式:
DEFINE add_field.
  wa_field-fieldname      = &1.
  wa_field-reptext_ddic   = &2.
  wa_field-key            = &3.
  wa_field-edit           = &4.
  wa_field-checkbox       = &5.
  wa_field-decimals_out   = &6.
  wa_field-no_zero        = &7.
  wa_field-outputlen      = &8.
  append wa_field to it_field.
  clear wa_field.
END-OF-DEFINITION.
例:销售结算单打印:(红军) zr5sdrp049 

两种显示格式:list(严格,用来输出较严格的标准报表   grid功能多,提供按钮)
--------------------------------------
ALV 关键列:key固定列不动  
  LS_FCAT-KEY = 'X'.
  LS_FCAT-FIX_COLUMN = 'X'.
--------------------------------------
range 使用
IF R_WERKS[] IS INITIAL.
    R_WERKS-SIGN = 'I'.
    R_WERKS-OPTION = 'EQ'.
    R_WERKS-LOW = '-1'.
    APPEND R_WERKS.
    CLEAR R_WERKS.
ENDIF.
例2
RANGES: S_ZFLAG FOR ZR5MM010A-ZFLAG.
PERFORM GET_SRANGE USING 'X'.
FORM GET_SRANGE  USING  BZ.
  CLEAR: S_ZFLAG.
  S_ZFLAG-SIGN = 'I'.
  S_ZFLAG-OPTION = 'EQ'.
  S_ZFLAG-LOW = BZ.
  APPEND S_ZFLAG.
ENDFORM.  
--------------------------------------
前几位
L_BUKRS = L_BUKRS+0(2).
    IF L_BUKRS = '3B'.   "是山西公司
--------------------------------------
怎样删表内容:
se11,/h,选定一行,双击进debug,在上面code 改SHOW 为DELE,运行,删除即可

或 se16n进后,输入tcode &sap_edit 即进编辑状态,f8进入后,即可用工具栏操作删除
------------------------------------
read  使用 binary search: 前一定要排序,因为是二分查找
read 后一定要sy- ,养成习惯.

------------------------------------
append lines of i_itab1 to i_itab2.  表里批量录数据

select * from table into corresponding fields of table t_itab up to 1 rows where (只取一行)
  相当于select single * from table into t_itab (报错)
  
  insert into table value t_itab  往数据库里插数(工作区适用)
-------------------------------------
sap 备份
saplogon.ini  c:\windows
services     c:\windows\system32\etc\services
sapmsg.ini  c:\windows
-------------------------------------
去空格 condense l_msg no-gaps.
----------------------------------------- 
调函数组  call transformation ***  接口用
----------------------------------------- 
调用tcode: call transaction  'wg21' using bdcdata mode l_mode updata 'S' message into messtab.  '引用自 zmmjyhi027
-----------------------------------------
结果转成% 百分比,保留两位小数   例: 0.82-> 82.34%
先定义类型为 dmbtr,再 *100,再连接%,字符输出

大数据单位: 长金额
或 data l_t type wertv13. 大数据
data:wrbtr   定义成这样,保留12位
data:wrbtr8  两位小数金额
------------------------------------------
传值:
传出部分
free memory id 'aaa'.
export p_aufnr to memory id 'aaa'.
call transaction 'zfir0100'

export gt_itab[] to database indx(ed) id 'aaa'.  "只能用于内表和结构

如果在badi中使用可能报语法错,要加from 和 to,正确使用如下:
Export it_tab from it_tab to memory id 'ZTEST'.
Import it_tab to it_tab1 fromm emory id 'ZTEST'.
----------------------------------------------
Where语句动态实现
CONCATENATE ‘and tcode like’ ”’V%”’ INTO where_tab SEPARATED BY space.
Select COUNT( * ) INTO count_recFROM tstc Where (where_tab).

例2:
data:where_itab type table of edpline.
append 'carrid = ''tt'' to where_itab.
append 'or' to where_itab.
append 'carrid = ''aa'' to where_itab.

select * from spfli into lt_itab where (where_itab).
----------------------------------------------
模板:
*&---------------------------------------------------------------------*
*&程序名称:ZPM24R001
*&程序描述:月度资产报废清单
*&---------------------------------------------------------------------*
*&开发人员:潘劲
*&创建日期:2011.11.25
*&请求号:DEVK924477
*&---------------------------------------------------------------------*
include zpm24r0001_top."(全局定义)
include zpm24r0001_f0001."(子程序定义)
include zpm24r0001_i9000."此程序无屏幕数据(PAI 处理,9000 为屏幕编号)
include zpm24r0001_o9000."此程序无屏幕数据(PBO 处理,9000 为屏幕编号)
----------------------------------------------
continue 结束当前循环,进入下一循环
exit 结束整个循环(非循环时中止某一事件,但不会影响其它事件 如 start-of-selection initialization)
stop.(中止所有事件)
------------------------------------------------------------------------
屏幕:
pbo(process before output) 屏幕数据处理前   ,  输出前 , 如数据始初化,赋值    主要处理一些初始化的操作。
pai(process after input)   屏幕数据处理之后,输出后   相关控件操作及数据处理        主要是完成USER_CAOMMAND的操作
okcode like sy-ucomm.
例:data:okcode like sy-ucomm.
    start-of-selection.
      call screen 100.
    module status_0100 output.
      set pf-status '0100'.
    endmodule.                    "status_0100 OUTPUT
    module user_command_0100 input.
      case sy-ucomm.
        when 'EXEC'.
        when 'BACK'.
          leave to screen 0.
      endcase.
    endmodule.         
    module exit input.
      case sy-ucomm.
        when 'EXIT'.
          leave program.
      endcase.
    endmodule. 
注:按钮功能码要设置成exec    
逻辑流中
process before output.
 module status_0100.
*
process after input.
module exit at exit-command.
 module user_command_0100.    
 
返回或退出:
leave program:直接退出当前程序  (**)
leave to transaction tcod:退出当前screen 跳转到其他tcode
leave to screen scr:跳转到其它屏幕
leave screen:退出当前screen 返回上一个screen (**)
leave to list-processing
leave list-processing:执行pbo
leave:直接退出当前screen   (**)

chain/endchain.  "调用多个字段时,可接各字段结合起来
field dyn module mod on chain-request.   "只有在用户输入时才调用
field dyn module mod on input."只在给定字段具有非初始值时才调用
field 字段.  "数据传递

TABLECONTROL例:
process before output.
  module status_0100.
  module number.  "tablecontrol-line = lines(tab1). clear index.  取行数
  module get_info.   " panjin add   给初始值  抬头给初始值
  loop at gt_pankui  with control tablecontrol
                    cursor tablecontrol-current_line.
    module put_select_data." 传内表到屏幕表  move tab1 to tab2.
  endloop.
*
process after input.
  loop at gt_pankui .
    chain.
      field: zzddzyhp_pk-pkdats,
             zzddzyhp_pk-pkmenge.
      module check_input.  "验证
      module check on chain-request.  "屏幕字段值给内表  tab1-a1 = tab2-a1.  modify tab1 from tab2 index index transporting a1.
    endchain.
  endloop.
  module user_command_0100."case co_code when 'BACK' or 'CANCEL' or 'EXIT'.  LEAVE SCREEN. 
  
子屏幕:(屏幕中画,可放选择框等)
     程序中写
selection-screen begin of screen 0101 as subscreen.
selection-screen end of screen 0101.
    逻辑流pbo中写
call subscreen:sub1 including sy-repid '0100'."sub1 画的子屏幕名    
------------------------------------------------------------------------
创建屏幕
子屏幕有两种:1.include screen 可通过reprot直接调用  2 subscreen 要用screen painter 创建引用
注:当从一屏幕中间调入另一屏幕,要用call
call screen 123 starting at 10 10  ending at 80 10.
------------------------------------------------------------------------
perform使用,form使用,form例子
perform aaa change bbb     in program ztest [IF FOUND].  调用另一程序ztest 中 aaa  过程.
例:  perform frm_change_pr(SAPLZFG_MM_SK0009) if FOUND  
                        TABLES  gt_pr
                        USING '-'
                        CHANGING g_flag.

例:perform getcost tables t1 t2 using '1' changing cost.
调用 form getcost tables t1 like itab1[] 
                         t2 like itab2[] 
                using fil STRUCTURE wa_data
                changing cost.  (有表头要用[])

定义:
FORM GET_CHARG_TXT  USING  wa type  type_detail.
form tables itab1 传表    form tables  x structure t_str.
FORM FRM_BSCHL  TABLES itab STRUCTURE bsid.
form using 向子程序传参数,该参数在子程序中不改变
form changing   子程序中改变值返回给主程序
------------------------------------------------------------------------
call transaction tcode.
call transaction xxx and skip first screen.
------------------------------------------------------------------------
三种跳转界面:
1.事务界面跳转
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
  EXPORTING
    TCODE                   = 'SE16N'
  EXCEPTIONS
    CALL_TRANSACTION_DENIED = 1
    TCODE_INVALID           = 2
    OTHERS                  = 3.
    

2."功能跳转
    DATA:GT_RFC_SPAGPA TYPE TABLE OF RFC_SPAGPA,
     GW_RFC_SPAGPA LIKE LINE OF GT_RFC_SPAGPA.
GW_RFC_SPAGPA-PARID = 'AUN'.    ”控件ID   在界面上F1查找
GW_RFC_SPAGPA-PARVAL = '10000140'.
APPEND GW_RFC_SPAGPA TO GT_RFC_SPAGPA.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
  EXPORTING
    TCODE                   = 'VA03'
    SKIP_SCREEN             = 'X' "SKIP FIRST SCREEN
  TABLES
    SPAGPA_TAB              = GT_RFC_SPAGPA
  EXCEPTIONS
    CALL_TRANSACTION_DENIED = 1
    TCODE_INVALID           = 2
    OTHERS                  = 3.   
        
3.SUBMIT 点击屏幕跳转
DATA: s_table  TYPE TABLE OF rsparams WITH HEADER LINE.
        s_table-selname = 'MATNR'.
        s_table-sign = 'I' .
        s_table-option = 'EQ' .
        s_table-low = ls_itab-matnr.
        APPEND s_table TO s_table[].
 SUBMIT RM07DOCS  WITH SelectION-TABLE s_table AND RETURN.
   
参数:submit ztest.
    via selection-screen   "显示所调程序的初始屏幕
    using selection-screen 1000    "调子屏幕
    and return.    "调指定程序执行完后可返回上一屏幕
    

PARAMETERS形式:
zpanjin1:submit Zpanjin2 WITH P_Z3SVNO = '0001' AND RETURN.
zpanjin2:
        SelectION-SCREEN: BEGIN OF BLOCK A WITH FRAME.
        PARAMETERS: P_Z3SVNO LIKE t001-bukrs.
        SelectION-SCREEN: END OF BLOCK A.

or
PARAMETERS: P_Z3SVNO LIKE t001-bukrs MEMORY ID buk.    

Select-OPTIONS 形式:(科)
    SUBMIT  zmrorhq11201 WITH matnr    IN s_matnr
                         WITH werks    IN s_werks
                         WITH lgort    IN s_lgort
                         WITH charg    IN s_charg
                         WITH s_dispo  IN s_dispo
                         WITH s_bwtar  IN s_bwtar
                         WITH ekgrup   IN s_ekgrp
                         WITH matkla   IN s_matkl
                         WITH xmchb    EQ 'X'
                         WITH nozero   EQ 'X'
                         WITH p_11200  EQ 'X'
                         WITH negativ EQ ''
                         AND RETURN.
------------------------------------------------------------------------
DEFINE AA. "定义宏(AA 宏名)
add 1 to &1.   "通过&n传参数  n为整数
    write /&2.   
END-OF-DEFINITION.    
data str(10) type c value 'hello sap'.
AA NUMBER str. "调用宏  输出2,hello sap

例2:define fieldcatset. "定义
fieldcat-ref_tabname1 = &1.
fieldcat-ref_tabname2 = &2.
end-of-definition.
fieldcatset 'aaa'  'bbb'.  "使用
------------------------------------------------------------------------
native sql使用
select a1,a2 into :t_itab-a1, t_itab-a2 from a where col = :str1
insert into table(col1,col2) values('aaa',9)
1.字段要以逗号分开
2.查询条件要加冒号
3.sql语句结尾不需要句号
------------------------------------------------------------------------
bdb:shdb
模式:A:显示所有过程及数据 N:后台更新 S:异同步更新模式
注:在bdc所转换的abap程序中,最好用字符型来定义内表字段,不要用like去参照,容易报错
    不同用户所定义的日期风格有差异,使用 write data2 to data1来实现转换.
------------------------------------------------------------------------
类的使用:
    class callobj definition  "定义类
        public session.
            data count type i.
        methods:showdata3.   "定义方法
    endclass.
    class callobj implementation.  "定义中有方法,必须实现   类的实现
        method showdata3.
            write 'hello sap'.
        endmethod.
    endclass.
    --使用----
    data obj type ref to callobj."type ref to 引用某一具体类以声明新对象
    create object obj. "创建类实例化对象
    call method:obj->showdata1."调用类方法
    methname = "123". obj->(methname).  "通过变量调用类方法
------------------------------------------------------------------------
优化:
1.两个内表添加使用批量增加代替逐行 
不推荐 
Loop at int_fligh1. 
Append int_fligh1 to int_fligh2. 
Endloop. 
推荐 
Append lines of int_fligh1 to int_fligh2. 
------------------------------------------------------------------------
include <icon>.
include <symbol>.
include <list>.   "包含了前面两个
------------------------------------------------------------------------
alv显示:
lt_fieldcat-ref_tabname  = 'ZFIT_XYZCHECK'.   "alv显示是否带搜索帮助    后面是表名
gs_fc-cfieldname = 'WAERS'.   "waers 字段名   转换货币:字段属性中  例:日元与人民币转换 jpy转cny
------------------------------------------------------------------------    
透明表:
是指对应实实在在oracle数据库中的一个表.
------------------------------------------------------------------------    
取文本函数:
READ_TEXT
在文本框中,双击进去(进文本显示),转到,表头,即“文本名”“语言”“text id”“文本对象”
------------------------------------------------------------------------    
时间元素UZEIT
------------------------------------------------------------------------    
财务替代tcode:ggb0  例:miro 里 zfi01消息类,财务-〉行项目-〉zyz02-〉步骤004-〉信息
------------------------------------------------------------------------
选择屏幕变灰:文本框不可编辑   "引用程序ZMM_RP0022
INITIALIZATION. 
*-----采购组织及工厂输入条件为禁止修改,变灰------
  LOOP AT SCREEN.
    CHECK screen-name = 'S_EKORG' or screen-name = 'S_WERKS'.
    screen-input = '0'.
    MODIFY SCREEN.
  ENDLOOP.
------------------------------------------------------------------------
Query
1.用户组(SQ03)  存放用户组信息
2.信息集(SQ02)  存放数据源信息
3.查询(SQ01)  存放查询的格式信息
------------------------------------------------------------------------
编辑abap时掉线,重新进去后显示“当前用户正在编辑
解决:SM12 把运行项扔进垃圾桶即可
------------------------------------------------------------------------
复制标准状态栏
程序名:SAPLKKBL
状态名:STANDARD_FULLSCREEN

同一程序复制状态栏时,(1)选下面的 (2)三个复选框都选上
------------------------------------------------------------------------
计算ABAP程序的运行时间
DATA: T1 TYPE I,T2 TYPE I,T3  TYPE I.
GET RUN TIME FILED T1.
.....
GET RUNTIME FIELD T2.
T3 = T2 - T1.      " TOTAL TIME 
------------------------------------------------------------------------
取前几条
select  * from mseg into corrresponding fields of table gt_itab up to 2 rows.
------------------------------------------------------------------------
st05使用:
REC:看性能
------------------------------------------------------------------------
指针使用:
Data: var_a TYPE I VALUE 4.
FIELD-SYMBOLS: <fs> TYPE i.   "重要: 定义的指针名,必须加"<>"
ASSIGN var_a TO <fs>.
<fs> = 77.
------------------------------------------------------------------------
move 与 write 区别: 
WRITE  ... TO 把源的格式 附值到目标    MOVE ... TO 直接把源的值附到目标。
例:write sy-datum to gv_char1.  " 2009.06.26
   move sy-datum to gv_char2.   " 20090626
    定义:'22345.89'
    write:/ 'write to', gv_char1.  " 22.345,89
     move dec1 to gv_char2.        "22345.89
------------------------------------------------------------------------
屏幕属性
LOOP AT SCREEN.
    IF SCREEN-GROUP1 = HIDID.
        SCREEN-ACTIVE = '0'.
        SCREEN-INVISIBLE = '1'.
    MODIFY SCREEN.
    ENDIF.
ENDLOOP.
screen-input=0表示禁止输入
screen-active=0表示隐藏。
screen-invisible = 1 显示为星号

选择屏幕:文本框不可编辑   "引用程序ZMM_RP0022
INITIALIZATION. 
*-----采购组织及工厂输入条件为禁止修改------
  LOOP AT SCREEN.
    CHECK screen-name = 'S_EKORG' or screen-name = 'S_WERKS'.
    screen-input = '0'.
    MODIFY SCREEN.
  ENDLOOP.
------------------------------------------------------------------------
等待两秒:延时
wait up to 2 seconds.
------------------------------------------------------------------------
大小写转换 TRANSLATE p_TXT04 TO UPPER CASE.
------------------------------------------------------------------------
负号提前 
方法一: CLOI_PUT_SIGN_IN_FRONT  (不能用于数字型,alv中要定义字符型)
方法二:or alv中 可用于数字,金额型
 clear ls_fcat.
  ls_fcat-fieldname = 'DEC'.
  ls_fcat-inttype   = 'P'.
  ls_fcat-intlen    = 10.
  ls_fcat-col_pos   = l_lin.
  ls_fcat-seltext_s = ls_fcat-fieldname.
  ls_fcat-seltext_m = ls_fcat-fieldname.
  ls_fcat-seltext_l = ls_fcat-fieldname.
  ls_fcat-edit_mask = '==Z001'. ",好用,zsign可随便写,不是字段名
  append ls_fcat to ct_fcat.
 
再se37 定义一个函数 即可,
函数名:CONVERSION_EXIT_Z001_OUTPUT  "注:中间z001 要跟 edit_mask中一致
输入参数:input type any,
输出参数:output type any,
函数源码如下:  
  output = input.
  CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
    CHANGING
      value = output.

------------------------------------------------------------------------
smartforms:新加字段 &header-zamount_fp_sum3(CZR15)&    "CZR15一定要大写  表长度

smartforms:汇总打印  例:ZSD_SF001
(1)表主要区域,创建程序行 t1 = t1 + 字段(t1,传入,传出)
(2)最下行,脚码,创建程序行,输出t1(t1,传入,传出)
------------------------------------------------------------------------
i = i + : i1, i2, i3.      "好几个变量累加可以这样做
------------------------------------------------------------------------
数学函数
绝对值:abs( t )   "里面要有空格
------------------------------------------------------------------------
alv 回车,缩小100倍解决办法: 20191130 测试正确
1.对于货币字段, wa_fieldcat-datatype      = 'CURR' .   
2.对于数量字段  wa_fieldcat-datatype      = 'QUAN' .   " 指定数据类型   wa_fieldcat-inttype         = 'C' .
------------------------------------------------------------------------
alv显示,数字字段扩大了1000倍,解决方法
  if ls_fcat-fieldname eq 'MENGE2'.
    ls_fcat-DECIMALS = '3'.
  ENDIF.
------------------------------------------------------------------------
数据库是否空值判断:
where f is(not) null   来判断数据库字段中是否为空值 
------------------------------------------------------------------------
同步异步区别:
commit work and wait.(同步)   两人走,一前一后走完
commit work.(异步)            两人走,没有先后,都走完
------------------------------------------------------------------------
raise:异常报错
例:if sy-subrc ne 0.
    raise ****.
   endif.
------------------------------------------------------------------------
查人名表:名字:用户名:user_addr 视图
   Select SINGLE NAME_TEXTC INTO gt_itab-name
        FROM USER_ADDR Where BNAME = gt_itab-ERNAM.
        
改人名:ADRP表        
获取地址编号,人员号表:usr21
移动电话表: adr2
电话:adcp  
更改人(创建人),更改时间(创建时间)表:USRSTAMP

        
查供应商邮箱,su01中人员邮箱:(邮箱adr6表)
Select SINGLE SMTP_ADDR INTO G_MAILTO
              FROM LFA1 INNER JOIN ADR6
              ON LFA1~ADRNR = ADR6~ADDRNUMBER
              Where LFA1~LIFNR EQ PV_LIST-LIFNR.  
                                 
------------------------------------------------------------------------
备份配制文件:
saplogon.ini C:\Documents and Settings\<用户名>\Application Data\SAP\Common
Windows7系统 C:\Users\<用户名>\AppData\Roaming\SAP\Common
-pwenc=”PW_1AE07A5C89A66E”  ,然后就可以重新设置密码了
------------------------------------------------------------------------
快捷键
F5:创建   F6:修改   F7:显示 <–以上三个在SE38、SE24、SE11等ABAP工作台用到的比较多
ctrl + /  光标定位到命令输入行
/n  退出当前,跳到指定屏幕  /o 新打开
/i  关闭当前会话   /nex 关闭当前打开所有会话
/bend  关闭bdc
------------------------------------------------------------------------
变式使用:shd0
1.建事物变式(有内容:默认值)
2.建标准变式,激活
3.测试,看状态,有变式一项
4.传输 
如果想不同用户默认变式不同,要建用户组
------------------------------------------------------------------------
批导:
1.shdb
2.lsmw
3.catt
4.bapi 程序中函数 例:发票校验
------------------------------------------------------------------------
alv:下拉搜索帮助
ls_fcat-ref_field = 'Z_REPORT'.
ls_fcat-ref_table = 'ZPMT_YIQI'. 
------------------------------------------------------------------------
SM35:
shdb里用Session的,是先把所有记录保存到一个Session中,然后再通过SM35执行
------------------------------------------------------------------------
怎样传表内容:
se09中建自定义cr,程序名:r3tr 对象类型:tabu 对象名称:表,回车表键头:300*,代表传输300里所有数据
最后stms or scc1 传输
------------------------------------------------------------------------
例子:在SAP的这个开发类中SABAPDEMOS,存放了N多的demo程序,有空的时候,可以看看。
------------------------------------------------------------------------
锁定生产机函数:
SCCR_LOCK_CLIENT 参数是client号码。  (用ddic可以登录)
还可以通过事物SU10批量锁定用户登陆client
------------------------------------------------------------------------
关于传输:SCC1,是在同一个系统上的不同clint间的数据传输
         SCC3,clint间的复信息制
         SCC4,显示和修改所有clint的配置等
跨系统之间的传输,比如将开发机上的数据传输到生产机,则要用事物STMS
------------------------------------------------------------------------
关于开帐期
mmpv:
输入公司,输入日期20141001即可(不需输入期间,会计年度),开10月帐.
帐期只能一个个开,即4月,5月,不能直接开到10月
1,开物料帐,只输入公司,日期为本月第一天
2.一般设置自动运行,日期为变量
3.一般只开本月帐和上月帐


MMRV查询当前的过账期间
MMPV开下一期间的物料帐
ob52开财务帐
okp1开co帐,如果打上勾就不能计账
------------------------------------------------------------------------
se18中使用结构体
data : wa_likp type line of SHP_LIKP_T.
------------------------------------------------------------------------
alv下拉帮助:
 ls_fcat-REF_TABLE  = 'ANLA'.
 ls_fcat-REF_FIELD = 'ANLN1'.  "不能有 layout-stylefname = 'STYLE'.
------------------------------------------------------------------------
取状态函数:
ABAP 获取订单状态的两个函数 STATUS_TEXT_EDIT 和 STATUS_READ
------------------------------------------------------------------------
取汇率:(例:资料中有)
      CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
      再CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
*"对于像JPY TWD 等 比人民币小的  不然出来的金额会扩大(一般是扩大100倍)
or READ_EXCHANGE_RATE
------------------------------------------------------------------------
CHECK, EXIT, RETURN, LEAVE PROGRAM 区别
CHECK.(SAP官方推荐只在循环中使用)
1)退出当前一次循环操作,程序会继续执行下一次循环操作,其作用类似于Continue  
2)如果CHECK出现在循环以外,则发生作用时,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。

EXIT.
1) EXIT如果出现在循环中,退出的是整个循环操作,.程序会从循环结束处开始继续执行。
2)EXIT如果出现在循环之外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,其作用与RETURN类似。

RETURN.
RETURN用来退出当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环。
虽然ABAP中EXIT 和RETURN都可以用来实现退出当前执行的语句块(PROCESSING BLOCK),但SAP的帮助文件建议只在循环中使用EXIT ,其他情况下要退出当前执行进程,使用RETURN 。

LEAVE PROGRAM.
LEAVE PROGRAM.  直接退出主程序。

LEAVE TO SCREEN 0.  返回
------------------------------------------------------------------------
debug 巧设断点:
方法一: if sy-uname =  'userid'. break-point.endif.
方法二:将原来的 break-point 替换成 call   function 'C160_BREAK_POINT'.  需要调试时,只要将个人参数的值改一下就行了。
        只要将参数 ESP 的值设为 X 程序会断点在  function C160_BREAK_POINT  里的 break-point 语句上,我们只需要职 f6 出函数,就到了断点设置的地方了.
------------------------------------------------------------------------
查某个tcode,某个用户操作日志stad
------------------------------------------------------------------------
ME13   价格信息记录查看
------------------------------------------------------------------------
选择屏幕:允许小写
Select-OPTIONS s_matnr for mara-matnr LOWER CASE.
------------------------------------------------------------------------
在ALV中如果某列允许输入,并且允许输入小写字母,只需设置SLIS_T_FIELDCAT_ALV-lowercase = 'X'。
------------------------------------------------------------------------
增强里
       data:lt_xmseg type table of mseg.
       lt_return type table of bapiret2.
------------------------------------------------------------------------
动态设置TITLEBAR的文字:
方法一、双击TITLEBAR,进入TITLEBAR的编辑框,在这里写入&1,相当于宏定义的宏的参数。
方法二、使用SET TITLEBAR 'TITLBAR' WITH P_TITLE. 来指定变量。这样TITLEBAR输出的就是P_TITLE这个变量的值。 
----------------------------------------------------------------------
alv长度控制:
 ls_fcat-OUTPUTLEN = '10'.   "显示10位,实际录入不受10位影响
要去layout-colwidth_optimize = 'X'.
要去layout-CWIDTH_OPT = 'X'.
ls_fcat-seltext  = p_0585.
------------------------------------------------------------------------
增加库存:
mmbe:查库存
mb1c,561移动类型(期初导入)
------------------------------------------------------------------------
alv title: 调用alv 时i_grid_title        =  title
------------------------------------------------------------------------
alv扩大100倍问题:
1、对于货币字段,要在其设置字段和列名的属性中再添加一个“指定数据类型”的属性   ls_fcat-datatype = "CURR" .且要 ls_fcat-inttype = "C".
2、对于数量字段,也要添加一个“指定数据类型”的属性  ls_fcat-datatype = "QUAN". 且要 ls_fcat-inttype = "C".
------------------------------------------------------------------------
加上前导零、去除前导零
*加上p_in的前导零CONVERSION_EXIT_ALPHA_INPUT
*去除p_out的前导零CONVERSION_EXIT_ALPHA_OUTPUT

or:
*删除前置零  lv_order = |{ lv_order ALPHA = OUT }|.

*增加前置零  lv_order = |{ lv_order ALPHA = IN }|.

去后面零 例12.1230->12.123  函数:FTR_CORR_SWIFT_Delete_ENDZERO
------------------------------------------------------------------------
报错信息
MESSAGE '部分录入失败!' TYPE 'S' DISPLAY LIKE 'E'.
MESSAGE '全部录入成功!' TYPE 'S' DISPLAY LIKE 'I'.
------------------------------------------------------------------------
ALV 丢失最后一位、筛选器长度不够问题解决办法,alv 文本显示不全.
IT_FIELDCAT_LVC内表中传入字段的参考表REF_TABLE和参考字段REF_FIELD.

in 伊品:alv 采购销售发票时,
frm_add_fieldcat 'VBELN_VF' '开票凭证' '10' 'VBELN' 'VBRP' '' .   "用了REF_FIELD,REF_TABLE
一样筛选不出。
方法一: frm_add_fieldcat 'VBELN_VF' '开票凭证' '10' '' '' '' .
方法二: 按*90082010 这样查。
两个方法都可以。

原因:一般号码段都是10位,我现在这发票都10位不存在这个问题。
8位的发票前面实际有两个0,所以方法二:补 * 可筛选。
方法一,即是把它看成字符串筛选,这种也可以查出。
------------------------------------------------------------------------
单步debug job:sm37选中,输入JDBG,回车,几次f7进入
方法二:SM50 菜单中程序--调试
方法三:SRDEBUG 激活调试,执行调用
------------------------------------------------------------------------
快捷:/n  /nend  关所有会话  /s000 开始菜单  /nex 关所有会话  /o  /i  关当前会话  /i1 /i2 关指定会话
------------------------------------------------------------------------
操作记录:
表CDHDR(抬头表),CDPOS(行项表)(聚集表)   tcode/SCDO  维护对象
CHANGE_IND中的U:更改或更新,I:插入。U:更新
OBJECTCLAS为对象类别:如物料为MATERIAL     生产订单对象:ORDER

可以通过表TCDOB - Objects for change document creation 找到对应的表的对象值;即mara->MATERIAL
无权限可用报表RSSCD1TS 查相关记录,类似于se11两个表
------------------------------------------------------------------------
alv日期 alv 时间转换  t2(10)
WRITE SY-DATUM TO t2 USING EDIT MASK '____-__-__'.
WRITE: /10 g,                                 "在10个空格后输出变量g
      /(8) time using edit mask ‘__:__:__’. "输出的变量time保持8位的长度.
------------------------------------------------------------------------
CONVERSION_EXIT_ALPHA_INPUT 料号前面补0 
CONVERSION_EXIT_ALPHA_OUTPUT 料号前面减0 
CONVERSION_EXIT_MATN1_INPUT 料号前面补0 
CONVERSION_EXIT_MATN1_OUTPUT 料号前面减0 
CLOI_PUT_SIGN_IN_FRONT   把SAP里的负号放到前面来的函数
------------------------------------------------------------------------
message '该事物码不!' TYPE 'W' .  "黄色信息,不让通过
------------------------------------------------------------------------
*    SHIFT IT_TAB-EBELP LEFT DELETING LEADING '0'.  去前导0
Shift string left leading '0'. 
or CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'     "Delete 0.
   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'     "ADD 0.
------------------------------------------------------------------------
长度:WERTV13(25位)  WERTV8
------------------------------------------------------------------------
对某个T-CODE 没有权限的时候怎么办?
用函数: C160_TRANSACTION_CALL  
方法2:
se16-tstc,输入那个t-code,察看相应的程序名,然后使用SA38执行这个程序(一般都有SA38的权限)
------------------------------------------------------------------------
选择屏幕加空行:
SelectION-SCREEN SKIP [<n>].
该语句产生<n>个空行,其中 n>的值可以是 1 到9。要产生单个空行,可以省略 <n>。
------------------------------------------------------------------------
单位:输入英文单位,会提示单位在中文中没有创建问题:
用这两个函数,解决了在调用BDC的时候出现的单位在中文中没有定义的问题
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = “输入的英文单位
IMPORTING
output = “输出的中文单位
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = “输入的中文单位
IMPORTING
output = “输出的英文单位
------------------------------------------------------------------------
程序名在哪个表?tstc   所有程序和事物代码:TSTC表
开发类表 tadir-devclass.(条件tadir-OBJECT=PROG)
开发人表 tadir-author
表结构表:dd03l
------------------------------------------------------------------------
定义icon 颜色 红灯
ICON LIKE ICON-ID,
ICON_GREEN_LIGHT or '@08@' "  Green light; positive(一个灯)
ICON_YELLOW_LIGHT or '@09@' "  Yellow light; neutral(一个灯)
ICON_RED_LIGHT or '@0A@' "  Red light; negative    经测试,正确(一个灯)

ICON_LED_GREEN:正方形绿(三个灯)
ICON_LED_YELLOW:三角形黄
ICON_LED_RED:红圆形 

  perform fill_field using 'ICON'  '消息标识' '' ''.
  perform fill_field using 'MSG'  '信息' '' ''.
  也可
'@5C@'  "一个红灯   '@5B@'一个绿灯   
------------------------------------------------------------------------
接口上传下传工具栏图标: 过帐图标
&TRANS
ICON_IMPORT_TRANSPORT_REQUEST
信息传输
copy ZSAP_SRM_001 100

批导工具栏:
copy ZFT_R_PP_019  SET_PF_STATUS
&UPLOAD
ICON_EXECUTE_OBJECT
导入

ICON_Create   创建图标
------------------------------------------------------------------------
查看所有icon:
se38:SHOWICON  显示列表之后,双击任何一个图标可以显示出每一个图标的详细信息。
------------------------------------------------------------------------
正在处理中:
start-of-selection.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 100
      text       = '正在进行数据处理,请稍等...'.
------------------------------------------------------------------------
改开发类通用方法:
se03->object directory文件夹->修改对象目录条目,输入程序名和$tmp,即可更改,还适用于修改函数等
------------------------------------------------------------------------
变式表:v_ltdx    LTDX-REPORT  LTDX-VARIANT 
------------------------------------------------------------------------
踢人:sm04   or sm50
------------------------------------------------------------------------
电话号,传真  表:adrs,adr3
------------------------------------------------------------------------
改表方法,改表内容方法:
1.sm30  2.se16n, &sap_edit  
3.se16n 里调(设断点,有个地方判断了)
4.debug 方法,se16n,GD-EDIT,GD-SAPEDIT  
5.函数se16n_interface,I_TAB:表名称, I_EDIT = 'X', I_SAPEDIT:X ,运行,输入表名,即可编辑表
6.zse16n   
------------------------------------------------------------------------
关声音:
选项->交互设计->声音设置->激活音频信号(关)
------------------------------------------------------------------------
icon(30)
gt_itab-icon = icon_led_red.    !=   gt_itab-ICON = '@0A@'.
gt_itab-icon = icon_led_green.
------------------------------------------------------------------------
报异常  message报错message信息
DATA:BEGIN OF it_result OCCURS 0.
        INCLUDE STRUCTURE bdcmsgcoll.
DATA: text(200) TYPE C.
DATA END OF it_result.

(1)消息内表
第一种
CALL TRANSACTION  'XK01' USING bdc_tab MODE 'N' MESSAGES INTO it_result.
 READ TABLE it_result WITH  KEY MSGTYP = 'E' .
    IF sy-subrc = 0.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_result-MSGID
          lang      = '1'
          no        = it_result-MSGNR
          v1        = it_result-MSGV1
          v2        = it_result-MSGV2
          v3        = it_result-MSGV3
          v4        = it_result-MSGV4
        IMPORTING
          msg       = msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.
      itab-msg = msg.
    endif.
or 第二种
      READ TABLE return WITH  KEY TYPE = 'E' .
        IF sy-subrc = 0.
          CALL FUNCTION 'FORMAT_MESSAGE'
            EXPORTING
              id        = return-ID
              lang      = '1'
              no        = return-NUMBER
              v1        = return-MESSAGE_V1
              v2        = return-MESSAGE_V2
              v3        = return-MESSAGE_V3
              v4        = return-MESSAGE_V4
            IMPORTING
              msg       = gt_itab-msg
            EXCEPTIONS
              not_found = 1
              OTHERS    = 2.
          gt_itab-icon = ICON_RED_LIGHT.
        endif.    
        
or 第三种  return:BAPIRETURN 结构
 READ TABLE ZRETURN WITH KEY TYPE = 'E'.
  IF SY-SUBRC EQ 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
              .

    LOOP AT ZRETURN Where TYPE = 'E'.
      CONCATENATE MESS ZRETURN-MESSAGE INTO MESS SEPARATED BY ';'.
    ENDLOOP.
    CONCATENATE '错误消息:' MESS INTO MESS.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
*  IMPORTING
*    RETURN        =
    .
    CONCATENATE 'SUCCESS:' ZEXPPURCHASEORDER INTO MESS.
  ENDIF.   


(2)消息工作区:
方法一:
 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
     INTO DATA(mtext)
     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4  .

方法二:
     调用函数 MESSAGE_TEXT_BUILD ,输入msgid,msgnr,msgnr1,msgnr2,msgnr3,msgnr4,   输出一个字符串
     
------------------------------------------------------------------------
字符替换写法   
    REPLACE FIRST OCCURRENCE OF '&'  IN IT_MESSAGE-TEXT  WITH MESSAGE_TABLE-MSGV1.
    REPLACE FIRST OCCURRENCE OF '&'  IN IT_MESSAGE-TEXT  WITH MESSAGE_TABLE-MSGV2.
    REPLACE FIRST OCCURRENCE OF '&'  IN IT_MESSAGE-TEXT  WITH MESSAGE_TABLE-MSGV3.
    REPLACE FIRST OCCURRENCE OF '&'  IN IT_MESSAGE-TEXT  WITH MESSAGE_TABLE-MSGV4.
    
    REPLACE ALL OCCURRENCES OF '*' IN lv_hkont_s  WITH ''.
REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。    
------------------------------------------------------------------------
导入程序 将最后的消息放在一起
      READ TABLE return WITH KEY type = 'E'.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            msgid               = return-ID
            msgnr               = return-NUMBER
            msgv1               = return-MESSAGE_V1
            msgv2               = return-MESSAGE_V2
            msgv3               = return-MESSAGE_V3
            msgv4               = return-MESSAGE_V4
          IMPORTING
            message_text_output = msg.
       endif.      
     
bapi程序:
  LOOP AT lt_return Where TYPE = 'E'.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = lt_return-ID
        msgnr               = lt_return-NUMBER
        msgv1               = lt_return-MESSAGE_V1
        msgv2               = lt_return-MESSAGE_V2
        msgv3               = lt_return-MESSAGE_V3
        msgv4               = lt_return-MESSAGE_V4
      IMPORTING
        message_text_output = l_msg.
    CONCATENATE ev_msg l_msg INTO ev_msg.
    CLEAR:l_msg.
  ENDLOOP.
  IF sy-subrc eq 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
  else.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
  ENDIF.     
------------------------------------------------------------------------
bdc录屏注意事项:
1.尽量用鼠标去点击按钮,而不要只是敲“Enter”。 
2.光标的位置一般也可以不指定,也就是perform bdc_field using ‘BDC_CURSOR’ ‘XXXX-XXXX’通常可以不用写(一般来说)
------------------------------------------------------------------------
保留空格
CONCATENATE  **************  RESPECTING BLANKS
------------------------------------------------------------------------
彻底删除数据
obr2:可删客户,供应商主数据等
------------------------------------------------------------------------
PERFORM使用,perform定义
FORM WRITE_TO_SQL  TABLES  IT_RESULT  STRUCTURE gt_itab  USING g_datum g_uzeit CHANGING RETURN MESS TYPE CHAR120.  "例zlmm29

FORM subr [TABLES  table_parameters] 
          [USING parameters] 
          [CHANGING parameters] 
          [RAISING exc1|RESUMABLE(exc1) exc2|RESUMABLE(exc2) ...]. 
其中表参数:          
... t1 [{TYPE itab_type}|{LIKE itab}|{STRUCTURE struc}] 
    t2 [{TYPE itab_type}|{LIKE itab}|{STRUCTURE struc}] 
    
例:FORM frm_modify_ZMMTSK90030 TABLES pt_ekpo STRUCTURE  ZMMSSK00120.  "ZMMSSK00120 实体表  202012于科  
例:FORM frm_print TABLES pt_tab TYPE STANDARD TABLE    "pt_tab  内表 实体表  202012于科ZEMCHQ00020FORM 程序
                       USING pv_start TYPE string.  
------------------------------------------------------------------------
内表,结构,表头
data: itab1a like   itab.       "定义一个结构
data: itab1b like itab occurs 0." 定义一个没有表头的内表
data: itab1c like itab occurs 0 WITH HEADER LINE." 定义一个有表头的内表

data: itab2b like table of itab .  "定义一个没有表头的内表
****data: itab2b like table of itab occurs 0.
data: itab2c like table of itab with HEADER LINE ."定义一个有表头的

data: itab4a like line of itab.  "定义一个结构
data: itab4b like LINE OF itab occurs 0.  "定义一个没有表头的内表
data: itab4c like line of itab occurs 0 WITH HEADER LINE. "定义一个有表头的
------------------------------------------------------------------------
like line of,定义某个work area作为后面跟着的内表的‘一行’
例:  DATA  lt_eina_o TYPE MMPR_EINA.  "内表
     DATA  wa_EINA_o LIKE LINE OF lt_eina_o.   "工作区
like line of 接内表:即定义一个工作区
like table of ,即定义一个内表
------------------------------------------------------------------------
Select SINGLE * FROM  VBKD Where VBELN = LT_RESULT-VBELN AND POSNR = LT_RESULT-POSNR.
      IF SY-SUBRC NE 0.
        LT_RESULT-ebeln = VBKD-BSTKD. 
      ENDIF.
      
------------------------------------------------------------------------
icon:tcode icon  看代码用se11:icon
新加:ICON_Insert_ROW
删除ICON_Delete_ROW
保存:ICON_SYSTEM_SAVE
打印图标:ICON_PRINT
小车图标:ICON_IMPORT_TRANSPORT_REQUEST
取消图标:ICON_SYSTEM_UNDO
确定图标:ICON_OKAY
红旗:ICON_COMPLETE
发料红旗:ICON_RELEASE
传输:ICON_TRANSPORT
全选:ICON_Select_ALL
取消全选:ICON_DESelect_ALL
选择块:ICON_Select_BLOCK
三个灯: ICON_GREEN_LIGHT  ICON_YELLOW_LIGHT  ICON_RED_LIGHT
一个灯: ICON_LED_GREEN    ICON_LED_RED       ICON_LED_YELLOW
------------------------------------------------------------------------
本人公用函数文件ZFUNCTION
------------------------------------------------------------------------
包含:RV13A-VAKEY2 CS '2401'  
------------------------------------------------------------------------
*********************************************************************
*-------- Clear & Refresh Internal Table. -------------------------
*********************************************************************
1. with headerline.
CLEAR itab.        : Clear the headerline of the Internal Table only.
CLEAR itab[].        : Clear the contents of the Internal Table except the headerline.
REFRESH itab.        : Same as CLEAR itab[].
REFRESH itab[].       : Same as CLEAR itab[].
2. without headerline. ( all four commands have same functionality )
CLEAR itab.        : Clear all contents of the Internal Table.
CLEAR itab[].        : Same as CLEAR itab.
REFRESH itab.        : Same as CLEAR itab.
REFRESH itab[].        : Same as CLEAR itab.
------------------------------------------------------------------------
alv导出生产订单少了一位: alv中取消前导0即可GS_FIELDCAT-NO_ZERO 经测试,可以
------------------------------------------------------------------------
选择屏幕隐藏,no-display  林海
------------------------------------------------------------------------
验证:
AT SelectION-SCREEN.
*  IF SY-BATCH = ''.   屏幕会报错,屏蔽 panjin modify 20130317
*    MESSAGE '请用后台作业执行该程序!' TYPE 'E'.
*  ENDIF.

or  START-OF-SelectION.
MESSAGE s001(00) WITH text-t01 DISPLAY LIKE 'E'.   
    LEAVE LIST-PROCESSING.  
------------------------------------------------------------------------
alv设置选定另一方式:
 LS_LAYOUT-BOX_FIELDNAME      = 'SEL'.
    WHEN 'ALL'.
      LOOP AT GT_LIST INTO GS_LIST.
        GS_LIST-sel = 'X'.
        MODIFY GT_LIST FROM GS_LIST.
      ENDLOOP.
    WHEN 'SAL'.
      LOOP AT GT_LIST INTO GS_LIST.
        GS_LIST-sel = ''.
        MODIFY GT_LIST FROM GS_LIST.
      ENDLOOP.
    WHEN 'PRINT'.
      PERFORM  FRM_SMARTFORM TABLES  GT_LIST.      
      
  LOOP AT PT_LIST into GS_LIST where sel eq 'X'.
    ISSelect = 'T'.
    exit.
  ENDLOOP.
  IF ISSelect = 'F'.
    MESSAGE '请选择需要打印的物料。' TYPE 'E'.
    exit.
  ENDIF.  
  LT_LIST[] = PT_LIST[] .
  delete LT_LIST Where sel ne 'X'.
------------------------------------------------------------------------
取模:i = 10 mod 2.
------------------------------------------------------------------------
去前导0,加前导0
方法一:Shift string left leading '0'.
方法二:CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'     "Delete 0.
                EXPORTING
                  input  = edt_bf_anln1
                IMPORTING
                  output = edt_bf_anln1.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'     "ADD 0.
                EXPORTING
                  input  = edt_bf_anln1
                IMPORTING
                  output = edt_bf_anln1.                  
------------------------------------------------------------------------
查看程序是否已上传:
1.se01可查
2.查看数据表E070,输入TR号(注意此TR应为Higher-Level Request),若未上传,则在E070表中查询不到对应的记录。
------------------------------------------------------------------------
取vin号:即取objk-SERNR 及相关其它信息
1.已知交货单,查表ser01;
2.已知物料凭证,查表SER03.
3.已知销售订单,查表SER02.
------------------------------------------------------------------------
取整函数:
a = '1.36'.  b = '1.34'.  
c = CEIL( a / b ).   WRITE:/,c.   "输出 2.000
d = FLOOR( a / b ).  WRITE:/,d.   "输出 1.000
------------------------------------------------------------------------
/与div区别:

------------------------------------------------------------------------
性能分析 :
data:t1 type i,t2 type i,time type i.
get run time field t1. 
get run time field t2. 
time = t2-t1. 
write :/ ’Runtime:’,time. 
------------------------------------------------------------------------
定义结构:
ZSTR_PP_001
------------------------------------------------------------------------
SE14调整表时提示转换出错,导致数据被清空,怎么恢复 
Se14调整时发生数据转换等错误,导致激活失败时,发现表还在,但是数据清空了,可以使用以下方法处理:
一、在底层数据库上SAPSR3用户下有一个QCM*xxx临时表,XXX为你要调整的表名,例如EBAN;这个表中存储了你调整之前的数据,让basis协助你把这个临时表的数据导出来,人工处理一下类型转换问题,再导入到XXX表就可以了。
二、这个表上建的一些视图需要在SE11中重新激活一下。

注:以上方法是在se14调整失败的时候用的;如果你用se14就是要删除数据且成功激活的话,临时表已经被drop掉,神也帮不了你了。
------------------------------------------------------------------------
取bseg 函数
READ_BSEG
GET_ALL_BSEG
------------------------------------------------------------------------
改开发类方法:
se80找到本地对象,修改传输类 或se03
------------------------------------------------------------------------
取整函数:
求绝对值:abs
向上取整整:ceil 。如5.32ceil求出为6.
向下取整floor。
取小数:frac。
------------------------------------------------------------------------
se16n 
改表函数:SE16N_INTERFACE
查看更改记录:RKSE16N_CD 
查看删除记录:RKSE16N_CD_SHOW_Delete
涉及两个表:SE16N_CD_DATA 和  SE16N_CD_KEY
------------------------------------------------------------------------
CMOD中如何删除增强组件?
 1. 必须先 Undo activation.
 2. 然后选中要删除的组件,点选编辑-> Delete enhancement assignment
 3. 再激活,即可.
------------------------------------------------------------------------
查所有程序和tcode: TSTC
------------------------------------------------------------------------
打印次数,是否打印:
  OUTPUT_OPTIONS-tdiexit = 'X'.  "预览打印后直接退出(一定要加)    
  if  lw_ssfcrescl-outputdone = 'X' .  打印了.  endif.
------------------------------------------------------------------------
INCLUDE <list>.
再模式  加图标
------------------------------------------------------------------------
登录框:
sap router: 用于外网登录内网,一串字符串
系统标识:dev,qas,prd 随意填三位
系统编号:00  这个重要
------------------------------------------------------------------------
月份选择屏幕:
Select-OPTIONS:s_month for RPCPP01-RPMAX.
------------------------------------------------------------------------
四舍五入:
DATA: value TYPE p VALUE '123.556' DECIMALS 3.
IF FRAC( value ) GE '0.5'.     " frac为取小数位
   value = TRUNC( value ) + 1.  " trunc为取整数位
ELSE.   
   value = TRUNC( value ).
ENDIF.
即124.000  从十分位小数舍入
------------------------------------------------------------------------
Call transaction 的两种情况 
①全都有PARAMETER ID
  SET PARAMETER ID 'ANR' FIELD mdpsx-del12.
  CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
②有字段没有parameter id .
DATA: ls_bdcdata TYPE bdcdata,
      lt_bdcdata TYPE TABLE OF bdcdata.
DATA: opt TYPE ctu_params.  
CLEAR ls_bdcdata.
  ls_bdcdata-program  = 'SAPMM60X'.
  ls_bdcdata-dynpro   = '0105'.
  ls_bdcdata-dynbegin = 'X'.
  APPEND ls_bdcdata TO lt_bdcdata.
  
  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'AM60X-VERAK'.
  ls_bdcdata-fval = 'X'.
  APPEND ls_bdcdata TO lt_bdcdata.
  
  opt-dismode = 'E'.
  opt-defsize = 'X'.
  CALL TRANSACTION 'MD63' USING lt_bdcdata OPTIONS FROM opt.  
------------------------------------------------------------------------
ALV中刷新:
FORM usercommand USING ucomm TYPE sy-ucomm
                    selfield TYPE slis_selfield.
 DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
方法一: 
 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'  "获得数据
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.
方法二:  
selfield-refresh = 'X'.  " 所有更改全部更新
" itab-fld1 = selfield-value                     "更改某一字段
CASE sy-ucomm.
 WHEN 'SAVE'.
 ENDCASE.
ENDFORM.  
------------------------------------------------------------------------
不同bar:
IF sy-tcode = 'ZFI004'.
    SET TITLEBAR 'TITLE' WITH text-t01.
ELSE.
    SET TITLEBAR 'TITLE' WITH text-t02.
ENDIF.
------------------------------------------------------------------------
Call transaction 的两种情况 
方法一:有PARAMETER ID
 SET PARAMETER ID 'ANR' FIELD mdpsx-del12.
 CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
方法二:无PARAMETER ID
  DATA: ls_bdcdata TYPE bdcdata,
        lt_bdcdata TYPE TABLE OF bdcdata.
  DATA: opt TYPE ctu_params.  
  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'AM60X-VERAK'.
  ls_bdcdata-fval = 'X'.
  APPEND ls_bdcdata TO lt_bdcdata.  
 opt-dismode = 'E'.
 opt-defsize = 'X'.
 CALL TRANSACTION 'MD63' USING lt_bdcdata OPTIONS FROM opt.
------------------------------------------------------------------------
改登录方式:usrr02-ustyp  s:为服务用户
------------------------------------------------------------------------
查看缺少什么权限对象: AUTHORITY_CHECK_TRUSTED_SYSTEM  好用
------------------------------------------------------------------------
alv弹小窗口:old\资料\alv\function\弹小窗口(好).docx
          例:ZZFMM029  无上面状态栏
------------------------------------------------------------------------
两种搜索帮助:
F4IF_FIELD_VALUE_REQUEST主要功能是将表里的字段对应的search help引入到屏幕上来,从而打开对话框,当然也可以任意指定某个search help。
F4IF_INT_TABLE_VALUE_REQUEST支持字定义内表,但是不能通过指定search help的方式打开对话框。
总结:总上所述,在se11已经存在建立好的search help的情况下我们通常使用第一个function module,在需要给某个字段限定一些特殊值的时候,我们通常使用第2种.
------------------------------------------------------------------------
alv刷新:
FORM usercommand USING ucomm TYPE sy-ucomm
                    selfield TYPE slis_selfield.
 DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
方法① 写在最上
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'  "获得数据
    IMPORTING
      e_grid = lr_grid.
      CALL METHOD lr_grid->check_changed_data.
方法②   写在最上
    selfield-refresh = 'X'.  " 所有更改全部更新
    itab-fld1 = selfield-value                     "更改某一字段      
    
CASE sy-ucomm.
*请填写删除操作
* 保存操作
     WHEN 'SAVE'.
*请填写修改操作 
    MODIFY ZSZ_LEAVE FROM TABLE ITAB.
    COMMIT WORK.
ENDCASE.
ENDFORM.              "USER_COMMAND    
------------------------------------------------------------------------
alv 双击:
FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
  READ TABLE it_data INDEX selfield-tabindex.
  CHECK sy-subrc = 0.
  CASE ucomm.
      IF selfield-sel_tab_field = '1-EXTRA'.         "OR  rs_selfield-FIELDNAME = 列  "表示单击某一单元格  ,这里的1表示那个被输出的内表
      WHEN '&IC1'.                      "ALV中双击事件代码
        ucomm = '&ETA'.      "查看明细,即将该行的数据显示在一个DIALOG中(记得在G_IT_LAYOUT-DETAIL_INITIAL_LINES = 'X' 将无数据的列也显示)
        SET PARAMETER ID 'VF' FIELD it_data-faph.
        CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
      ENDIF.
  ENDCASE.
ENDFORM.                    "USER_COMMAND
------------------------------------------------------------------------
Call transaction 的两种情况:call tcode
①全都有PARAMETER ID
  SET PARAMETER ID 'ANR' FIELD mdpsx-del12.
  CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
②有字段没有parameter id .
 DATA: ls_bdcdata TYPE bdcdata,
        lt_bdcdata TYPE TABLE OF bdcdata.
  DATA: opt TYPE ctu_params.
  CLEAR ls_bdcdata.
  ls_bdcdata-program  = 'SAPMM60X'.
  ls_bdcdata-dynpro   = '0105'.
  ls_bdcdata-dynbegin = 'X'.
  APPEND ls_bdcdata TO lt_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'AM60X-VERAK'.
  ls_bdcdata-fval = 'X'.
  APPEND ls_bdcdata TO lt_bdcdata.

  opt-dismode = 'E'.
  opt-defsize = 'X'. 
CALL TRANSACTION 'MD63' USING lt_bdcdata OPTIONS FROM opt.
------------------------------------------------------------------------
debug:
(1)变量:i   条件: i > 20
(2)变量:i    条件:lines( itab ) > 20    行数大于20时停
(3)变量:itab-matnr    条件:strlen( itab-matnr ) > 15   
(4)经典模式下,去断点,在菜单“断点”->删除
------------------------------------------------------------------------
上传和下载服务器文件的两个Tcode
tcode:CG3Z  fm:C13Z_FRONT_END_TO_APPL 上传
      CG3Y  C13Z_APPL_TO_FRONT_END    下载
------------------------------------------------------------------------
IMPORT/EXPORT 和 SET/GET PARAMETER 区别:
IMPORT/EXPORT:用于同一窗口
SET/GET PARAMETER: 可用于不同窗口
------------------------------------------------------------------------
debug 验证替代:
GGB0,GGB1 后,点“ZFT01”,TCODE输入"=SHCD",回车,进来,然后找到 ZFT01 ‘007’,断点,即可。
debug 可跳过断点
------------------------------------------------------------------------
se16n 怎样修改数据:
debgu,在 CALL FUNCTION 'SE16N_INTERFACE' 处下断点,改参数I_EDIT = ‘X’,i_sapedit = 'X'即可
------------------------------------------------------------------------
message 报错时 down问题:
解决方法:例MV45AFZZ 中 FORM userexit_save_document_prepare    
MESSAGE 'MV45AFZZ => 无行项目数据,不允许创建修改删除销售订单!'TYPE 'S' DISPLAY LIKE 'E'. (如果直接type e 会down)
LEAVE TO SCREEN sy-dynnr.(加此句,不会down)
------------------------------------------------------------------------
动态隐藏状态栏:
  DATA: lt_exclude TYPE TABLE OF sy-ucomm.
  CLEAR:lt_exclude.
  IF p_check1 EQ 'X'.    
    APPEND 'FENPEI' TO lt_exclude.
    APPEND 'ME21N' TO lt_exclude.
  ELSE. 
    APPEND 'SAVE' TO lt_exclude.
    APPEND 'DELE' TO lt_exclude.
  ENDIF.
  SET PF-STATUS 'STATUS_005' EXCLUDING lt_exclude.   "不包括
------------------------------------------------------------------------
库存逻辑:
非限制性库存 - 交货计划 (相减) 例mard-labst - 交货计划字段
------------------------------------------------------------------------
SAP abap modify commit 分批提交
1. 大数据量时不要用MODIFY
2. 大数据量时请考虑使用update module
3. 大数据量更新必然引起transaction log的激增,没办法,请密切关注硬盘空间(或不怕死的把log关了)
------------------------------------------------------------------------
增强中:*变量:表要修改的表量
------------------------------------------------------------------------
单箭头与双箭头区别:(=> 表调用静态方法,->表调用实例方法)
DATA GS_ALV TYPE REF TO CL_GUI_ALV_GRID .  "参照类创建实例(用ref to 创建实例,后面接类)
*调用 STATIC METHOD (类后=>方法)
CALL METHOD CL_GUI_ALV_GRID=>GET_FOCUS .

* 实例方法 INSTANCE METHOD  (实例->方法)
CALL METHOD GS_ALV->SET_NAME .

* 输出静态属性 STATIC ATTRIBUTES 
* 静态属性在所有的实例中都共享
WRITE  CL_GUI_ALV_GRID=>ACTIVEX . 

* 实例属性 INSTANCE ATTRIBUTES
WRITE  GS_ALV->LIFETIME .

* 常量
WRITE  CL_GUI_ALV_GRID=>WS_VISIBLE .

双箭头前永远是类,单箭头前永远是实例名
------------------------------------------------------------------------
报错:MESSAGE e101(c+) WITH 'aaa' 'bbb'.
------------------------------------------------------------------------
成本中心表 :CSKS,cskt
------------------------------------------------------------------------
native sql 中注释:
*********************************ACTION_TYPE  例:om ZDBIF01
------------------------------------------------------------------------
怎么退出SAP登录:call 'SYST_LOGOFF'.
------------------------------------------------------------------------
se38 = sa38
------------------------------------------------------------------------
报错
MESSAGE '没有此vin' TYPE 'S' DISPLAY LIKE 'E'.
stop.
------------------------------------------------------------------------
在平时的ABAP开发中,需要捕获的异常通常为两种:
1).一种是执行SQL,比如主键重复,Insert语句字段类型不匹配等
2).还有就是RFC的通信错误,
比如:不能进行远程连接等。通常可以这么处理:
TRY.
   CALL FUNCTION 'Z_DAQ_CALL_JCO' DESTINATION 'ZJCOSERVER_DAQ'
   EXPORTING
    pv_empid = l_empid
   IMPORTING
        pv_rlt = l_rlt
   TABLES
        it_spfli = i_tab
   EXCEPTIONS
    system_failure = 1 MESSAGE err_text
    communication_failure = 2 MESSAGE err_text.
ENDTRY.
IF SY-SUBRC <> 0.
   WRITE: / '调用***失败!' , err_text.
ENDIF.
------------------------------------------------------------------------
怎样生成pr:
md02:参数 1,3,1,3,1  然后md04即可查看
失败原因:1.可能有库存,有库存时用库存,不会生成pr
          2.可能是主数据自制件,改mrp2视图为采购件F,并去下面50即可.(改完后重新md02,md04看)

pr->po:失败原因  没有货源清单
------------------------------------------------------------------------
清st22日志:
程序:RSSNAPDL  job:SAP_REORG_ABAPDUMPS
------------------------------------------------------------------------
屏幕权限管控地方:
AT SelectION-SCREEN OUTPUT.

at selection-screen.
  LOOP AT S_BSTNK.
    TRANSLATE S_BSTNK-low TO UPPER CASE.
    TRANSLATE S_BSTNK-high TO UPPER CASE.
    MODIFY S_BSTNK.
    clear:S_BSTNK.
  ENDLOOP.

or
at selection-screen.
  perform sub_auth_check.

FORM sub_auth_check .
  AUTHORITY-CHECK OBJECT 'ZPRINT'
            ID 'ZFLAG' FIELD 'X'.
  IF sy-subrc EQ 0
      or sy-uname EQ 'PANJIN'
      or sy-uname EQ 'CONSULT2'.
    g_auth = 'PRINT'.
  ELSE.
    g_auth = 'SHOW'.
  ENDIF.
ENDFORM.  
------------------------------------------------------------------------
改开发类&开发包:
se03->对象目录->修改对象目录条目->选定第一项"r3tr prog",输入程序名,运行->选定程序名,双击修改 即可
------------------------------------------------------------------------
选择屏幕字段隐藏:选择屏幕隐藏
PARAMETERS p_kunnr TYPE kunnr MODIF ID m1 .
AT SelectION-SCREEN  OUTPUT.
  IF r1 NE 'X'.
    LOOP AT SCREEN.
      IF screen-group1 = 'M1'.
        screen-active  = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
------------------------------------------------------------------------
把内表 itab1 的 n1 到 n2 行内容附加到 itab2 内表中去.
APPEND LINES OF gt_01 FROM 2 TO 3 TO gt_00.
----------------------------------------------------------------------
TRANSPORTING NO FIELDS: 用于read table with key 语句,不需要将数据读入table 工作区中
例:READ TABLE itab with key infnr = '5500000041' TRANSPORTING NO FIELDS.
即: itab 这个工作区没数据
------------------------------------------------------------------------
SET / GET PAREMETER 和 IMPORT / EXPORT 区别:
SET / GET PAREMETER:能跨多个session,打开第二个session值能传过去,一般用于屏幕默认值输入
IMPORT / EXPORT:只能同一session,一般用于模块之间传替数据
------------------------------------------------------------------------
返回最上屏幕:
SET SCREEN 0.
------------------------------------------------------------------------
BREAK 带点解决:
1.data:c_username value 'user.name', then  break c_username. 
2.If sy-uname = 'youruser.name'. Break-point. Endif. 
------------------------------------------------------------------------
穿透功能:
form frm_user_command using pv_ucomm like sy-ucomm
                          ps_selfield type slis_selfield.
  case pv_ucomm.
    when '&IC1'.
      check not ps_selfield-value is initial.
      case ps_selfield-fieldname.
        when 'AUFNR'.   "生产订单
          set parameter id 'ANR' field ps_selfield-value.
          call transaction 'CO03' and skip first screen.
        when 'MATNR'.   "物料号
          set parameter id 'MAT' field ps_selfield-value.
          call transaction 'MM03' and skip first screen.
        when 'KDAUF'.
          set parameter id 'AUN ' field ps_selfield-value.
          call transaction 'VA03' and skip first screen.
      endcase.
endform.
------------------------------------------------------------------------
alv,勾选一个,alv相同采购订单全部勾选&全部取消勾选:
  CASE PR_UCOMM.
    WHEN '&IC1'.
      CHECK NOT PR_SELFIELD-VALUE IS INITIAL.

      CASE PR_SELFIELD-FIELDNAME.
        WHEN 'SEL'.   "选择
          CLEAR LS_ALV.
          READ TABLE LT_ALV INTO LS_ALV INDEX PR_SELFIELD-TABINDEX.
          CHECK SY-SUBRC EQ 0.
          IF LS_ALV-SEL IS INITIAL.
            LS_ALV-SEL = 'X'.
          ELSE.
            LS_ALV-SEL = ''.
          ENDIF.
          MODIFY LT_ALV FROM LS_ALV TRANSPORTING SEL Where EBELN EQ LS_ALV-EBELN.
      ENDCASE.
------------------------------------------------------------------------
热点,超链接
t_field-hotspot = 'X'.
------------------------------------------------------------------------
动态title:不同抬头:不同属性
INITIALIZATION.
  CASE SY-TCODE.
    WHEN 'ZFI010'.
      SET TITLEBAR 'T04'.
    WHEN 'ZFI011'.
      SET TITLEBAR 'T05'.
------------------------------------------------------------------------
穿透,超连接:
FORM frm_url USING rs_selfield TYPE slis_selfield.
  READ TABLE gt_itab INDEX rs_selfield-tabindex.
  IF sy-subrc = 0.
    IF rs_selfield-fieldname EQ 'MATNR'.
      SET PARAMETER ID 'MAT' FIELD gt_itab-MATNR.
      CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    ENDIF.
    IF rs_selfield-fieldname EQ 'NUM4'.
      SET PARAMETER ID 'WRK' FIELD gt_itab-WERKS.
      SET PARAMETER ID 'MAT' FIELD gt_itab-MATNR.
      CALL TRANSACTION 'ME2N' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.
ENDFORM. " FRM_URL

例2:FORM frm_user_command USING i_ucomm       TYPE sy-ucomm
                            i_wa_selfield TYPE slis_selfield.
  CASE i_ucomm.
     WHEN '&IC1'.  "Double click
      IF i_wa_selfield-fieldname = 'EBELN'.
        SET PARAMETER ID 'BES' FIELD i_wa_selfield-value.
        CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

例3: check not ps_rs_selfield-value is initial.
      case ps_rs_selfield-fieldname.
        when 'QMNUMX'.
          set parameter id 'IQM' field ps_rs_selfield-value.
          call transaction 'IW23' and skip first screen.
        when 'ZEQUI_N'.
          set parameter id 'EQN' field ps_rs_selfield-value.
          call transaction 'IE03' and skip first screen.
        when 'ZTPLNR_N'.
          set parameter id 'IFL' field ps_rs_selfield-value.
          call transaction 'IL03' and skip first screen.
      endcase.
------------------------------------------------------------------------
百分号表示:
LV_RESULT = '23.45'.
LV_OUT = |{ LV_RESULT }%|.
WRITE : / LV_OUT.  "即 23.45%
 "lv_out因为有百分号,所以要字符型
------------------------------------------------------------------------
notes查找 https://support.sap.com/notes  搜索note
note:S0016987405,密码:xsw@1qaz
https://support.sap.com/en/my-support/knowledge-base.html
问题:
https://support.sap.com/en/index.html
------------------------------------------------------------------------
se16n 打开编辑权限:
se16n,输入表名,/h,  运行,GD-SAPEDIT,GD-EDIT 两变量置X即可(不是SY-EDIT).
------------------------------------------------------------------------
验证:程序RGGBR000复制为ZRGGBR000
替代:程序RGGBS000复制为ZRGGBS000
------------------------------------------------------------------------
表显示:alv格式还是grid格式  控制  :se16,设置->用户参数->数据浏览器
        数据内部编码显示,还是外部编码显示设置,(同上,然后是“格式”“考虑转换出口”)
------------------------------------------------------------------------
left join中右边表字段不能用在条件中
------------------------------------------------------------------------
通过Field-symbols跨程序读取或修改全局变量值:
FIELD-SYMBOLS:
    <lfs_likp>  TYPE likp,
    <lfs_xlips> TYPE lty_xlips,
    <lfs_xvekp> TYPE vsep_t_vekp,
    <lfs_xvepo> TYPE vsep_t_vepo.
 
  " import data from SAPMV50A
  ASSIGN ('(SAPMV50A)LIKP') TO <lfs_likp>.
  CHECK <lfs_likp> IS ASSIGNED.
  ASSIGN ('(SAPMV50A)XLIPS[]') TO <lfs_xlips>.
  CHECK <lfs_xlips> IS ASSIGNED.
  " import data from SAPLV51P
  ASSIGN ('(SAPLV51P)GT_XVEKP[]') TO <lfs_xvekp>.
  CHECK <lfs_xvekp> IS ASSIGNED.
  ASSIGN ('(SAPLV51P)GT_XVEPO[]') TO <lfs_xvepo>.
  CHECK <lfs_xvepo> IS ASSIGNED.
------------------------------------------------------------------------
单选按钮组:
SelectION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001.
PARAMETERS R1 RADIOBUTTON GROUP GR1.
PARAMETERS R2 RADIOBUTTON GROUP GR1.
PARAMETERS R3 RADIOBUTTON GROUP GR1.
PARAMETERS R4 RADIOBUTTON GROUP GR1.
PARAMETERS R5 RADIOBUTTON GROUP GR1.
PARAMETERS R7 RADIOBUTTON GROUP GR1.
PARAMETERS R6 RADIOBUTTON GROUP GR1.
PARAMETERS R8 RADIOBUTTON GROUP GR1 DEFAULT 'X'.
SelectION-SCREEN END OF BLOCK BK1.
------------------------------------------------------------------------
复选按钮组:
SelectION-SCREEN BEGIN OF LINE.
PARAMETERS p1 AS CHECKBOX DEFAULT 'X'.
SelectION-SCREEN COMMENT 2(8) TEXT-010 FOR FIELD p1.
PARAMETERS p2 AS CHECKBOX DEFAULT 'X'.
SelectION-SCREEN COMMENT 12(8) TEXT-012 FOR FIELD p2.
SelectION-SCREEN END OF LINE.
------------------------------------------------------------------------
selection-screen begin of line.
selection-screen end of line.
------------------------------------------------------------------------
取合作伙伴表:vbpa
------------------------------------------------------------------------
链接,穿透:
    WHEN '&IC1'.
      CHECK NOT rs_selfield-value IS INITIAL.
      CASE rs_selfield-fieldname.
        WHEN 'VBELN'.
          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
        WHEN 'MATNR'.
          SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
          CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
        WHEN 'MSG'.
          IF rs_selfield-value(1) EQ '8'.
            SET PARAMETER ID 'VL' FIELD rs_selfield-value.
            CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
          ENDIF.
*        WHEN 'CHKBOX'.
*          READ TABLE gt_itab INDEX rs_selfield-tabindex.
*          gt_itab-sel = 'X'.
*          IF gt_itab-chkbox IS INITIAL.
*            gt_itab-chkbox = 'X'.
*          ELSE.
*            CLEAR:gt_itab-chkbox.
*          ENDIF.
*          MODIFY gt_itab  INDEX rs_selfield-tabindex TRANSPORTING sel chkbox.
      ENDCASE.
------------------------------------------------------------------------
定义numc:
data:month1(2) type n ,month2(2) type n .
------------------------------------------------------------------------
se16n 可编辑状态:
se16n,/h,回车(不是运行),GD-SAPEDIT = X ,GD-EDIT=X  即生产机可编辑了.
------------------------------------------------------------------------
数据类型:
Data Type    Initial field length    Valid field length    Initial value         Meaning
Numeric types
I        4                4             0        Integer (whole number)
F        8                8            0        Floating point number
P        8                1 - 16            0        Packed number
Character types
C        1                1 - 65535        ' ... '        Text field(alphanumeric characters)
D        8                8            '00000000'    Date field(Format: YYYYMMDD)
N        1                1 - 65535        '0 ... 0'    Numeric text field(numeric characters)
T        6                6            '000000'    Time field(format: HHMMSS)
Hexadecimal type
X        1                1 - 65535        X'0 ... 0'    Hexadecimal field
------------------------------------------------------------------------
div / mod
1、div
div是用于取两数相除的商的,c = a div b,得到的c的值就是a除b的商。
2、/
/ 是用于取两数相除的结果的。c = a / b,如果c是i数据类型的,这个语法会进行四舍五入的。
3、mod
mod 是用于取两数相除的余数,c = a mod b,得到的c的值的就是a除b的余数。
------------------------------------------------------------------------
插入DEMO数据 SBOOK, SPFLI, SFLIGHT:
程序名 : SAPBC_DATA_GENERATOR
T-CODE: BC_DATA_GEN
------------------------------------------------------------------------
多线程调用:异步调用:
      CALL FUNCTION 'ZFN_PM_016_SEND'  "要远程的
        STARTING NEW TASK 'ZPM016'    "zpm016 这里没用
        EXPORTING
          iv_aufnr = ls_header-aufnr.
 
更新模式:         
      CALL FUNCTION 'ZFN_SD_002' IN Update TASK   
         EXPORTING
           I_VBELN       =  VBAK-VBELN
         TABLES
           IT_VBAP       = IT_VBAP[]
                  .          
       commit work.   "只有等下面commit work时,函数才会运行。
------------------------------------------------------------------------
选择屏幕:选择公司去多余的框:
select-options: s_bukrs for ekko-bukrs OBLIGATORY  no intervals no-extension。
------------------------------------------------------------------------
alv:前面带选择行
layout-sel_mode = 'A'.
------------------------------------------------------------------------
hana s4下 qas改标准代码程序:RS_REPAIR_SOURCE(可复制出来,加个事物码zpanjin400)
------------------------------------------------------------------------
修改记录;
REPORT rsscd1ts MESSAGE-ID cd NO STANDARD PAGE HEADING.
* use REPORT RSSCD100 instead
------------------------------------------------------------------------
ALV金额,ALV金额数量,1000倍 问题
  IF &1 eq 'ZNOTAXAMOUNT' or &1 eq 'ZTAXAMOUNT'.
    GS_FIELDCAT-datatype = 'CURR'.
  ENDIF.
------------------------------------------------------------------------
直接修改代码,改程序,改代码:RS_REPAIR_SOURCE
------------------------------------------------------------------------
搜索代码,查代码:程序RS_ABAP_SOURCE_SCAN
------------------------------------------------------------------------
oo alv :set_table_for_first_display  
选择单行:ls_layout-SEL_MODE = 'A'.
保存样式:先定义 data:ls_variant TYPE disvariant.再给值ls_variant-report = sy-repid.
          参数设置i_save          = 'A'
                   is_variant      = ls_variant
------------------------------------------------------------------------
表里长文本:text40,TEXT256,BAPI_MSG, TEXT452, TEXT1000, TEXT1024,  TEXT2048(这个太长不能用) 
            tablecontrol中最多显示255长度
------------------------------------------------------------------------
migo 物料凭证穿透:
 CALL FUNCTION 'MIGO_DIALOG'
        EXPORTING
          I_ACTION            = 'A04'
          I_REFDOC            = 'R02'  "物料凭证
          I_NOTREE            = 'X'
          I_NO_AUTH_CHECK     = ' '
          I_DEADEND           = 'X'
          I_SKIP_FIRST_SCREEN = 'X'
          I_OKCODE            = 'OK_GO'
          I_MBLNR             = gt_itab-MBLNR
*          I_MJAHR             =
*          I_ZEILE             = gt_itab-ZEILE
           .
------------------------------------------------------------------------
采购订单穿透:
 CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
               EXPORTING
                 I_EBELN              = GS_ALV-EBELN
*                I_EBELP              =
*                I_ENJOY              = 'X'
*                I_PREVIEW            =
*                I_DATA_FROM_BUFFER   =
*                I_BSTYP              =
*                I_DISPLAY_ONLY       = ' '
*                I_EDIT               = ' '
*                I_ETENR              =
*                I_DOC_INITIATOR      =
*                I_COMMIT_WAIT        =
               EXCEPTIONS
                 NOT_FOUND            = 1
                 NO_AUTHORITY         = 2
                 INVALID_CALL         = 3
                 PREVIEW_NOT_POSSIBLE = 4
                 OTHERS               = 5.
             IF SY-SUBRC <> 0.
* Implement suitable error handling here
             ENDIF.          
------------------------------------------------------------------------
SET PARAMETER ID 'MXX' FIELD I_PSTAT.
SET PARAMETER ID 'MAT' FIELD I_MATNR.
SET PARAMETER ID 'WRK' FIELD I_WERKS.
SET PARAMETER ID 'LAG' FIELD I_LGORT.
SET PARAMETER ID 'BWT' FIELD I_BWTAR.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

其中根据维护状态“PSTAT”判定显示哪个页签。
维护状态 (K,E,D,B,L,A)
A   Work scheduling
B   Accounting
C   Classification
D   MRP
E   Purchasing
F   Production resources/tools
G   Costing
K   Basic data
L   Storage
P   Forecasting
Q   Quality management
S   Warehouse management
V   Sales
X   Plant stocks
Z   Storage location stocks
------------------------------------------------------------------------
选择屏幕空行
SelectION-SCREEN SKIP.
------------------------------------------------------------------------
个人参数设置: 经典alv 与grid切换
个人参数:me_use_grid=X  即经典alv
------------------------------------------------------------------------
取月初月末:
INITIALIZATION.
  CONCATENATE sy-datum(6) '01' INTO s_budat-low.
  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
    EXPORTING
      i_date = sy-datum
    IMPORTING
      e_date = s_budat-high.
  s_budat-sign  = 'I'.
  s_budat-option = 'BT'.
  append s_budat.
------------------------------------------------------------------------
取域文本,域描述:
    Select SINGLE DDTEXT INTO GT_OUTPUT-ZHKLX_T FROM DD07T
      Where DOMNAME = 'ZDM_ZHKLX'
        AND DDLANGUAGE = '1'
        AND DOMVALUE_L = GT_OUTPUT-ZHKLX.
        
or:
    DATA: L_DOMVALUE TYPE DD07V-DOMVALUE_L.
    L_DOMVALUE = <G_DATA>-STATE.
    CALL FUNCTION 'DOMAIN_VALUE_GET'
      EXPORTING
        I_DOMNAME  = 'ZZSTATUS2'
        I_DOMVALUE = L_DOMVALUE
      IMPORTING
        E_DDTEXT   = <G_DATA>-STATE_T
      EXCEPTIONS
        NOT_EXIST  = 1.   
           
取域值:
DATA:gt_dd07t TYPE TABLE OF dd07t,
     gs_dd07t TYPE dd07t.

Select * FROM dd07t
  INTO TABLE gt_dd07t
  Where domname    = 'EBSTYP'    "域名
    AND ddlanguage = sy-langu.
SORT gt_dd07t BY domname . 
CLEAR gs_dd07t .
LOOP AT gt_dd07t INTO gs_dd07t.
  WRITE:/ gs_dd07t-domvalue_l.  "域值
ENDLOOP.
          
取域列表:
  DATA:lt_dom1 TYPE STANDARD TABLE OF dd07v。
  CALL FUNCTION 'HRIQ_DOMVALUES_GET'
    EXPORTING
      name      = 'ZDMIDECDDLX'
    TABLES
      dd07v_tab = lt_dom1.
  SORT lt_dom1 BY domvalue_l.           
------------------------------------------------------------------------
选择屏幕下拉:
PARAMETERS:P_ZSTATE TYPE ZEPWZ041-ZSTATE  AS LISTBOX VISIBLE LENGTH 10.
------------------------------------------------------------------------
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      PERCENTAGE = 50
      TEXT       = TEXT-022."'数据处理中,请耐心等待..........'.
------------------------------------------------------------------------
    PERFORM FRM_SEND_DATA_TOEPEC IN PROGRAM ZMMRWZ01960 TABLES LT_FKSQ.
------------------------------------------------------------------------
MODIFY DBTAB FROM TABLE g_t_result.
IF sy-subrc = 0.
   COMMIT WORK AND WAIT.
   ELSE.
     ROLLBACK WORK.
ENDIF.
可是报错 SQL0964C The transaction log for the database is full.
回答
1. 大数据量时不要用MODIFY
2. 大数据量时请考虑使用update module
3. 大数据量更新必然引起transaction log的激增,没办法,请密切关注硬盘空间(或不怕死的把log关了)
可以筛选一下分批写入
------------------------------------------------------------------------
ale与idoc区别:
ale:同一公司,sap两台服务器间传输(例:ibm公司内部传输)
edi:不同公司,sap两台服务器间传输(例:ibm与hp间传输数据)
------------------------------------------------------------------------
类中的实例or静态的属性or方法如何调用:
DATA GS_ALV TYPE REF TO CL_GUI_ALV_GRID .  "参照类创建实例

*调用 STATIC METHOD
CALL METHOD CL_GUI_ALV_GRID=>GET_FOCUS .

* 实例方法 INSTANCE METHOD
CALL METHOD GS_ALV->SET_NAME .

* 输出静态属性 STATIC ATTRIBUTES 
* 静态属性在所有的实例中都共享
WRITE  CL_GUI_ALV_GRID=>ACTIVEX . 

* 实例属性 INSTANCE ATTRIBUTES
WRITE  GS_ALV->LIFETIME .

* 常量
WRITE  CL_GUI_ALV_GRID=>WS_VISIBLE .
------------------------------------------------------------------------
“命名的统一”,
lt_   内表变量
ls_   结构
lv_  单一变量
gv_ gt_ gs_  全局变量
------------------------------------------------------------------------
perform 调其它程序
例1:*待办平台接口子程序
    PERFORM FRM_IF_TODO(ZMROEHQ11110) TABLES GT_OUT
                                       USING SY-REPID
                                             P_ALV  .
                                                                                          
例2:PERFORM FRM_SUB_UP_DOC(ZMMEWZ00050) USING G_MESSTAB-MSGV2 '1'.                                                                                          
------------------------------------------------------------------------
call function 'ZFM_MRO_RUN_DIST' in background task
------------------------------------------------------------------------
科接口:SI_BBR_WMS_GET_MATDOC_S_IN
  CALL FUNCTION 'ZFM_CA_STRING_TB_STRUCT'    "传入的
    EXPORTING
      iv_type = '1'
    TABLES
      it_data = input-mt_bbr_wms_get_matdoc_req-it_USNAM
      et_data = lt_USNAM.
      
  CALL FUNCTION 'ZFM_CA_STRING_TB_STRUCT'     "传出的
    EXPORTING
      iv_type = '2'
    TABLES
      it_data = lt_header
      et_data = output-mt_bbr_wms_get_matdoc_resp-et_mkpf.
------------------------------------------------------------------------
定义成range:
例:ZMROS_LGORT_RANGE 结构(in 科)
SIGN    1 Types    DDSIGN
OPTION    1 Types    DDOPTION
LOW    1 Types    LGORT_D
HIGH    1 Types    LGORT_D

data:lt_lgort  TYPE TABLE OF zmros_lgort_range.
  CALL FUNCTION 'ZFM_CA_STRING_TB_STRUCT'
    EXPORTING
      iv_type = '1'
    TABLES
      it_data = input-mt_bbr_wms_get_matdoc_req-it_lgort
      et_data = lt_lgort.
------------------------------------------------------------------------
取一个结构下所有字段:
CALL FUNCTION 'DDIF_FIELDINFO_GET'
  EXPORTING
    tabname              = 'SPFLI'
 TABLES
   DFIES_TAB            = lt_dfies
------------------------------------------------------------------------
改表三个方法:
1.debug
2.&sap_edit
3.函数:SE16N_INTERFACE: i_tab:表名  i_edit:X i_sapedit:X  i_no_txt:X  三个X
------------------------------------------------------------------------
空行:
ABAP
SelectION-SCREEN SKIP.
------------------------------------------------------------------------
判断函数是否存在:
  DATA:lv_funcname TYPE funcname.  
  lv_funcname = 'ZTEST'.
    CALL FUNCTION 'FUNCTION_EXISTS'
      EXPORTING
        funcname                 = lv_funcname
     EXCEPTIONS
       function_not_exist       = 1
       OTHERS                   = 2.
  IF sy-subrc = 0 .
    CALL FUNCTION lv_fmname
      EXPORTING
        iv_flag = pv_sendap.
  endif.       
------------------------------------------------------------------------
根据表名得 tcode:
TSTCP表 ->PARAM:输入 "*表名*",即得 tcode
------------------------------------------------------------------------
报错设置焦点:
     SET CURSOR FIELD 'P_WERKS'.
      MESSAGE text-004 TYPE 'S' DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING.
------------------------------------------------------------------------
检查是否走bapi:(ZFM_MRO_GET_MULTI_ITEM 科,石家庄业务)
DATA: lt_callstack TYPE abap_callstack,
        lv_bapi .
        
CALL FUNCTION 'SYSTEM_CALLSTACK'
    IMPORTING
      callstack = lt_callstack.
  READ TABLE lt_callstack TRANSPORTING NO FIELDS WITH KEY"BAPI.
                          mainprogram = 'SAPLMB_BUS2017'
                          blocktype = 'FUNCTION'
                          blockname = 'BAPI_GOODSMVT_Create'.
  IF sy-subrc EQ 0.
    lv_bapi = 'X'.
  ENDIF.
------------------------------------------------------------------------
修改配置,找对应修改人:
例如查找库位0131,
SE11看表E071K
选择条件: Program ID:R3TR 
           Object Type:TABU
           Table Name:T001L
           Dictionary: Line item

Object Type
Object Name
View name
Do not use Object Name:80010000131 (Client 800 Plant 1000 Storage location 0131)
这样就可以找到相应的Request/Task,再看request的时间。
------------------------------------------------------------------------
默认权限:
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    ID 'VKORG' FIELD LT_TVKO-VKORG
    ID 'VTWEG' DUMMY
    ID 'SPART' DUMMY
    ID 'ACTVT' FIELD '03'.
------------------------------------------------------------------------
ALV形式显示
例:tcode/ME1M 
解决:SU01->参数->添加 ME_USE_GRID 为X 即可
------------------------------------------------------------------------
debug:断点  例:message no.co017
断点:SY-MSGNO = '017' 
------------------------------------------------------------------------
定义numc型
DATA: num(1) TYPE n.
------------------------------------------------------------------------
是否bapi:(用于增强)  (from 科ZFM_MRO_GET_MULTI_ITEM)
  DATA: lt_callstack TYPE abap_callstack,
        lv_bapi .
        
  REFRESH: lt_callstack.
  CALL FUNCTION 'SYSTEM_CALLSTACK'
    IMPORTING
      callstack = lt_callstack.
  READ TABLE lt_callstack TRANSPORTING NO FIELDS WITH KEY  "BAPI
                          mainprogram = 'SAPLMB_BUS2017'
                          blocktype = 'FUNCTION'
                          blockname = 'BAPI_GOODSMVT_Create'.
  IF sy-subrc EQ 0.
    lv_bapi = 'X'.
  ENDIF.
------------------------------------------------------------------------
另一种函数调用方法(in 科)
  DATA: LV_FUNCNAME TYPE FUNCNAME .
  LV_FUNCNAME = 'ZFM_FI_SUB_LINEITEM_WZ'.
  CALL FUNCTION 'FUNCTION_EXISTS'
    EXPORTING
      FUNCNAME           = LV_FUNCNAME
    EXCEPTIONS
      FUNCTION_NOT_EXIST = 1
      OTHERS             = 2.
  IF SY-SUBRC = 0 .
    CALL FUNCTION LV_FUNCNAME
      CHANGING
        CS_BKPF   = CS_BKPF
        CS_BSEG   = CS_BSEG
        CS_COBL   = CS_COBL
        CS_CAUFVD = CS_CAUFVD
        CS_AFVGD  = CS_AFVGD.
  ENDIF.
------------------------------------------------------------------------
系统生成不重复流水:(二进制,十六进制,32进制等)
DATA:l_uuid22 TYPE sysuuid_c22,
     l_uuid32 TYPE sysuuid_c32,
     l_uuid26 TYPE sysuuid_c26,
     l_uuid16 TYPE sysuuid_x16.
     
 CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_x16    (create_uuid_c22,reate_uuid_c32,create_uuid_c26)
      RECEIVING
        uuid = l_uuid16.
------------------------------------------------------------------------
立方,平方,次方:
a = 2 ** 10.  (a = 1024)
2的10次方,即1024
------------------------------------------------------------------------
跳权限:
1.事物码se37:AUTH_CHECK_TCODE,28行,IF sy-subrc = 0.  执行sy-subrc = 0
2.内部:CL_SUID_TOOLS=================CM00B,49行,   
   if sy-subrc eq 0. "Auth check in cache.
      if ls_cache_auth_node-authorized ne 'X'.
        es_msg = ls_cache_auth_node-msg.
      endif.
      return.
    endif.
在这个位置加断点,每次修改sy-subrc = 0.
ls_cache_auth_node-authorized = 'X'    

注:su01,拷贝时要跳100次这里, 删除时只需跳一次这里即可。
------------------------------------------------------------------------
断点:观察点
变量 sy-msgno  观察点sy-msgno = '017'
------------------------------------------------------------------------
call function 定义range结构: 例:ZMROS_BWART_RANGE 于科2020
SIGN:     DDSIGN
OPTION:   DDOPTION
LOW:      BWART
HIGH:     BWART
------------------------------------------------------------------------
查配置找所对应的所有请求,包括改了什么,修改时间,修改人:
se03->Search for Objects in Requests/Tasks ->IMG Activity 弹出框->再点弹出框,即可查询出.(详:D:\old\资料\配置\如何为配置查找传输请求)
------------------------------------------------------------------------
RZ11 :只在本次登陆中有效,重新登陆以后变回以前的配置。
RZ10 :设置永久生效,设置完成以后需要重新启动,配置才能生效。
------------------------------------------------------------------------
rdisp/max_wprun_time: 程式执行的最长时间限制,即session 时间,单位是秒
------------------------------------------------------------------------
物料号的预处理(科)
      IF strlen( ls_line-matnr ) <= 16.
        CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
          EXPORTING
            input  = ls_line-matnr
          IMPORTING
            output = ls_line-matnr.
      ENDIF.
      ls_item-material = ls_line-matnr.
------------------------------------------------------------------------
成本中心-利润中心-业务范围-功能范围 表:CSKS(成本中心描述表)
------------------------------------------------------------------------
单位表:marm





[本日志由 admin 于 2021-06-03 00:30 AM 编辑]
文章来自: 本站原创
引用通告地址: http://www.is21.cn/trackback.asp?tbID=840
Tags:
评论: 0 | 引用: 0 | 查看次数: 117
发表评论
你没有权限发表留言!