笔记三

01、DELETE ADJACENT DUPLICATES FROM itab COMPARING f1 f2 f3.

    使用前根据COMPARING后面字段排序,SORT itab BY f1 f2 f3.程序运行的效果是保留第一行,删除后面相同KEY的行

02 FOR ALL ENTRIES IN itab

1、判断内表itab是否为空,如果为空不可以使用这个语法

2、默认做DISTINCT的动作,所以SELECT后面跟所有主键

3、如果内表数据量达到几十万上百万,则最好不要使用,因为内存消耗巨大

03RANGE数据太多会造成程序DUMP

在SQL中使用RANGE的时候,会把所有的数据都放到一个SQL语句里面,因为SQL语句是有长度限制的,所以如果RANGE数据太多,就造成SQL语句超长,程序就会DUMP了。

所以,要避免在RANGE里面放太多的数据。

04 READ TABLE itab WITH KEY f1 = 'A' BINARY SEARCH.

1、使用前根据KEY后面字段升序排序

2、如果有多条记录满足条件,SY-TABIX返回第一条的INDEX

05C类型的变量间赋值,A = B,从前往后开始复制。

比如str1(6) str2(3),str1 = ' ABC' str2 = str1,则str2 = ' AB'

如果是数值型的赋值给字符型,则从后面开始复制,如果字符型变量长度不够,第一位会变成*

如果是字符型的赋值给数值型,如果数值型长度不够,则会溢出DUMP,运行时错误 CONVT_OVERFLOW

06CALL其他程序的子程序并先给全局变量赋值:

FIELD-SYMBOLS <fs> TYPE any. 

PERFORM (space) IN PROGRAM z_barry_test2 IF FOUND. 

ASSIGN ('(Z_BARRY_TEST2)STR') to <fs>. 

IF <fs> IS ASSIGNED. 

  <fs> = 'BAI'. 

ENDIF. 

PERFORM out IN PROGRAM z_barry_test2 IF FOUND.

07在CALL FUNCTION前给Function的全局变量赋值:

PERFORM (space) IN PROGRAM saplztest_01 IF FOUND. 

ASSIGN ('(SAPLZTEST_01)STR') TO <fs>. 

IF <fs> IS ASSIGNED. 

  <fs> = ‘BARRY'. 

ENDIF. 

CALL FUNCTION 'ZTEST001'.

08判断数值类型变量是否有小数

IF frac( menge ) = 0. 

  WRITE '没有小数'. 

ELSE. 

  WRITE '有小数'. 

ENDIF.

09在程序开始运行后,SY-DATUM SY-UZEIT就不会再变了,除非有提交的动作(COMMIT、WAIT等)。

如果想获取实时的时间,可以用语句:

GET TIME.

这个执行完,SY-DATUM SY-UZEIT就会变成最新的值

10SM37 作业状态

'P'. 已计划

'S'. 已释放

'Y'. 就绪

'R'. 活动

'F'. 已完成

'A'. 已取消

'Z'. 已发布/已暂停

11Status一般对应快捷方式:

F3 后退

F15 退出

F12/ESC 取消

12SELECT SINGLE * FOR UPDATE 不能用在IN UPDATE TASK中

在IN UPDATE TAST里面,AUTHORITY-CHECK也是不好用的

13在第一次调用函数模块的时候,会把整个函数组放入内存,而且在程序执行的期间不会释放,这就导致全局变量会一直存在直到你去显式的改变它,所以需要特别注意全局变量的清空。

14如何在函数组第一次调用的时候设置断点呢?使用LOAD-OF-PROGRAM事件。

15精确到微秒的时间戳:

DATA:tsl TYPE timestampl,

tsstr TYPE string.

GET TIME STAMP FIELD tsl.

tsstr = |{ tsl TIMEZONE = 'UTC+8 ' }|.

WRITE tsstr.

16无列名的单列内表:

DATA: itab TYPE TABLE OF matnr WITH HEADER LINE. 

使用:READ TABLE itab WITH KEY table_line = ''.

17检查程序在哪些Job中用到: 表:V_OP,字段:PROGNAME

18三大代码样例集散地Tcode:ABAPDOCU、DWDM、BIBS

19Modern ABAP关于字符串的新语法:

str2 = substring_after( val = str sub = '.' occ = count( val = str sub = '.' ) ).

str = substring_before( val = '1111-2222-3333' sub = '-' occ = 2 ).

str = translate( val = translate( val = str from = |\t| to = '' ) from = |\r\n| to = '' ). 去掉制表符、回车换行

 

如果str最后一个有效字符是*,则删掉这个*,否则不删。

IF substring( val = str off = strlen( str ) - 1 len = 1 ) = '*'. 

  str = substring( val = str len = strlen( str ) - 1 ) . 

ENDIF.

更简洁的写法:str = shift_right( val = str sub = |*| ).

20Modern ABAP开始支持LOOP的Where条件动态:

LOOP AT itab WHERE (stt).

  WRITE itab.

ENDLOOP.

21使用FTP_R3_TO_SERVER时,如果文本内汉字上传后有乱码,把文本文件转换成FTP编码格式的二进制文件,然后FTP_R3_TO_SERVER用BOLB方式。

22用BAPI生成/修改PO/SO,然后紧接着使用BAPI_OUTB_DELIVERY_CREATE_STO/BAPI_OUTB_DELIVERY_CREATE_SLS来生成交货单,就会出现很多莫名其妙的错误。

原因是因为没有清空函数的全局变量,暂时的解决方案可以用DESTINATION 'NONE'。

或者另一个解决方案:

FIELD-SYMBOLS <fs>. 

ASSIGN ('(SAPLME03)GT_EKET_DOC[]') to <fs>. 

IF sy-subrc = 0. 

  CLEAR <fs>. 

ENDIF.

23根据PR找对应的PO,视图M_MEKKE 

24PSTYP、EPSTP的对应关系,表T163Y 

25使用BAPI_PO_CREATE1连续创建多个PO,DUMP,

问题出在程序:CL_PO_ITEM_HANDLE_MM==========CM00G,

Notes:0001518346 - RAISE_EXCEPTION when calling BAPI several times 

screen-required = 0. 非必输;

screen-required = 1. 必输;

screen-required = 2. 非必输但是在界面上做出必输的样子;

screen-required = 3. 你写错了 

哈希表的MODIFY: 

LOOP AT hs_tab. 

  MODIFY TABLE hs_tab . 

ENDLOOP.

25物料可以扩充的销售范围 

SELECT DISTINCT vkorg vtwku INTO TABLE it_tvta FROM tvta 

  WHERE NOT EXISTS ( SELECT * FROM mvke WHERE matnr = matnr AND vkorg = tvta~vkorg AND vtweg = tvta~vtwku ).

26设置外部断点调试,还需要TCODE:SRDEBUG

27RFC_READ_TABLE的一个Bug,解决方法是在函数的开头添加 CLEAR DATA.

28函数SAVE_LIST的致命缺陷:后台执行的时候只能保存最后一页

IT_XLIPS:更改后的所有行项目。

IT_YLIPS:有更改的行的旧值

29如果不想在COMMIT WORK后释放程序中的锁,可以 _scope = '1'

30交货单的发货过账日期:LIKP-WADAT_IST,如果VL09冲销,这个日期会清空

31RKE_TSTMP,跟日期的转换函数:RKE_TIMESTAMP_CONVERT_INPUT、RKE_TIMESTAMP_CONVERT_OUTPUT。

如果在Excel内转为日期:=A1/10000/3600/24 + DATE(1990,1,1)

32SAP 快捷键:

编辑器

    Ctrl+F 搜索

    Ctrl+G 搜索下一个(LIST也可以)

    Ctrl+I 增量搜索

    Ctrl+U 块大写

    Ctrl+L 块小写  

    Ctrl+, 块注释

    Ctrl+. 块取消注释

GUI

    Ctrl+/ 光标定位到Command Field

    Ctrl+Y 选择块

    Ctrl+G 搜索下一个

    Ctrl+N 新窗口 

ALV界面:

    按着Shift在空白处双击鼠标右键

33新版的SE38编辑器,按住Alt,然后鼠标竖向拉一下,就能变成列模式。

34Tcode:SRDEBUG,配合外部断点使用

35RFC_READ_TABLE的一个Bug,在函数的开头添加 CLEAR DATA. 

36交货单的拣配数量 VBFA-RFMNG,注意VBTYP_N和VBTYP_V的值。

37取PO项目Condition:KONV-KNUMV = EKKO-KNUMV KONV-KPOSN = EKPO-EBELP;KONV-KAPPL的值为 'M';KONV-KINAK标识此条条件类型是否活动。

38BAPI_PO_CHANGE或BAPI_PO_CREATE1,如果需要输入Category of Delivery Date(POSCHEDULE-DEL_DATCAT_EXT),注意是'D',而不是1(EKET-LPEIN)。对应关系在表TPRG。

另外,PSTYP EPSTP的对应关系在T163Y。bapimepoitem-item_cat = epstp;ekpo-pstyp = pstyp。

40交货单的发货过账日期:LIKP-WADAT_IST,如果VL09冲销,这个日期会清空。但是有时候由于未知的原因,即便是是冲销了这个也不会清空

41无列名的单列内表:

定义:DATA: itab TYPE TABLE OF matnr WITH HEADER LINE. 

需要列名的时候:READ TABLE itab WITH KEY table_line = ''. 

42检查程序在哪些Job中用到: 表:V_OP,字段:PROGNAME 

43SAP本身暂不支持QRCode,需要在外部程序获取,一般来说是在局域网内放一台生成QRCode的机器,SAP通过HTTP来获取。 

SAP内核版本大于等于7.21的就可以支持QRCODE了

 

 

44SE11里面对表激活、删除的LOG表:

DDPRH

DDPRS

 

 

45SAPGUI_PROGRESS_INDICATOR

能不用就尽量不用

尤其在LOOP里面

 

 

46str+m(n).

1、m、n、m+n都不可以大于str的定义长度

2、str+m:第m个字符之后的所有字符

   如果str = 'abcdefg',那么str+4 = 'efg'

3、str(m):前m个字符

   如果str = 'abcdefg',那么str(4) = 'abcd'

 

 

47CONTROLS:TABNAME TYPE TABLEVIEW USING SCREEN '0100' "定义TABLE CONTROL.

这个TABLEVIEW对应的结构为:SCXTAB_CONTROL.

还有:

TYPE-POOLS CXTAB.

TYPES: CXTAB_COLUMN type scxtab_column,

       CXTAB_CONTROL type scxtab_control,

       CXTAB_TABSTRIP type scxtab_tabstrip. 

48交货单VBFA后续凭证类型:

Q 拣配

R 发货过账

h 取消发货

i 对交货单收货/取消收货

M 发票

N 取消发票

49如何在第一次调用函数组内任一函数时设置断点(在TOP文件添加LOAD-OF-PROGRAM事件)

程序:LZTEST01TOP

FUNCTION-POOL ztest01.                      "MESSAGE-ID ..

LOAD-OF-PROGRAM.

  break baitianzhen .

 

 

50GOODSMVT_CODE you can below codes for respective transaction

01 - MB01

02 - MB31

03 - MB1A

04 - MB1B

05 - MB1C

06 - MB11

07 - MB04

 

51函数DATE_CHECK_PLAUSIBILITY/TIME_CHECK_PLAUSIBILITY可以用一检查日期/时间值是否合法

 

 

52触发TCODE:

CALL FUNCTION: 'CONTROL_INIT',

               'CONTROL_SETFUNCTIONCODE' EXPORTING fcode = '/I'," /NEX 

               'CONTROL_FLUSH'.

53两个日期所经历的月份:

months = ( d2+0(4) - d1+0(4) ) * 12 + d2+4(2) - d1+4(2) + 1.

 

54因为WAIT UP语句有提交数据库的作用,所以在增强里面是禁止使用WAIT UP语句的,可以如下:

  WAIT UP TO 1 SECOND.

改为:

  CALL FUNCTION 'ENQUE_SLEEP'

      EXPORTING

        seconds = 1

      EXCEPTIONS

        OTHERS  = 2.

另外这两个语句只支持整数,如果不是整数,则四舍五入。

 

55库存:

MMBE:MARD-LABST(Valuated stock with unrestricted use)

MB52:MARD-LABST

MB51:MSEG:ERFMG累加

MM03:MBEW-LBKUM (Total valuated stock)

MB5L:MBEW-SALK3 (Value of total valuated stock)

MC.9:S032-MBWBEST(Quantity of valuated stock)

     S032-WBWBEST(Value of valuated stock)

56GOS的附件放到表:SOFFCONT1

57SO的不完整日志放到表:VBUV

58Char类型的日期搜索帮助F4:

PARAMETERS cdate(10) MATCHCODE OBJECT bu_date_char.

59SD订单刷新状态程序:SDVBUK00

60更新导航索引,函数:WB_TREE_ACTUALIZE

61执行OS命令:

SE38:RSBDCOS0

62EPLACE ALL OCCURRENCES OF REGEX '[^x00-xff]' IN str WITH space.

去掉字符不在 x00到xFF的,比如汉字

63分析Oracle表:

程序:RSANAORA

语句: cl_sdb_ora_update_stats=>update_stats(

               i_tablnm      = 'ZCIS_T001L'  "表名

               i_signi       = 0

               i_histo       = ''

               i_cascade     = 0

               i_force       = 'X' ).

程序RSORATAD,分析索引的质量

 

 

 

 

64替换字符串中的特殊字符:

  maktx = translate( val = maktx from = |\r| to = '' ).  "0D 回车

  maktx = translate( val = maktx from = |\n| to = '' ).  "0A 换行

  maktx = translate( val = maktx from = |\t| to = '' ).  "09 制表符

 

 

65针对一会儿不动SAP就断开的情况:

DO .

  WAIT UP TO 10 SECONDS.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

    EXPORTING

      percentage = 0

      text       = '........'.

ENDDO.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值