ABAP开发总结

ABAP开发总结一 RANGE 使用注意事项 1 range 语句在 SQL 中一般用 IN 不用等于 2 EQ 等于 LE 小于等于 GE 大于等于 3 使用前清空表头和表体 CLEAR emp emp 单值 CLEARG ranges G ranges sign I

——————–一、RANGE使用注意事项:————————————-

1.range 语句在SQL 中一般用IN, 不用等于。
2.EQ(等于)/LE(小于等于)/GE(大于等于)
3. 使用前清空表头和表体。( CLEAR:emp,emp[])
*”单值
*CLEAR G_ranges[].
*G_ranges-sign = ‘I’.
*G_ranges-option = ‘EQ’.
*G_ranges-low = ‘AA’.
*APPEND G_ranges.

“区间
CLEAR g_ranges[].
g_ranges-sign = ‘I’.
g_ranges-option = ‘BT’.
g_ranges-low = ‘AA’.
g_ranges-high = ‘HH’.
APPEND g_ranges.

*选项介绍:
*1.SIGN  值为 I 和 E 。 I是包含, E是排除, 一般使用I。
*2.OPTION 如果HIGH 为空 ,为单值选择 。有 EQ、NE、GT、LE、LT等逻辑操作  对于*的  CP包含  NP是排除
*                  如果HIGH 不为空 为区间选择 有BT,NB可选
*3.LOW     低值
*4.HIGH    高值

————————二、有无HEADER LINE的内表的区别:————————————-
*对于有HEADER LINE的内表,可以通过填充HEADER LINE数据后或通过 外部Work Area 向内表存储空间中追加数据。
*对于没有HEADER LINE的内表,只能通过 外部Work Area来传递数据:

TABLES: employee.
 
TYPES: BEGIN OF emp,
    id  LIKE employee-id,
    name1   LIKE employee-name1,
    country LIKE employee-country,
       END OF emp.
 
* 有 HEADER LINE 的内表
DATA: emptab  TYPE STANDARD TABLE OF emp INITIAL SIZE 10 WITH HEADER LINE.
 
* 没有 HEADER LINE 的内表
DATA: emptab2 TYPE STANDARD TABLE OF emp INITIAL SIZE 10,        
 
* Work Area
      emptab_wa TYPE emp.                                                                          
 
SELECT * FROM employee.
 
    MOVE-CORRESPONDING employee TO emptab.
    APPEND emptab.
 
    MOVE-CORRESPONDING employee TO emptab_wa.
    APPEND emptab_wa TO emptab2.
 
ENDSELECT.

————————————三、FOR ALL ENTRIES IN 的用法:————————————-
SELECT F1 F2 .. Fn INTO IT_TAB(插入的子表) FROM MSEG 
  FOR ALL ENTRIES IN IT_TAB2(主表数据)
  WHERE Fi = IT_TAB2-Fi(主表条件)
    AND Fj = IT_TAB2-Fj(主表条件)

*多条数据的查询,避免了使用LOOP….AT.

1. IT_TAB2需要排序,并删除重复数据 

2. IT_TAB2数据两很大时,会降低效率 

3. 使用FOR ALL ENTRIES IN 时,from 的表要把主键都写在select后。
   如果主键没有全部加到WHERE条件后,FOR ALL ENTRIES IN 会自动删除重复行,造成数据丢失。
   INTO CORRESPONDING FIELDS OF TABLE 后的这个表中不含这字段就行了。

4. 在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT 的内表
 ,我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,
 例如:BSEG聚集表为例.
 
 
  

  DATA:  SUPPLIER_IN  TYPE ZMM_STRUC_SUPPLIER_01.[声明传入数据类型]
   
  DATA:  SUPPLIER_RETURN  TYPE ZMM_INT_SUPPLIER_RETURN.[声明传出数据类型]
 
  PERFORM FRM_DESERIALIZE USING   SUPPLIER_IN.[反序列化 将jason转换为OBJECT类型入参]
 ( /UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON   = REQUEST
                                 ASSOC_ARRAYS     = ABAP_TRUE
                                 ASSOC_ARRAYS_OPT = ABAP_TRUE
                                 PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
                                 CHANGING DATA    =  SUPPLIER_IN ).
 
 PERFORM FRM_GET_SUPPLIER_ASSESSMENT USING ZNUM   SUPPLIER_IN  CHANGING RETURN SUPPLIER_RETURN.[传入传出数据处理]
 
 PERFORM FRM_DESERIALIZE USING   SUPPLIER_IN.[序列化操作,object格式转换成jason格式]
 (  
  ASSIGN SUPPLIER_RETURN[] TO

.

 IF

IS ASSIGNED.

    RESPONSE = /UI2/CL_JSON=>SERIALIZE( DATA             =


                                        ASSOC_ARRAYS     = ABAP_TRUE
                                        ASSOC_ARRAYS_OPT = ABAP_TRUE
                                       ).
    RESPONSE = ‘{“RESPONSE”:’ && RESPONSE && ‘}’.
    UNASSIGN

.)



——————EXCEL 宏代码————————————-
Sub copy(rg As String)

‘ copy Sheet2选中行到Sheet1


    Sheets(“Sheet2”).Select
    Sheet2.Rows(“1:25”).Select
    Selection.copy
    Sheets(“Sheet1”).Select
    Sheet1.Range(rg).Select
    Sheet1.Paste
    ‘Selection.Insert Shift:=xlDown
End Sub


——————SAP删除数据表中的数据————————————-

方法一:ABAP语言中OPEN SQL 有从数据库中删除记录的语句。故可采用此方法来编写程序删除数据表中的记录。
此方法不够直接,存在风险,对有些不易取到的数据,可能不太有效。

方法二:使用事务码-SE16N;
输入自己要修改的表名,回车,然后输入事务码-&sap_edit来激活编辑状态。回车,点击运行,即可进行修改。
此方法好像不能修改主键,所以使用范围比较小。 

方法三:使用事务码-SE16;
使用事务码SE38打开程序LSETBF01,查找字符‘SHOW’设置断点。
使用事务码SE16打开要修改的数据表。输入事务码’/H‘ 激活调试模式,查出要删除的数据。点击查看按钮,
进入调试环境,程序停在CODE处,双击CODE 修改其值为’DELE’,然后点击运行进入下一屏幕,点击删除数据即可。
删除以后点下一条,可以删除其它选中的记录。
此方法,比较冒险,少用。

 
———————————————–  

 
 ABAP中加上前导零、去除前导零的function module

*加上p_in的前导零

  CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
    EXPORTING
      input  = p_in
    IMPORTING
      output = p_in.
 CONVERSION_EXIT_MATN1_INPUT

*去除p_out的前导零

  CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
    EXPORTING
      input  = p_out
    IMPORTING
     output = p_out.
 
   
*四舍五入法
   CALL FUNCTION ‘HR_NZ_ROUNDING_DECIMALS’
  EXPORTING
    VALUE_IN                 = L_DATA1
    CONV_DEC                 = 0      ” 设置保留几位小数
  IMPORTING
    VALUE_OUT                = L_DATA1
  EXCEPTIONS
    no_rounding_required     = 1
    decimals_greater_than_10 = 2
    rounding_error           = 3
    OTHERS                   = 4.
 
*ABAP 动态查询条件  select* from  table where().

REPORT demo_select_dynamic_conditions .
DATA: cond(72) TYPE c,
      itab LIKE TABLE OF cond.
PARAMETERS: city1(10) TYPE c, city2(10) TYPE c.
DATA wa TYPE spfli-cityfrom.
CONCATENATE ‘CITYFROM = ”’ city1 ”” INTO cond.
APPEND cond TO itab.
CONCATENATE ‘OR CITYFROM = ”’ city2 ”” INTO cond.
APPEND cond TO itab.
CONCATENATE ‘OR CITYFROM = ”’ ‘BERLIN’ ”” INTO cond.
APPEND cond TO itab.
LOOP AT itab INTO cond.
  WRITE cond.
ENDLOOP.
SKIP.
SELECT  cityfrom
  INTO  wa
  FROM  spfli
  WHERE (itab).
  WRITE / wa.
ENDSELECT.

 

//保护EXCEL 不被修改内容
  LS_OPTIONS-PROTECT_DOCUMENT = ”.

//   获取当前月份第一天.
 CONCATENATE sy-datum+0(6) ’01’ INTO g_first   
//   获取当前月份最后一天.
DATA: date TYPE vtbbewe-dvalut,
      flag TYPE trff_flg,
      days TYPE trff_type_n_2,
      g_first   TYPE  sy-datum.

CALL FUNCTION ‘FIMA_DATE_CREATE’
  EXPORTING
    i_date                  = ” “输入日期
    i_flg_end_of_month      = ‘ ‘
    i_years                 = 2       “两年后的日期. 即输入日期的年加2所得日期,可为负数,表示前两年
    i_months                = 1       “一个月后的日期.即输入日期的月加1所得日期,可为负数,表示前一个月
    i_days                  = 23      “23天后的日期。可为负数,表示23天前的日期
    i_calendar_days         = 10      “10天后的日历。同I_DAYS参数。
    i_set_last_day_of_month = ‘X’     “返回的日期为当前月份的最后一天
  IMPORTING
    e_date                  = date    “返回的日期为当前月份的最后一天
    e_flg_end_of_month      = flag    “如果输入参数I_SET_LAST_DAY_OF_MONTH设置’X’了,则返回值为’X’。
    e_days_of_i_date        = days.   “返回输入日期的i_calendar_days字段与I_DAYS字段的和。
WRITE : days, flag,date  .




































































































































































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198563.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:55
下一篇 2026年3月26日 下午2:56


相关推荐

  • ubuntu如何卸载docker_ubuntu卸载干净

    ubuntu如何卸载docker_ubuntu卸载干净Ubuntu卸载Docker方法卸载旧版本的方法:旧版本的docker名字叫docker,docker.io,或者docker-engine#删除docker命令acestang@acestang:~$sudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc#删除docker默认安装的文件acestang@acestang:~$sudorm-rf/var/lib/docker/#通过doc

    2022年10月21日
    7
  • FFM模型在点击率预估中的应用实践

    FFM模型在点击率预估中的应用实践这篇文章,将主要讲述FFM模型在CTR预估中的应用。

    2022年5月12日
    41
  • 【主席树】bzoj3932 [CQOI2015]任务查询系统

    【主席树】bzoj3932 [CQOI2015]任务查询系统

    2021年9月5日
    49
  • 二、核心业务矩阵:豆包营销全流程解决方案,适配云南企业需求

    二、核心业务矩阵:豆包营销全流程解决方案,适配云南企业需求

    2026年3月12日
    3
  • HttpClient详细解释

    HttpClient详细解释Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会

    2025年6月1日
    6
  • 【浏览器】浏览器缓存

    【浏览器】浏览器缓存一浏览器缓存机制浏览器在每次发生请求时 先在在浏览器缓存中查找该请求的结果和缓存标识 并且每次收到请求结果均会把请求结果和缓存标识保存在浏览器缓存中 浏览器缓存策略分类缓存策略的分类 强缓存 不会向服务器发送请求 直接从缓存中读取资源 协商缓存 强制缓存失效后 浏览器携带缓存标识向服务器发起请求 由服务器根据缓存标识决定是否使用缓存的过程缓存策略通过设置 HTTPHeader 来实现的 获取资源形式状态码发送请求到服务器相关设置字段强缓存从缓存取 200 f

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号