在宜搭中,(流程表单或者是普通表单)如何将多张需求单据,合并成为一张总表?

阿里云服务器

在宜搭中,将多张“需求单据”(子单)合并成一张“总表”(主单),通常有两种核心场景和实现方案。请根据您的具体业务需求选择:

场景一:人工手动合并(最常用、最灵活)

适用情况:需要人工审核、筛选哪些单据要合并,或者合并不定时发生。
核心原理:利用宜搭的 “关联表单” 组件 + “业务关联规则”

步骤 1:设计“总表”表单

  1. 新建一个普通表单或流程表单,命名为“需求汇总单”。

  2. 添加一个 “关联表单” 组件(关键步骤):

    • 选择“允许选择多条数据”。

    • 过滤条件(可选):例如只展示“状态=待汇总”的单据。

    • 标签:设为“关联需求明细”。

    • 关联表单:选择您的“需求单据”。

    • 数据源设置

    • 字段映射:配置需要显示在总表中的字段(如需求名称、金额、申请人等)。

  3. 添加其他汇总字段(如“总金额”、“总数量”),这些可以通过公式自动计算关联表单中的数据。

步骤 2:配置“业务关联规则”(实现状态更新)

当总表提交后,需要自动把那些被关联的“需求单据”状态改为“已汇总”,防止重复合并。

  1. 进入“需求汇总单”的 “业务关联规则” 设置。

  2. 新建规则:

    • 触发时机:选择“数据提交后”或“审批通过后”。

    • 执行动作:选择“更新数据”。

    • 目标表单:选择“需求单据”。

    • 匹配条件需求单据.ID 等于 当前表单.关联需求明细.ID

    • 更新内容:将“需求单据”的某个状态字段(如“汇总状态”)更新为“已汇总”。

步骤 3:使用流程

  • 用户打开“需求汇总单”。

  • 点击“关联需求明细”组件,从弹出的列表中选择多张需要合并的单据。

  • 系统自动计算总金额。

  • 提交/审批通过后,原单据状态自动变更。


场景二:系统自动定时合并(自动化)

适用情况:每天/每周固定时间,将特定条件下的所有未合并单据自动打包成一张总表。
核心原理:利用宜搭的 “集成&自动化” (Integration & Automation)。

步骤 1:准备“总表”表单

同上,确保总表中有“关联表单”组件或“子表单”组件来承载明细数据。
注意:如果是通过自动化写入,使用“子表单”可能比“关联表单”更容易处理数据写入(因为关联表单通常用于引用,而子表单用于存储副本数据)。建议根据是否需要保留原始单据的独立性来决定:

  • 若需保留原单据独立存在且可追溯 -> 用 关联表单(但自动化写入关联关系较复杂,通常需配合脚本)。

  • 若只是生成一份存档记录,原单据继续流转 -> 用 子表单 存储数据副本。

推荐方案(使用子表单存储副本):

  1. 在“总表”中添加 “子表单” 组件。

  2. 在子表单内放置与“需求单据”一致的字段。

步骤 2:配置自动化流程

  1. 进入应用管理 -> 集成&自动化

  2. 新建自动化流:

    • 再次循环,将原“需求单据”的状态更新为“已汇总”。

    • 模块:创建“需求汇总单”。

    • 字段映射:将处理好的数组变量填入“子表单”字段。

    • 同时可以填入汇总后的总金额等。

    • 遍历查询到的所有单据数据。

    • 将每条数据的字段映射到一个数组变量中,格式需符合“子表单”的数据结构。

    • 模块:查询“需求单据”。

    • 过滤条件:汇总状态 等于 未汇总日期 等于 今天

    • 触发器:选择“定时触发”(例如:每天 18:00)或“数据触发”(当满足特定条件时)。

    • 动作 1:查询数据

    • 动作 2:数据处理 (循环)

    • 动作 3:创建数据

    • 动作 4:更新原数据(可选)。


场景三:在流程中动态合并(高级)

适用情况:在审批流程的某个节点,审批人决定将手头的几个单据合并。

  1. 在流程设计的某个节点(如“部门经理审批”)。

  2. 该节点的表单设计中包含 “关联表单” 组件(同场景一)。

  3. 审批人在处理任务时,手动选择多条待办单据进行关联。

  4. 后续节点通过 “业务关联规则”“节点事件” 去更新原单据状态。


💡 核心难点与解决方案

需求点推荐组件/方法说明
选择多张单据关联表单组件必须开启“多选”模式。这是最原生的选择方式。
自动计算总和公式 / JS关联表单本身不支持直接 SUM。需在总表加一个数字字段,公式写不了跨组件聚合时,需用 JS (onLoad/onChange) 遍历关联表单数据求和。
防止重复合并状态字段 + 过滤在原单据加“是否已汇总”字段。在关联表单的过滤条件中设定 是否已汇总 == 否。合并成功后通过规则将该字段改为
数据同步问题业务关联规则如果原单据修改了,总表里的“关联表单”数据会自动同步最新值(因为是引用)。如果希望总表定格在合并那一刻的数据快照,请使用 “子表单” 并通过自动化复制数据,而不是用关联表单。

🚀 快速实施建议(JS 求和示例)

如果您选择了 场景一,并且发现关联表单无法自动计算总金额,请在总表表单设计页,点击 “页面设置” -> “自定义代码”,添加以下逻辑:

// 监听关联表单组件的变化
export function onFieldChange({ field, value, oldValue }) {
  // 假设关联表单组件的唯一标识是 'associationField_1'
  if (field === 'associationField_1') {
    let totalAmount = 0;
    // value 是一个数组,包含选中的所有行数据
    if (value && value.length > 0) {
      value.forEach(row => {
        // 假设原单据中金额字段标识是 'amount'
        // 注意:这里取的是关联过来的字段值,具体 key 需查看组件配置
        const amount = parseFloat(row['amount']) || 0; 
        totalAmount += amount;
      });
    }
    // 将计算结果赋值给总表的总金额字段 (假设标识为 'total_sum')
    this.$('total_sum').setValue(totalAmount);
  }
}

总结

  • 想要灵活、人工控制:用 关联表单组件 + 业务关联规则

  • 想要全自动、定时归档:用 集成&自动化 + 子表单

  • 想要数据快照(不随原单变化):务必用 子表单 复制数据,不要用关联表单。