ABAP 开发场景与语法备忘(刘欣)
---------UUID、用户名称、日期、时间写入表---------
<gs300>-GUID = cl_uuid_factory=>create_system_uuid( )->create_uuid_c32( ).
<gs300>-ZCNAME = SY-UNAME.
<gs300>-ZCDATE = SY-DATUM.
<gs300>-ZCTIME = SY-UZEIT.
<gs300>-STATUS = 'S'.
<gs300>-ICON_LIGHT = icon_green_light .
<gs300>-MESSAGE = '新建数据完成' .
---------增加前导0---------
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = <gs180>-MATNR
IMPORTING
output = gs_89b-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <gs180>-LIFNR
IMPORTING
output = gs_89b-LIFNR.
---------报表开始,选择屏幕的代码---------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 .
PARAMETERS: p_putin RADIOBUTTON GROUP rg1 DEFAULT 'X' USER-COMMAND uc01,
p_cx RADIOBUTTON GROUP rg1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETER P_PATH1 LIKE RLGRAP-FILENAME MODIF ID M02.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
SELECT-OPTIONS:s_MATNR FOR marc-MATNR MODIF ID M03,
s_LIFNR FOR ZTMM0089B-LIFNR MODIF ID M03, "供应商
s_werks FOR marc-werks MODIF ID M03.
SELECTION-SCREEN END OF BLOCK b3.
---------ALV中增加搜索帮助---------
找到ALV的字段参数 lvc_t_fcat 类型,更新ref_table、ref_field字段,让其关联到有数据的表。
LOOP AT gt_fcat ASSIGNING <fs_fcat>.
IF <fs_fcat>-fieldname EQ 'KTGRM'.
<fs_fcat>-ref_table = 'TVKMT'.
<fs_fcat>-ref_field = 'KTGRM'.
ENDIF.
ENDLOOP.
---------在循环中退出---------
CONTINUE:
结束当前循环进行下一次循环
CHECK:
判断条件,不符合时结束当前循环进入下一次循环
EXIT:
结束整个循环,继续向下运行
RETURN:
退出当前的程序块
------------分类汇总处理-------------
(1/2)得到按主键去重的小表:
sort Gt_head_little by ORDERID .
DELETE ADJACENT DUPLICATES FROM Gt_head_little. "小表去重
(2/2)按小表主键每一行,每次取大表的多条数据:
LOOP AT Gt_head INTO DATA(gs_line) WHERE ORDERID = <gs100>-ORDERID.
MOVE-CORRESPONDING gs_line TO gs_temp.
APPEND gs_temp to gt_temp.
ENDLOOP.
-----------分条数下发数据的接口------------
"下面代码,分批发送
DATA:
lt_esb_com TYPE zsca_esb_com_tab,
lt_response TYPE STANDARD TABLE OF zsca_esb_return_common,
lt_out TYPE STANDARD TABLE OF zspp_pr2dfsk,
gv_message TYPE string, "#EC NEEDED
lv_lines TYPE char10,
lv_rfcdest TYPE rfcdest,
ls_rfc TYPE ZSPP_PR2DFSK,
p_rows TYPE i VALUE 200.
DATA lv_indicator_line TYPE I VALUE 0.
lv_lines = lines( gt_rfc ).
LOOP AT gt_rfc into ls_rfc.
APPEND ls_rfc TO lt_out.
lv_indicator_line = lv_indicator_line + 1.
IF ( sy-tabix MOD p_rows ) EQ 0. "满足200行,todo
CALL FUNCTION 'ZSAP_PP_JKSCM_PR_OUT' DESTINATION lv_rfcdest
TABLES
tt_esb_com = lt_esb_com
et_response = lt_response
et_data = lt_out
EXCEPTIONS
system_failure = 1
communication_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e038 WITH sy-subrc INTO gv_message.
ELSE.
MESSAGE s000 WITH '已经发送条数:' && lv_indicator_line INTO gv_message .
ENDIF.
"进度条提示
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_indicator_line / lv_lines * 100 " 注意这里sy-tabix早已经改变,所以只有用自己的计数器
text = '已经发送条数:' && lv_indicator_line . "提示文本
WRITE:/ '已经发送条数:' && lv_indicator_line .
REFRESH: lt_out,lt_out[],lt_esb_com,lt_esb_com[].
ENDIF.
"完成LOOP前,不够整发的数据会积累到lt_out
ENDLOOP.
"完成LOOP后,把剩下的数据发一次。 感觉函数出现两次,主要是原来代码加日志太多了,只能这样了
IF lt_out IS NOT INITIAL.
lv_lines = lines( lt_out ).
CALL FUNCTION 'ZSAP_PP_JKSCM_PR_OUT' DESTINATION lv_rfcdest
TABLES
tt_esb_com = lt_esb_com
et_response = lt_response
et_data = lt_out
EXCEPTIONS
system_failure = 1
communication_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e038 WITH sy-subrc INTO gv_message.
ELSE.
MESSAGE s000 WITH '最后发送条数:' lv_lines INTO gv_message.
ENDIF.
WRITE: / '最后发送条数:' && lv_lines.
REFRESH: lt_out,lt_out[],lt_esb_com,lt_esb_com[].
ENDIF.
REFRESH: GT_RFC, GT_RFC[].
post SAP-Garson
原文链接:https://blog.csdn.net/ot512csdn/article/details/127613367文章来自于网络,如果侵犯了您的权益,请联系站长删除!