# 如何通过系统管控一张发票多次收款

来源快照：`result_data_new_260518.json`

- 来源 ID：`1969111484303041279`
- 模块：低代码平台e-builder
- 目录：专题学习 - 方案专题 - 制造行业CRM管理方案
- space ID：`1157961794811633670`
- 原文链接：未提供
- 产品基线：未提供

## 正文

**一、方案背景**

对于大型CRM合同管理过程中，合同的收款可以有一张发票多次收款的模式，这种模式下很容易造成票款不符，监管不当的问题，尤其系统不加管控的话，人工出错的概率会更加大。因此，会通过系统来管控一票多款的模式，在提交收款之前，先校验发票金额与收款金额是否是一致或者小于，一致说明是完全一次付款；而小于则说明是多次付款。不满足以上两种情况则会校验不通过，用于管理发票收款的正确性。那么对于多次收款，还要校验总发票金额与实际收款金额是否一致，一致则更新对应的发票状态以及合同状态。小于时则更新发票状态为部分收款。从而实现多次收款的准确度，降低人工犯错的概率。

**二、设计思路**

首先，控制合同收款单据的范围，即“部分收款”，“未收款”状态下的发票可以发起收款；

其次，由于一份合同可以有多张发票，因此我们需要记录每张发票的已收款金额。在收款过程中，我们是根据明细表中的单张发票进行收款的，因此需要将每次收款单中明细表中的发票本次收款金额，提交累加计算到合同发票明细表中的发票上，并且计算当前发票剩余的未收款金额作为校验字段，用于判断发票以及合同当前的状态。

最后，每次填写收款单时，需要在提交前校验每张发票本次收款金额是否大于发票金额，校验不通过时给出具体出错的明细发票行，便于修改。

针对以上三点，可以分别通过表单关联eb字段数据过滤设置、函数计算、以及动作流中的多次执行、变量赋值、分支条件等执行组件来实现。

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711243685527572&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

**三、搭建过程**  


**1、基础表单、字段搭建、字段属性配置**

方案中主要涉及了合同收款的填报设计。选择可用于收款的发票之后，通过表单关联带出其他的相关联的值，如合同，发票明细信息，并利用函数计算，得出单张发票剩余未收款信息以及计算出剩余未收款金额作为校验字段，完成后续的校验过程。

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711243728355363&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

  


**2、利用表单控件属性，实现合同收款单提交范围限制。**

能够进行合同收款的范围限制为：销售发票状态不等于“已收款”，即为未收款和部分收款的前提下，可以进行合同收款。可以通过关联eb字段数据过滤设置属性实现范围控制  


![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711247911444486&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

**3、利用函数，统计每张发票的未收款金额，以及本次收款结束后剩余的未收款金额。**

每张发票的未收款金额=该张发票的发票金额-该张发票的已收款金额；

校验字段值（即剩余未收款金额）=总发票金额-总已收款金额-总的本次收款金额

注：可以使用AGGREGATION（{数字}...,{聚合运算类型}），统计明细表的多张发票的总已收款金额和总本次收款金额。

以上两个字段分别用于提交时单张发票金额校验以及作为后续执行条件。

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711248040099856&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711247888220190&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

**4、收款单提交时配置**动作流完成** 校验以及数据**更新****

利用变量赋值、多次执行、分支配置明细行错误位置校验。

创建变量，index：整数，用于记录错误行行号，默认值为0；error_line：文本用于存储错误明细的位置

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711252315463688&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

利用多次执行，循环遍历明细表，依次校验每一张发票的未收款金额是否小于本次收款金额，并记录出错行的位置

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711252315463702&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711252315463743&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

校验结束后，利用页面交互来给出提示

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711256554536968&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

  


校验通过后，根据剩余未收款金额（校验字段）的值，利用动作流分支来判断当前发票集合同的状态，通过数据更新动作对应更新相关数据  


![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711256467087372&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

  


1）校验字段值>0，更新发票状态为“部分收款”，更新发票明细已收款金额

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711260871106564&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

2）校验字段值=0，更新发票状态为“已收款”，更新发票明细已收款金额；

  


![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711260874670098&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

更新合同状态为“已收款”

![](https://weapp.eteams.cn/papi/file/preview?fileId=1157711260823453717&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)
