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

4.5     单据流转

4.5.1  单据流转的目的

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

4.5.2  单据流转的效果

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

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

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

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

4.5.3  配置流转字段映射

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

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

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

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

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

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

4.5.4  配置回写字段

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

4.5.5  配置单据转换方案

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

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

暂无

Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)的更多相关文章

  1. Netsharp快速入门(之15) 销售管理(报表B 销售季度表)

    作者:秋时 杨昶   转载须说明出处 4.6.2  销售季度表(交叉表) 1.1.1.1 交叉表带数据源和不带数据源区别 带数据源的可以自定义数据源,可以从实体,也可以从Sql脚本得到数据源,并能自定 ...

  2. Netsharp快速入门(之10) 销售管理(插件、资源、业务建模)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 第4章     销售模块开发 4.1     创建插件和资源 参考基础档案的开发 4.2     创建业务模型 Netsharp工具 ...

  3. Netsharp快速入门(之11) 销售管理(开发销售订单工作区)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 4.3     销售订单开发 4.3.1  部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...

  4. Netsharp快速入门(之12) 销售管理(开发发货单工作区)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 4.4     发货单 4.4.1  部件工作区设置 1.设置部件工作区,需要设置的部件如下 2.设置单据和明细列表的字段,设置完成 ...

  5. Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)

    作者:秋时 杨昶   转载须说明出处 4.5     销售报表 4.5.1  热销滞销品统计 1.建立部件工作区,主部件选择报表.统计表,辅部件选择查询方案 2.设置报表模版.选择主部件,选择工具-报 ...

  6. Netsharp快速入门(之1) 介绍及需求说明

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 第一章 快速入门介绍 Netsharp是一个企业基础业务管理平台,介绍Netsharp分三个系列,分别是: 1.         N ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(13)|Generics泛型]

    [易学易懂系列|rustlang语言|零基础|快速入门|(13)] 有意思的基础知识 Generics泛型 我们今天来看看泛型. 什么是泛型? 我们来看看这样的情景: 我们要写一个函数,这个函数可以处 ...

  8. Netsharp快速入门(之2) 基础档案(之A 创建插件和资源)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 第三章     基础档案开发 本文不再对此需求进行分析设计,其实分析设计的结果在下文会体现在平台的使用过程中,这个销售系统分成两个模 ...

  9. AngularJS快速入门指南13:表单

    一个AngularJS表单是一组输入型控件的集合. HTML控件 HTML输入型标签标包括: input标签 select标签 button标签 textarea标签 HTML表单 HTML表单将各种 ...

随机推荐

  1. PHP基础笔记汇总

    一.PHP简介PHP:超文本预处理器(译者注:PHP: Hypertext Preprocessor,递归命名)PHP 是一种服务器端的脚本语言,类似 ASPPHP 文件的文件后缀是 ".p ...

  2. Run JavaScript on your PeopleSoft pages conditionally

    Here, PeopleCode sets the logic that determines when the JavaScript code will run. This is not as si ...

  3. sqlserver 保留小数方法

    1. 使用 Round() 函数,如 Round(@num,2)  参数 2 表示 保留两位有效数字. 2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,dec ...

  4. MapReduce框架Partitioner分区方法

    前言:对于二次排序相信大家也是似懂非懂,我也是一样,对其中的很多方法都不理解诶,所有只有暂时放在一边,当你接触到其他的函数,你知道的越多时你对二次排序的理解也就更深入了,同时建议大家对wordcoun ...

  5. 服务器下自动备份MySQL

    Linux下 service crond restart */ * * * * /home/mysqlbackup.sh >/home/runssh.log backup.sh #bin/bas ...

  6. 登录成功返回登录前页面js代码

    /*------ setCookie(name,value) -----------*/ function setCookie(name,value) { var Days = 30; //此 coo ...

  7. 利用java读写Excel文件

    一.读取Excel文件内容 java 代码 public static String readExcel(File file){ StringBuffer sb = new StringBuffer( ...

  8. 搭通自己的电脑与GitHub的传输通道

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

  9. win7修改软件【授权给…】后面的名称

    很简单,按下图打开注册表,修改: Ctrl+F分别搜索以下三个键值,搜到后修改为你想显示的名称即可即可. 1:UserName 2:RegisteredOrganazition 3:Registere ...

  10. Java 数组操作

    参考了网上别人的代码,在Java中对数组的比较便利的操作是 将数组转换成集合再利用集合所提供的add remove等方法进行增删,然后再转换成原数组类型 如 String[] --> 填充至 A ...