声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4265173.html

10.1.     让READ TABLE...WITH KEY可使用OR条件或其他非“=”操作符

READ TABLE...WITH KEY... 后面不能接OR条件操作符,也不能使用其他非等于的比较操作符,因原是该语句即使在查询出多条时也只取第一条,所以限制了 WITH KEY 后面条件使用。下面是错误的语法:

READ TABLE it_tab WITH KEY k1 = 'C' OR k2 = 'C'.

可以使用下面方式代替:

LOOP AT il_item_status WHERE k1 = 'C' OR k2 = 'C'.
  ...
  EXIT.
ENDLOOP.

10.2.     SELECT SINGLE ... WHERE...无法排序问题

SELECT SINGLE ... WHERE ...

使用SINGLE是表示根据表的关键字来查询,这样才能确保只有一条数据,所以当使用SINGLE时,语法上不能再使用ORDER BY语句(因为没有必要了),如果查询时不是根据关键字来查询,且查询时先排序再取一条时,我们只能使用另一种语法:

SELECT* FROM  tj02t INTO CORRESPONDING FIELDS OF TABLEgt_result UP TO 1 ROWS 

WHERE SPRAS = 'E' ORDER BY ISTAT.

如果是取某个最大值或最小值,则可以使用聚合函数更简洁:

SELECT MIN( edatu ) INTO (g_tabcon_mps_wa-edatu) FROM vbep
      WHERE vbeln = ztab_mps-vbeln AND posnr = ztab_mps-posnr.

10.3.     当心Where后的条件内表为空时

在Select、If、Delete 内表、read、look at内表语句中的Where条件中,如果使用的Range是一个空的条件内表,则  xx IN range 恒为真,那么 xx NOT IN range 则恒为假

注:不会像FOR ALL ENTRIES那样,忽略其他的条件表达式,其他条件还是起作用

10.4.     快速查找SO所对应的交货单DN及PO

快速查找SO(VBAP)所对应的DN(LIPS):虽然可以通过vbap-vbeln = lips-vgbel AND vbap-posnr = lips-vgpos来关联查找,但LIPS-VGBEL、LIPS-VGPOS非主键,查找起来非常慢(但根据DN来查找所的SO是很快的,因为此时为主键查找)但可以通过VBFA单据流表来查找DN,这样会非常快,因为这是根据主键来查找的:

vbfa~vbelv = vbap-vbeln AND  vbfa~posnv = vbap-posnr AND vbfa~vbtyp_v ='C' AND vbfa~vbtyp_n = 'J'

另外,根据SO查找PO时,可以根据EKKN-VBELN= VBAP-VBELN AND EKKN-VBELP=VBAP-POSNR到SO与PO中间表EKKN里去找,但查找条件为非主键也非索引,所以找起来时很慢,可以通过VBFA单据流表进行查找,因为VBFA在vbeln、posnn 字段上创建了索引(虽然查询时WHERE从句条件字段不是按主键字段顺序——使用的是后半部分主键,所以用不到主键索引,但是是按非主键索引字段顺序书写,所以还是可以用到索引):vbfa~vbeln = vbap-vbeln AND  vbfa~posnn = vbap-posnr AND vbfa~vbtyp_v ='V' AND vbfa~vbtyp_n = 'C'

10.5.     X类型的C类型视图

"江 <--> 6C5F
"正 <--> 6B63
*DATA: x(4) TYPE x VALUE '6C5F'.
DATA: x(2) TYPE x VALUE '6C5F'.
FIELD-SYMBOLS: <c> TYPE c.
"有时将X类型分配给C类型时会出错(长度需要是4的倍数,所以定义成4的倍数
"即可解决这个问题,但有时定义的长度只能是某个特定数,所以此时只能使用后面这种方式)
"编译时报错误:The length of "X" in bytes must be a multiple of the size of
"a Unicode character, regardless of the size of the Unicode character.
*ASSIGN x to <c> CASTING.

"只能先定义一个C类型变量,再将这个C类型变量分配给X类型字段符号,这样就可
"以随便在x类型之间捣腾了,但此时C变量不是X变量的真正视图了(经过了拷贝)
DATA: c(1) .
FIELD-SYMBOLS: <x> TYPE x.
ASSIGN c to <x> CASTING.
<x> = x.
"江 6C5F注:如果输出的是乱码,则是字节序的问题,需写成5F6C(如Windows操作系统中)
WRITE: /(2) c, <x>.
"正 6B63注:如果输出的是乱码,则是字节序的问题,需写成636B(如Windows操作系统中)
x = '6B63'.
<x> = x.
WRITE: /(2) c, <x>.

10.6.     字符串连接:&& 替代 CONCATENATE

有如将整型(I)与一个字符串(String)进行连接,此时不能直接使用CONCATENATE进行连接,因为CONCATENATE 操作的是字符类型,所以需要将整型转换为字符型后才能使用CONCATENATE 进行连接,但这里需要注意的,当正整型变量转换为字符类型时,符号位会转换为空格,这时使用CONCATENATE 接连得到的字符串可能会多出一个空格;当将整型变量与字符串进行连接时,最好使用 && 操作符,除了直接能连接外,还不会出现多余空格的问题:

DATA: i TYPE i VALUE '10'.
DATA: str TYPE string VALUE 'string'.
DATA: tmp TYPE string.
str = i && str.
WRITE: / str.
tmp = i.
CONCATENATE tmp str INTO str.
WRITE: / str.

10.7.     Variant变式中动态日期

报表程序的选择屏幕中,输出条件后可以点击保存按钮,会弹出创建变式的屏幕,如果条件中有日期字段,日期字段可以随着时间变化,日期字段的值也可以动态的变化,如对于每天都要跑的Job报表很有用,每天查询当天。当然也可以通过报表程序的INIT事件里动态获取当前日期,但可能需要修改程序

除用在中Job外,变式还可以用在Tcode中

[SAP ABAP开发技术总结]几个小技巧的更多相关文章

  1. [SAP ABAP开发技术总结]几个小问题

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. ABAP开发顾问必备:SAP ABAP开发技术总结

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. [SAP ABAP开发技术总结]OPEN SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. [SAP ABAP开发技术总结]内表操作

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. ABAP开发顾问必备:SAP ABAP开发技术总结[转载]

    转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...

  6. [SAP ABAP开发技术总结]ABAP程序之间数据共享与传递

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. [SAP ABAP开发技术总结]字符串处理函数、正则表达式

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. [SAP ABAP开发技术总结]ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. [SAP ABAP开发技术总结]数据输入输出转换、小数位/单位/货币格式化

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. WCF入门教程:WCF基础知识问与答(转)

    学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...

  2. 【转】ubuntu64,ndk-r9 编译 ffmpeg 2.1.1的config文件

    #!/bin/bash NDK_ROOT=/home/wjh/fox/android-ndk-r9c/ PREBUILT=${NDK_ROOT}toolchains/arm-linux-android ...

  3. phabricator

    (1)安装./bitnami-phabricator-20160523-0-linux-x64-installer.run (2)中文phabricator-zh_CN.tar解压缩到/opt/pha ...

  4. ubuntu apache开启重写模块

    http://www.iblue.cc/2011/09/ubuntu-apache%E5%BC%80%E5%90%AF%E9%87%8D%E5%86%99%E6%A8%A1%E5%9D%97/ Ubu ...

  5. 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】

    转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...

  6. WebService工作原理

    1.WebService工作原理-SOAP 当客户端调用一个WebService的方法时,首先将方法名称和需要传递的参数包装成XML,也就是SOAP包,通过HTTP协议传递到服务器端,然后服务器端解析 ...

  7. java中+的使用

    在java中+可以做为连接符和运算符两种使用方法 例如: 代码: int X=100; int Y=200; System.out.println("X+Y="  +  (X +  ...

  8. HDU 4709:Herding

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  9. 从hadoop框架与MapReduce模式中谈海量数据处理

    http://blog.csdn.net/wind19/article/details/7716326 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显 ...

  10. noi 2971 抓住那头牛

    2971:抓住那头牛 查看 提交 统计 提问 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N ...