——————–一、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 <FS>.
IF <FS> IS ASSIGNED.
RESPONSE = /UI2/CL_JSON=>SERIALIZE( DATA = <FS>
ASSOC_ARRAYS = ABAP_TRUE
ASSOC_ARRAYS_OPT = ABAP_TRUE
).
RESPONSE = ‘{“RESPONSE”:’ && RESPONSE && ‘}’.
UNASSIGN <FS>.)
——————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 = ‘20140101’ “输入日期
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 .
今天的文章ABAP开发总结_sap要放弃ABAP分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/70946.html