FICO 三大报表运算维护表计算规则(表里维护行次的)
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通