ABAP計算自動義公式

TolyHuang發表於2007-05-12

原理是動態建立一個ABAP程式處理

以下程式碼是根據自動的字串公式自動計算出結果,如輸入公式字串:12 + 5 * ( 5 -2 ), 計算出的結果為27, 這樣就不用用固定程式碼了, 可以根據公式動態計算結果......不錯吧

不過需注意的有, 字串公式中不能出現小數點, 如3.5 *2 等, 要改為35 / 10 * 2, 還有一點就是各引數及運算子之單要有一個空格, 要懂得ABAP語法哦......

report ZABAP_Test_01.

parameters: p_code1(100) type c.
data t_source_tab(72) occurs 0 with header line.
data g_program_name like sy-repid.
data g_message(128).
data g_line_no type i.
data var type p decimals 2.

at selection-screen.
perform create_dynamic_program.

start-of-selection.
perform cal_formula in program (g_program_name) changing var .

write:/ p_code1 no-gap,'=' no-gap,var.


*&---------------------------------------------------------------------*
*& Form create_dynamic_program
*&---------------------------------------------------------------------*
* 建立動態ABAP程式
*----------------------------------------------------------------------*
form create_dynamic_program.
data t_abap(100) occurs 0 with header line.

refresh t_source_tab.
append 'REPORT' to t_source_tab.
append sy-repid to t_source_tab.
append '.' to t_source_tab.
append 'FORM cal_formula changing var type p.' to t_source_tab.

append 'var =' to t_source_tab.
append p_code1 to t_source_tab.
append '.' to t_source_tab.
append 'ENDFORM.' to t_source_tab.

generate subroutine pool t_source_tab name g_program_name message g_message line g_line_no.
if sy-subrc <> 0.
message g_message type 'E'.
endif.
endform. "create_dynamic_program

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9437124/viewspace-914782/,如需轉載,請註明出處,否則將追究法律責任。

相關文章