1+2+3
"内表整理科目 报表项目 汇总后计算公式 1+2+3 DATA: lv_str TYPE string, lv_str1 TYPE string, lt_num TYPE TABLE OF string, lt_sign TYPE TABLE OF string, lv_index TYPE CHAR4, lv_i TYPE i, lv_sum TYPE p DECIMALS 3. LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) . IF <fs_out>-zformula IS NOT INITIAL. lv_str = <fs_out>-zformula. lv_str1 = <fs_out>-zformula. REPLACE ALL OCCURRENCES OF '+' IN lv_str WITH '*'. REPLACE ALL OCCURRENCES OF '-' IN lv_str WITH '*'. SPLIT lv_str AT '*' INTO TABLE lt_num. "将数字放进内表 lt_num "替换数字 LOOP AT lt_num INTO DATA(ls_num). REPLACE ls_num WITH '*' INTO lv_str1. ENDLOOP. SPLIT lv_str1 AT '*' INTO TABLE lt_sign. "将符号放进内表 lt_sign DELETE lt_sign WHERE TABLE_LINE = ''. CLEAR: lv_sum , lv_i. LOOP AT lt_num INTO ls_num. lv_index = ls_num. READ TABLE gt_out INTO gs_out WITH KEY zrow = lv_index. IF sy-subrc = 0. IF lv_i = 0. lv_sum = gs_out-zamount. lv_i = 1. CONTINUE. ENDIF. READ TABLE lt_sign INTO DATA(ls_sign) INDEX lv_i. IF sy-subrc = 0 . IF ls_sign = '+'. lv_sum = lv_sum + gs_out-zamount. ELSE. lv_sum = lv_sum - gs_out-zamount. ENDIF. lv_i = lv_i + 1. ENDIF. ENDIF. ENDLOOP. <fs_out>-zamount = lv_sum. ENDIF. ENDLOOP.
1+2+3+
DATA: lv_str TYPE string, lv_str1 TYPE string, lt_num TYPE TABLE OF string, lt_sign TYPE TABLE OF string, lv_index TYPE CHAR4, lv_i TYPE i, lv_sum TYPE p DECIMALS 3. LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) . IF <fs_out>-zformula IS NOT INITIAL. lv_str = <fs_out>-zformula. lv_str1 = <fs_out>-zformula. REPLACE ALL OCCURRENCES OF '+' IN lv_str WITH '*'. REPLACE ALL OCCURRENCES OF '-' IN lv_str WITH '*'. SPLIT lv_str AT '*' INTO TABLE lt_num. "将数字放进内表 lt_num "替换数字 LOOP AT lt_num INTO DATA(ls_num). REPLACE ls_num WITH '*' INTO lv_str1. ENDLOOP. SPLIT lv_str1 AT '*' INTO TABLE lt_sign. "将符号放进内表 lt_sign DELETE lt_sign WHERE TABLE_LINE = ''. CLEAR: lv_sum , lv_i. LV_I = 1. "计算1+2+3+ 如果计算1+2+3 删除 LOOP AT lt_num INTO ls_num. lv_index = ls_num. READ TABLE gt_out INTO gs_out WITH KEY zrow = lv_index. IF sy-subrc = 0. * IF lv_i = 0. "计算1+2+3 * lv_sum = gs_out-zamount. * lv_i = 1. * CONTINUE. * ENDIF. READ TABLE lt_sign INTO DATA(ls_sign) INDEX lv_i. IF sy-subrc = 0 . IF ls_sign = '+'. lv_sum = lv_sum + gs_out-zamount. ELSE. lv_sum = lv_sum - gs_out-zamount. ENDIF. lv_i = lv_i + 1. ENDIF. ENDIF. ENDLOOP. <fs_out>-zamount = lv_sum. ENDIF. ENDLOOP.
标签:行次,sum,sign,lv,lt,num,TABLE,维护,FICO From: https://www.cnblogs.com/Anyohh233/p/17980162