配置公式计算示例

功能介绍:

用户会配置如下的表,以指定公式:



实现下列功能:

1、单科目:筛选出指定科目的金额并合计

2、区间科目:筛选出指定区间科目的金额并合计

3、计算公式:按照ZCALTEXT中指定的公式去计算,指定的计算项是ZNUM(行号)

这个表的定义如下:


这里是通过一个rfc函数来实现的,函数的代码如下:

FUNCTION zfm_fi_re02.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IM_RBUKRS) TYPE  BUKRS OPTIONAL
*"     VALUE(IM_RYEAR) TYPE  GJAHR OPTIONAL
*"     VALUE(IM_PRCTR) TYPE  PRCTR OPTIONAL
*"  TABLES
*"      EX_T_002SUM STRUCTURE  ZSFI_002
*"      EX_T_002DETAIL STRUCTURE  ZSFI_002
*"----------------------------------------------------------------------
  TYPES:
  BEGIN OF tp_faglflext,
    rbukrs TYPE faglflext-rbukrs,   "公司代码
    ryear  TYPE faglflext-ryear,    "年度
    prctr  TYPE faglflext-prctr,    "利润中心
    rfarea TYPE faglflext-rfarea,   "功能范围
    racct  TYPE faglflext-racct,    "科目
    hsl01  TYPE faglflext-hsl01,    "1月
    hsl02  TYPE faglflext-hsl02,    "2月
    hsl03  TYPE faglflext-hsl03,    "3月
    hsl04  TYPE faglflext-hsl04,    "4月
    hsl05  TYPE faglflext-hsl05,    "5月
    hsl06  TYPE faglflext-hsl06,    "6月
    hsl07  TYPE faglflext-hsl07,    "7月
    hsl08  TYPE faglflext-hsl08,    "8月
    hsl09  TYPE faglflext-hsl09,    "9月
    hsl10  TYPE faglflext-hsl10,    "10月
    hsl11  TYPE faglflext-hsl11,    "11月
    hsl12  TYPE faglflext-hsl12,    "12月
    END OF tp_faglflext.

  DATA:
        s_rbukrs TYPE RANGE OF faglflext-rbukrs WITH HEADER LINE,
        s_ryear  TYPE RANGE OF faglflext-ryear  WITH HEADER LINE,
        s_prctr  TYPE RANGE OF faglflext-prctr  WITH HEADER LINE,
        s_racct TYPE RANGE OF faglflext-racct WITH HEADER LINE,
        s_rfarea TYPE RANGE OF faglflext-rfarea WITH HEADER LINE,
        it_skat TYPE TABLE OF skat,
        lw_skat TYPE skat,
        wa_str   TYPE ty_str,
        it_data TYPE TABLE OF tp_data,  "按照序号合计金额
        wa_data TYPE tp_data,
        it_faglflext TYPE TABLE OF tp_faglflext,
        wa_faglflext TYPE tp_faglflext,
        it_config TYPE TABLE OF ztfi_002,
        wa_config TYPE ztfi_002.
*-----------------------------------------------------------------------
* 取数
  SELECT FROM ztfi_002 INTO TABLE it_config.
  IF sy-subrc 0.
    LOOP AT it_config INTO wa_config.
      "需要的科目信息
      CLEAR:s_racct.
      CASE wa_config-zcalcu.
        WHEN '1'"单科目
          s_racct-sign 'I'.
          s_racct-option 'EQ'.
          s_racct-low wa_config-racct_f.
          APPEND s_racct.
        WHEN '2'"区间科目
          s_racct-sign 'I'.
          s_racct-option 'BT'.
          s_racct-low 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue动态配置公式页面可以通过以下步骤完成: 1. 首先,创建一个Vue组件,并在其中定义需要使用的变量和公式。 2. 在组件中使用v-model指令来绑定变量和公式的值,以便可以动态修改它们。 3. 使用computed属性来计算公式的结果,并将其绑定到页面上的元素上。 4. 使用watch属性来监听变量和公式的变化,以便在它们发生变化时重新计算公式的结果并更新页面。 5. 使用v-for指令来循环渲染公式列表,并使用v-on指令来绑定事件处理函数,以便在用户点击时可以动态添加或删除公式。 6. 最后,将组件导出并在需要使用的页面中使用它。 示例代码: ``` <template> <div> <div v-for="(formula, index) in formulas" :key="index"> <input v-model="formula.variable" @change="updateFormula(index)"> <span>{{ formula.symbol }}</span> <input v-model="formula.expression" @change="updateFormula(index)"> <span>= {{ calculate(index) }}</span> <button @click="removeFormula(index)">Delete</button> </div> <button @click="addFormula">Add Formula</button> </div> </template> <script> export default { data() { return { formulas: [ { variable: 'x', symbol: '+', expression: '2' }, { variable: 'y', symbol: '-', expression: '1' }, ], }; }, computed: { variables() { return this.formulas.map((formula) => formula.variable); }, }, methods: { calculate(index) { const formula = this.formulas[index]; const expression = formula.expression.replace(/\b\w+\b/g, (variable) => { return formula[variable] || variable; }); return eval(expression); }, updateFormula(index) { const formula = this.formulas[index]; this.$set(formula, formula.variable, formula.variable); this.$set(formula, formula.expression, formula.expression); }, removeFormula(index) { this.formulas.splice(index, 1); }, addFormula() { this.formulas.push({ variable: '', symbol: '+', expression: '' }); }, }, watch: { variables: { handler() { this.formulas.forEach((formula) => { if (!formula[formula.variable]) { this.$set(formula, formula.variable, ''); } }); }, immediate: true, }, formulas: { handler() { this.formulas.forEach((formula) => { formula.result = this.calculate(this.formulas.indexOf(formula)); }); }, deep: true, }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值