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

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. PF_RING安装

    1.安装Build-essential.SVN.Flex.Libnuma-dev.bison ubuntu中:sudo apt-get install build-essential subversi ...

  2. 解决Linux中遇到No such device

    虚拟机备份转移后,网络启动异常,提示“SIOCSIFADDR: No such device” he problem lies in the fact that ethernet MAC addres ...

  3. Thinking about think-time functions

     You will find yourself very familier to this topic. Ok, let me ask you one question: Let me know th ...

  4. Delete PeopleSoft Query From the Database

    There could be different reasons why a PeopleSoft developer would like to delete a query from the da ...

  5. 使用notiy和wait模拟阻塞队列

    public class MyQueue { //定义一个存储数据的容器 private LinkedList<Object> list = new LinkedList<Objec ...

  6. ngx_http_upstream_module模块学习笔记

    ngx_http_upstream_module用于将多个服务器定义成服务器组,而由proxy_pass,fastcgi_pass等指令引用 (1)upstream name  {...} 定义一个后 ...

  7. php抓取post方式提交的页面

    function curlBy($url, $data=array()) {        $ch = curl_init();        if(!empty($data)){           ...

  8. (原创)Windows8下安装配置WAMP

    Windows8下安装配置WAMP        2013/12/28 最近这段时间一直在研究linuxshell编程,虽然还是初级水平,但比之前有了不小的进度,但是shell的命令很多,很难在短时间 ...

  9. ajax+php+mysql更新

    html代码 <input type="button" id="quxiao" class="quxiao" name="q ...

  10. 关于js中立即执行的匿名函数写法

    /*最流行的写法*/ (function() { alert("run!") })(); /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */ !!!(functio ...