Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

作者:秋时 杨昶   转载须说明出处

4.5     单据流转

4.5.1  单据流转的目的

单据流转主要为了实现业务关系的流转,并记录相互之间的关系。例如从销售订单生成销货单,两张单据之间有对应的关联关系。

4.5.2  单据流转的效果

单据流转时,各个字段流转均有具体的算法。典型字段如下:

1)表头的往来单位字段,流转后,两张单据往来单位是一致的。此场景相当于直接赋值。

2)表头的单据编码,流转后,两张单据的编码有属于自己的编码规则。此场景相当于走自己的默认规则,与来源单据无关。

3)表体的数量字段,销售订单上有10个,部分流转到销货单3个,那么下次流转时,应该流转7个,而不是10个。此场景相当于需要进行计算才能得出正确值。

4.5.3  配置流转字段映射

1.从单据界面,二次开发,单据流转配置进入单据流转配置

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

2.新增一行,其中主实体和目标实体均设置为各自实体的表头实体

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

3.中间转换项目页签,是具体定义了表头到表头字段,表体到表体字段的转换关系

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

4.设置表头表体具体字段对应,可以使用提取工具,提取所有字段。

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

5.留下要用的转换字段。表头字段转换内容如下

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

6.表体字段转换如下,其中数量和金额都是公式计算,设置完成后保存

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

4.5.4  配置回写字段

1.进入回写页签,上游字段指来源实体的字段,下游字段指目标实体的字段。超单验证勾上,超量验证字段填入来源实体的字段。

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

4.5.5  配置单据转换方案

1.在方案表单界面,把源明细实体和目标明细实体填上,程序会根据主实体和明细实体进行单据转换

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

4.5.6  配置选单、生单脚本

1.配置选单脚本,要求往来单位一致且不停用,订单是生效状态,选单时销售订单的累计销货数量小于数量。选单脚本如下:

 using Demo.Sales.Entity

 using System.Data

 //发货单 选 销售订单 的 选单条件

 public QueryStruct Generate(IEntity header)

 {

          //header表示当前所在单据发货单

     SalesDelivery delivery = header as SalesDelivery;

     List<string> QueryList = new List<string>();

     QueryParameterCollection qpc = new QueryParameterCollection();

     //当前往来单位必须和上游的往来单位一致

     if (delivery.Partner != null)

     {

         QueryList.Add("SalesOrder.IdPartner=@SelectedIdPartner");

         qpc.Add("@SelectedIdPartner", delivery.IdPartner, DbType.Guid);

     }

     //已审核

     QueryList.Add("SalesOrder.VoucherState='9AD02BD3-F4CE-466A-BA09-88AB9ED5D484'");

     //往来单位不能停用

     QueryList.Add("SalesOrder.Partner.isEnable != 0");

          //销售订单的累计销货数量=数量时,则不显示

          QueryList.Add("(SalesOrderDetail.SumDeliveryQuantity IS NULL OR SalesOrderDetail.SumDeliveryQuantity < SalesOrderDetail.Quantity)");

     string filter = string.Join(" AND ", QueryList);

     return new QueryStruct(filter, qpc);

 }

2.配置生单脚本

 using Demo.Sales.Entity

 // 销售订单生成销货单的条件验证

 public string Validate(IEntity entity)

 {

     SalesOrder salesOrder = entity as SalesOrder;

          //往来单位不能停用

          if(salesOrder.Partner.isEnable == false}

          {

                    return "往来单位已停用,无法生单!";

          }

     foreach (SalesOrderDetail detail in salesOrder.SalesOrderDetails)

     {

                    //去掉为删除状态的实体明细

                    if (detail.EntityState == EntityState.Deleted)

                    {

                             continue;

                    }

          }

     return null;

 }

3.录入完成后保存

4.5.7  配置回写Action

暂无

上一篇:EntityFramework嵌套查询的五种方法


下一篇:安装wampserver遇到,无法启动此程序,丢失MSVCR110.dll