如下示例代码:
FUNCTION z_pbms_outbound_budget.
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(ZRETURN) TYPE CHAR1
*" VALUE(ZMESSAGE) TYPE CHAR255
*" TABLES
*" ZBUDGET STRUCTURE ZBUDGET
*"----------------------------------------------------------------------
*PBMS调用该接口,传入订单号,SAP查询并返回该订单的预算余额。
TABLES: zmmlog06.
TYPES: BEGIN OF ty_line,
line(500),
END OF ty_line,
BEGIN OF ty_ktext,
ktext(40),
END OF ty_ktext.
DATA: rspar_tab TYPE TABLE OF rsparams,
rspar_line LIKE LINE OF rspar_tab,
range_tab LIKE RANGE OF aufk-aufnr,
range_line LIKE LINE OF range_tab.
DATA: lt_list TYPE TABLE OF abaplist,
lw_list TYPE abaplist,
lt_conl TYPE STANDARD TABLE OF ty_line,
lw_conl TYPE ty_line.
DATA: lt_out TYPE STANDARD TABLE OF ty_ktext,
lw_out TYPE ty_ktext,
lv_ktext(40),
lv_tabix TYPE sy-tabix.
* upd by sherry at 20180212 start *
DATA:lw_usr01 TYPE usr01.
DATA:lv_ysje TYPE string, "预算金额(数值)
lv_sjsh TYPE string, "实际收货(数值)
lv_int1 TYPE sy-tabix, "预算金额(列数)
lv_int2 TYPE sy-tabix. "实际收货(列数)
"获取用户数值显示格式
SELECT SINGLE * FROM usr01 INTO lw_usr01 WHERE bname = sy-uname.
* upd by sherry at 20180212 end *
*-----------------------------------------------------------
*输入检查
IF zbudget[] IS INITIAL.
zreturn = 'E'.
zmessage ='订单号必须传入.'.
EXIT.
ELSE.
LOOP AT zbudget.
* IF zbudget-kokrs IS INITIAL OR zbudget-aufnr IS INITIAL.
IF zbudget-aufnr IS INITIAL.
zreturn = 'E'.
zmessage ='订单号必须传入.'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT zbudget.
IF sy-tabix > 1.
zreturn = 'E'.
zmessage ='单次调用仅支持传入1个订单号.'.
EXIT.
ENDIF.
*如果输入的查询日期=空,自动填入当前日期到查询日期。
IF zbudget-erdat IS INITIAL.
zbudget-erdat = sy-datum.
MODIFY zbudget INDEX sy-tabix.
ENDIF.
* Jiang Yu
SELECT SINGLE kokrs INTO zbudget-kokrs FROM coas WHERE aufnr = zbudget-aufnr.
IF sy-subrc = 0.
MODIFY zbudget INDEX sy-tabix.
ELSE.
zreturn = 'E'.
zmessage ='订单号错误.'.
"EXIT.
* Jiang Yu End
ENDIF.
ENDLOOP.
CHECK sy-subrc = 0.
READ TABLE zbudget INDEX 1.
range_line-sign = 'I'.
range_line-option = 'EQ'.
range_line-low = zbudget-aufnr.
APPEND range_line TO range_tab.
SUBMIT zfir20 WITH p_kokrs = zbudget-kokrs "成本控制范围
WITH p_gjahr = zbudget-erdat+0(4) "年份
WITH s_aufnr IN range_tab "订单号
EXPORTING LIST TO MEMORY
AND RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = lt_list
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'LIST_TO_ASCI'
* EXPORTING
* LIST_INDEX = -1
* WITH_LINE_BREAK = ' '
* IMPORTING
* LIST_STRING_ASCII =
* LIST_DYN_ASCII =
TABLES
listasci = lt_conl
listobject = lt_list
EXCEPTIONS
empty_list = 1
list_index_invalid = 2
OTHERS = 3 .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_conl INTO lw_conl.
* IF sy-tabix <> 4.
* CONTINUE.
* ENDIF.
IF lw_conl-line CS '|'.
SPLIT lw_conl-line AT '|' INTO TABLE lt_out IN CHARACTER MODE.
CLEAR lw_out.
LOOP AT lt_out INTO lw_out.
CONDENSE lw_out-ktext NO-GAPS.
IF lw_out-ktext = zbudget-aufnr.
EXIT.
ENDIF.
ENDLOOP.
IF lw_out-ktext <> zbudget-aufnr..
CONTINUE.
ENDIF.
IF zbudget-erdat+4(2) <= 06.
lv_ktext = '预算差(上期)'.
ELSE.
lv_ktext = '预算差(下期)'.
ENDIF.
* LOOP AT lt_out INTO lw_out WHERE ktext CS lv_ktext.
* lv_tabix = sy-tabix.
* EXIT.
* ENDLOOP.
* IF sy-subrc NE 0.
* upd by sherry at 20180212 start *
CASE lv_ktext.
WHEN '预算差(上期)'.
lv_int1 = 4. "预算金额上期行数
lv_int2 = 7. "实际收货上期行数
WHEN '预算差(下期)'.
lv_int1 = 9. "预算金额下期行数
lv_int2 = 12. "实际收货下期行数
ENDCASE.
"预算金额
CLEAR:lw_out.
READ TABLE lt_out INTO lw_out INDEX lv_int1.
IF sy-subrc = 0.
lv_ysje = lw_out-ktext.
ENDIF.
"实际收货
CLEAR:lw_out.
READ TABLE lt_out INTO lw_out INDEX lv_int2.
IF sy-subrc = 0.
lv_sjsh = lw_out-ktext.
ENDIF.
"根据用户数值显示格式编辑数值
CASE lw_usr01-dcpfm.
WHEN 'X'. "小数点是句号
REPLACE ALL OCCURRENCES OF ',' IN lv_ysje WITH space IN CHARACTER MODE.
CONDENSE lv_ysje NO-GAPS.
REPLACE ALL OCCURRENCES OF ',' IN lv_sjsh WITH space IN CHARACTER MODE.
CONDENSE lv_sjsh NO-GAPS.
WHEN 'Y'.
WHEN OTHERS. "小数点是逗号
REPLACE ALL OCCURRENCES OF '.' IN lv_ysje WITH space IN CHARACTER MODE.
CONDENSE lv_ysje NO-GAPS.
REPLACE ALL OCCURRENCES OF '.' IN lv_sjsh WITH space IN CHARACTER MODE.
CONDENSE lv_sjsh NO-GAPS.
REPLACE ALL OCCURRENCES OF ',' IN lv_ysje WITH '.' IN CHARACTER MODE.
REPLACE ALL OCCURRENCES OF ',' IN lv_sjsh WITH '.' IN CHARACTER MODE.
ENDCASE.
zreturn = 'S'.
zmessage = '预算余额取得成功'.
zmmlog06-datum = sy-datum.
zmmlog06-uzeit = sy-uzeit.
zmmlog06-kokrs = zbudget-kokrs.
zmmlog06-aufnr = zbudget-aufnr.
zmmlog06-erdat = zbudget-erdat.
zmmlog06-wkgxxx = lv_ysje - lv_sjsh.
zmmlog06-zreturn = zreturn.
zmmlog06-zmessage = zmessage.
MODIFY zmmlog06.
zbudget-wkgxxx = zmmlog06-wkgxxx.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = zbudget-wkgxxx.
MODIFY zbudget INDEX 1.
* lv_tabix = 8.
* CLEAR: lw_out.
* READ TABLE lt_out INTO lw_out INDEX lv_tabix.
* IF sy-subrc = 0.
* CLEAR zmmlog06.
* REPLACE ALL OCCURRENCES OF ',' IN lw_out-ktext WITH space IN CHARACTER MODE.
* CONDENSE lw_out-ktext NO-GAPS.
* zreturn = 'S'.
* zmessage = '预算余额取得成功'.
* zmmlog06-datum = sy-datum.
* zmmlog06-uzeit = sy-uzeit.
* zmmlog06-kokrs = zbudget-kokrs.
* zmmlog06-aufnr = zbudget-aufnr.
* zmmlog06-erdat = zbudget-erdat.
* zmmlog06-wkgxxx = lw_out-ktext.
* zmmlog06-zreturn = zreturn.
* zmmlog06-zmessage = zmessage.
* MODIFY zmmlog06.
* zbudget-wkgxxx = lw_out-ktext.
* CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
* CHANGING
* value = zbudget-wkgxxx.
* MODIFY zbudget INDEX 1.
* MODIFY zbudget. "jiang yu
* ENDIF.
* upd by sherry at 20180212 end *
* ENDIF.
ENDIF.
ENDLOOP.
READ TABLE zbudget INDEX 1.
IF lt_conl[] IS INITIAL.
CLEAR zmmlog06.
zreturn = 'W'.
zmessage = '预算余额未取得,请检查传入条件'.
zmmlog06-datum = sy-datum.
zmmlog06-uzeit = sy-uzeit.
zmmlog06-kokrs = zbudget-kokrs.
zmmlog06-aufnr = zbudget-aufnr.
zmmlog06-erdat = zbudget-erdat.
zmmlog06-zreturn = zreturn.
zmmlog06-zmessage = zmessage.
MODIFY zmmlog06.
ENDIF.
ENDFUNCTION.