ABAP总结-常用语法
语法
SUBMIT
DATA: ls_data TYPE REF TO data,
lt_result TYPE TABLE OF zmm61result,
ls_result type zmm61result.
FIELD-SYMBOLS: <lt_data> TYPE table,
<l_data> TYPE data.
"屏蔽ALV GRID的显示
cl_salv_bs_runtime_info=>set(
display = ''
metadata = ''
data = 'X' ) .
SUBMIT zrmm0061
" VIA SELECTION-SCREEN "显示被调用的选择屏幕。如不使用该条目,选择屏幕过程(selection screen processing)将会在后台发生。
WITH s_matnr IN s_matnr
WITH s_werks IN s_werks
WITH s_bukrs IN s_bukrs
AND RETURN.
TRY .
cl_salv_bs_runtime_info=>get_data_ref( importing r_data = ls_data ) .
ASSIGN ls_data->* TO <lt_data> .
CATCH cx_salv_bs_sc_runtime_info .
MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E' .
ENDTRY .
cl_salv_bs_runtime_info=>clear_all( ) .
LOOP AT <lt_data> ASSIGNING <l_data> .
MOVE-CORRESPONDING <l_data> TO ls_result .
APPEND ls_result TO lt_result .
ENDLOOP .
设定DEBUG断点
IF sy-uname = 'XXX'.
BREAK-POINT.
ENDIF.
LOOP分组循环
LOOP AT lt_result ASSIGNING FIELD-SYMBOL(<fs_key_mit>)
GROUP BY ( werks = <fs_key_mit>-werks
matnr = <fs_key_mit>-matnr
kunnr = <fs_key_mit>-kunnr )
ASSIGNING FIELD-SYMBOL(<ft_mit>).
LOOP AT GROUP <ft_mit> ASSIGNING FIELD-SYMBOL(<fs_mit>).
ENDLOOP.
ENDLOOP.
LINE_EXISTS内表是否存在某值
line_exists( lt_t001k[ bukrs = '1100' ] )
删除内表重复数据
注意:要先排序。
SORT gt_matpr BY kalnr.
DELETE ADJACENT DUPLICATES FROM gt_matpr COMPARING kalnr.
在内表新增一行
APPEND INITIAL LINE TO gt_t13 ASSIGNING FIELD-SYMBOL(<fs_013>).
<fs_013> = VALUE #( BUKRS = 'XXX' PLANT = 'XXX' ).
<fs_013>-BUKRS = 'XXX'.
<fs_013>-PLANT = 'XXX'.
Range对象新增数据
DATA lt_compcode TYPE RANGE OF t001-bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = lv_bukrs ) TO lt_compcode.
WHEN COND
WHEN后面还可以使用OR、AND语法
LV_TYPE = COND #( WHEN lv_flag = '1' THEN '8'
WHEN lv_flag = '2' THEN '5' ELSE '4')
生成GUID
根据GUID所需位数选择接收参数。
CALL FUNCTION 'GUID_CREATE'
IMPORTING
* EV_GUID_16 =
ev_guid_22 = LV_GUID
* EV_GUID_32 =
.
将一个内表数据赋值到另一内表
按栏位名进行匹配赋值
MOVE-CORRESPONDING gt_t11[] TO lt_t11[].
按栏位顺序赋值,此方式推荐两个内表结构完全一致时使用
APPEND LINES OF gt_t11 to lt_t11.
字符串拼接
使用&&加‘|’方式
l_cond = |P~LOSFX = 'X' AND P~KALKA = 'Z1' AND |
&& |K~KALKA = 'Z1' AND FEH_STA = 'FR' |.
使用CONCATENATE
CONCATENATE gv_cond ' and caufv~auart IN @p_auart ' INTO gv_cond.
最简单的ALV开发
FORM form_alv_display .
DATA: it_fields TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo.
ls_layout-cwidth_opt = 'X'.
PERFORM set_catalog CHANGING it_fields.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = ls_layout
it_fieldcat_lvc = it_fields
TABLES
t_outtab = gt_usmm[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
FORM set_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA ls_fieldcat TYPE lvc_s_fcat.
DEFINE add_field.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = &1.
ls_fieldcat-coltext = &2.
APPEND ls_fieldcat TO pt_fieldcat.
END-OF-DEFINITION.
add_field 'APP' 'APP.' .
add_field 'APP_NAME' 'APP. Name' .
add_field 'UNIT' 'Unit' .
add_field 'UNIT_NAME' 'Unit Name' .
add_field 'DATE_FROM' 'FROM' .
add_field 'DATE_TO' 'TO' .
add_field 'INSTANCE_COUNT' 'Instance Count' .
add_field 'MULTIPLIER' 'Multiplier' .
add_field 'RESULT' 'Result' .
ENDFORM.
添加/删除前导零
添加前导零
lv_aufnr = |{ '001234567890' ALPHA = IN WIDTH = 12 }|.
删除前导零
lv_aufnr2 = |{ '001234567890' ALPHA = OUT WIDTH = 10 }|.
快速Show内表
cl_demo_output=>display( 内表 ).
去除前后空格
CONDENSE LV_STR NO-GAPS.
快速对比两个内表差异
传入的两个内表必须结构一致,key_length是作为key栏位的长度加总,比如这里我用werks,lgort,matnr三个栏位作为key值,那他们的总长度为48,所以key_length就传48即可,if_sorted表示传入的内表是否有按照key值排序,排序过的内表比对更快。
lt_del产出的是gt_mard_data内表里有但是gt_data内表里没有的数据
lt_add产出的是gt_mard_data内表里没有但是gt_data内表里有的数据
lt_mod产出的是两个内表都有的,但是除key值外其他栏位不一致的数据
DATA: lt_add TYPE TABLE OF ty_data,
lt_del TYPE TABLE OF ty_data,
lt_mod TYPE TABLE OF ty_data,
lt_nochg TYPE TABLE OF ty_data.
CALL FUNCTION 'CTVB_COMPARE_TABLES'
EXPORTING
table_old = gt_mard_data
table_new = gt_data
key_length = '48' "werks+lgort+matnr key值长度48
if_sorted = 'X'
IMPORTING
table_del = lt_del
table_add = lt_add
table_mod = lt_mod
* no_changes = lt_nochg
.