首页 > 凯发新闻中心 > 公司新闻

凯发·k8(国际) - 官方网站·一触即发|ABAP/TIPS - 动态程序/动态公式示例

发布时间:2025-02-22 10:33:14    次浏览

下面这段代码允许用户从前台输入一个公式,如A=B+C,同时通过表的方式指定每个变量的值。稍加改动,简直就可以替代SAP的条件表技术了。1*---------------------------------------------------------------------*2 * Report : zdyncode3 * Tcode : zdyncode4 *---------------------------------------------------------------------*5 * Date Created : 2008/06/066 * Created By : 邓明辉7 * Deion : 动态公式测试8 *---------------------------------------------------------------------*9 * Modification :10 * Date Modified Modified By Deion11 *---------------------------------------------------------------------*1213 REPORT zdyncode NO STANDARD PAGE HEADING.1415 DATA : str(10) TYPE c,16 confirm_flag TYPE c.1718 DATA: code TYPE TABLE OF rssource-line,19 prog(8) TYPE c, msg(120) TYPE c, lin(3) TYPE c,20 wrd(10) TYPE c, off(3) TYPE c.2122 DATA: cnt TYPE i,23 ofs TYPE i,24 len TYPE i.2526 PARAMETERS: istr LIKE (str). ' Formula input by user2728 START-OF-SELECTION.2930 * 1. get formula with par.31 istr = 'A + B'. ' Hardcode formula. 32 WRITE: /2 istr. ' Sample formula: A + B3334 * 2. replace par for formula.35 REPLACE ALL OCCURRENCES OF 'A' IN:36 istr WITH '20'37 REPLACEMENT COUNT cnt38 REPLACEMENT OFFSET ofs39 REPLACEMENT LENGTH len.40 REPLACE ALL OCCURRENCES OF 'B' IN:41 istr WITH '19820200'42 REPLACEMENT COUNT cnt43 REPLACEMENT OFFSET ofs44 REPLACEMENT LENGTH len.4546 * 3. real formula.47 WRITE: /2 istr. ' A + B4849 * 4. make dynamic subroutine.50 APPEND 'PROGRAM SUBPOOL.' TO code.51 APPEND 'FORM DYN1.' TO code.52 APPEND 'DATA: reslt TYPE i.' TO code.53 APPEND ' reslt = ' TO code.54 APPEND istr TO code.55 APPEND ' .' TO code.56 APPEND 'WRITE / reslt.' TO code.57 APPEND 'ENDFORM.' TO code.5859 * 5. generate subroutine.60 GENERATE SUBROUTINE POOL code NAME prog61 MESSAGE msg62 LINE lin63 WORD wrd64 OFFSET off.65 IF sy-subrc 0.66 WRITE: / 'Error during generation in line', lin,67 / msg,68 / 'Word:', wrd, 'at offset', off.69 ELSE.70 WRITE: / 'The name of the subroutine pool is', prog.71 ENDIF.7273 * 6. call subroutine.74 PERFORM dyn1 IN PROGRAM (prog).