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


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

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

     1 using Demo.Sales.Entity
     2 
     3 using System.Data
     4 
     5  
     6 
     7 //发货单 选 销售订单 的 选单条件
     8 
     9 public QueryStruct Generate(IEntity header)
    10 
    11 {
    12 
    13          //header表示当前所在单据发货单
    14 
    15     SalesDelivery delivery = header as SalesDelivery;
    16 
    17 
    18 
    19     List<string> QueryList = new List<string>();
    20 
    21     QueryParameterCollection qpc = new QueryParameterCollection();
    22 
    23  
    24 
    25     //当前往来单位必须和上游的往来单位一致
    26 
    27     if (delivery.Partner != null)
    28 
    29     {
    30 
    31         QueryList.Add("SalesOrder.IdPartner=@SelectedIdPartner");
    32 
    33  
    34 
    35         qpc.Add("@SelectedIdPartner", delivery.IdPartner, DbType.Guid);
    36 
    37     }
    38 
    39  
    40 
    41     //已审核
    42 
    43     QueryList.Add("SalesOrder.VoucherState='9AD02BD3-F4CE-466A-BA09-88AB9ED5D484'");
    44 
    45    
    46 
    47     //往来单位不能停用
    48 
    49     QueryList.Add("SalesOrder.Partner.isEnable != 0");
    50 
    51    
    52 
    53          //销售订单的累计销货数量=数量时,则不显示
    54 
    55          QueryList.Add("(SalesOrderDetail.SumDeliveryQuantity IS NULL OR SalesOrderDetail.SumDeliveryQuantity < SalesOrderDetail.Quantity)");
    56 
    57  
    58 
    59     string filter = string.Join(" AND ", QueryList);
    60 
    61     return new QueryStruct(filter, qpc);
    62 
    63 }

    2.配置生单脚本

     1 using Demo.Sales.Entity
     2 
     3  
     4 
     5 // 销售订单生成销货单的条件验证
     6 
     7 public string Validate(IEntity entity)
     8 
     9 {
    10 
    11     SalesOrder salesOrder = entity as SalesOrder;
    12 
    13         
    14 
    15          //往来单位不能停用
    16 
    17          if(salesOrder.Partner.isEnable == false}
    18 
    19          {
    20 
    21                    return "往来单位已停用,无法生单!";
    22 
    23          }
    24 
    25         
    26 
    27     foreach (SalesOrderDetail detail in salesOrder.SalesOrderDetails)
    28 
    29     {
    30 
    31                    //去掉为删除状态的实体明细
    32 
    33                    if (detail.EntityState == EntityState.Deleted)
    34 
    35                    {
    36 
    37                             continue;
    38 
    39                    }
    40 
    41          }
    42 
    43     return null;
    44 
    45 }

    3.录入完成后保存

    4.5.7  配置回写Action

    暂无

    作者    :秋时

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    (转)PHP 的 __FILE__ 常量
    smarty半小时快速上手教程(转)
    Namespace declaration statement has to be the very first
    ThinkPhp3.2 无法加载模块:Index
    注意mysql中的编码格式和php中的编码格式一致
    MySQL数据库备份与恢复方法(转)
    phpmyadmin设置id自增(AUTO_INCREMENT)(转)
    (转)用eclipse创建一个j2ee的web工程后,左面projects窗口中的项目如何没有显示webRoot文件夹,除了src的文件夹,其他都不显示
    CentOS6.8 安装 Nginx
    Eclipse Java注释模板设置详解
  • 原文地址:https://www.cnblogs.com/Netsharp/p/3551268.html
Copyright © 2020-2023  润新知