14.3、 表单插件,AfterBindData事件,变通实现,单据转换,多单据体下推原创
金蝶云社区-林荫大道_找工作身份
林荫大道_找工作
21人赞赏了该文章 1.2万次浏览 未经作者许可,禁止转载编辑于2021年12月02日 21:26:44
summary-icon摘要由AI智能服务提供

文本描述了在一个销售订单到销售出库单的业务场景中,如何通过判断单据状态来触发不同的操作。特别地,文本中详细说明了在编辑(EDIT)状态和新增(ADDNEW)状态下,如何根据销售订单上的备注信息,将其携带到销售出库单上。具体步骤包括:在销售订单和销售出库单上分别新增页签和文本字段;根据单据状态,编写代码逻辑以获取销售订单中的备注信息,并将其赋值给销售出库单中的对应字段;最后,通过数据库查询操作来获取相关的备注信息,并在销售出库单中进行赋值和刷新显示。文本还展示了相关的SQL查询语句和代码片段,用于实现这一业务流程。

业务场景:销售订单下推销售出库单,判断是什么单据状态,然后触发相应的操作


标准产品,多单据体下推,单据转换中,只能配置一个单据体;


销售订单、销售出库单,单据体,分别都新增一个页签,下推,把销售订单上面多单据体备注,带到销售出库单上面;






14.2



1、注释上一节


            //如果是,编辑状态 EDIT
            
            //if(this.View.OpenParameter.Status.Equals(OperationStatus.EDIT))
            //{
            //    //给备注和备注1,赋值
            
            //    this.View.Model.SetValue("FNote", "备注");
            //    this.View.Model.SetValue("FNote1", "备注1");
            
            
            //    //刷新这2个字段
            
            //    this.View.UpdateView("FNote");
            //    this.View.UpdateView("FNote1");
            //}




2、销售订单、销售出库单,单据体,分别都新增一个页签,增加一个文本字段备注;


选择一个单据体页签,点最后面的按钮,添加页签

image.png



工具箱,拖动单据体到页签里面,设置停靠,充满
再拖动文本到页签里面

image.png


image.png




2.1、销售订单、销售出库单,单据体,分别都新增一个页签后,下推;


image.png







3、



            //如果是新增状态,下推的,销售出库单,加载完成之后
            
            if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW))



4、


                 //如果是下推生成的,销售出库单上面有订单单号
                //获取源单,订单单号FSOORDENDO ,第一行,不等于空
                
                if(Convert.ToString(this.View.Model.GetValue("FSOORDERNO",0))!="")



5、


                //定义几个字段,后面sql用
                
                string sql;
                DataSet ds;
                DataTable dt;



6、添加引用

using System.Data;





7、


                    //到数据库里面,寻找,关联的备注信息
                    
                    sql = "/*dialect*/";




8、打开BOS,销售订单,新增的页签,获取表名 YDIE_t_Cust_Entry100017


select * from YDIE_t_Cust_Entry100017

image.png



--获取销售订单,新增页签,备注字段

select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017


--通过销售订单,单据编号,找信息,通过FID关联

select FID from T_SAL_ORDER where FBILLNO ='XSDD000027'


image.png


image.png


--关联

select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in
(select FID from T_SAL_ORDER where FBILLNO ='XSDD000027')


image.png



//到数据库里面,寻找,关联的备注信息

sql = "/*dialect*/select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')";




9、


            //如果是新增状态,下推的,销售出库单,加载完成之后
            if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW))
            {
                //定义几个字段
                string sql;
                DataSet ds;
                DataTable dt;
                
                
                 //如果是下推生成的,销售出库单上面有订单单号
                //获取源单,订单单号FSOORDERNO ,第一行,不等于空
                if(Convert.ToString(this.View.Model.GetValue("FSOORDERNO",0))!="")
                {
                    //到数据库里面,寻找,关联的备注信息
                    //获取上面关联的值1001,写入销售出库单里面
                    sql = "/*dialect*/select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')";
                    
                    
                    //读取数据库里面的,执行数据,赋值给ds
                    ds = DBUtils.ExecuteDataSet(this.Context, sql);
                    
                    //读取第一行数据
                    dt = ds.Tables[0];
                    
                    //循环dt表,给单据体赋值,如果行大于0
                    if(dt.Rows.Count >0)
                    {   //循环读取每一行数据
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            //给备注F_YDIE_TEXT,赋值
                            
                            //dt.Rows[i]行    ["F_YDIE_TEXT"].ToString() 列
                            this.View.Model.SetValue("F_YDIE_TEXT", dt.Rows[i]["F_YDIE_TEXT"].ToString(),i);
                        }
                    }
                    
                    
                    //刷新单据体
                    this.View.UpdateView("YDIE_t_Cust_Entry100017");




10、重新生成dll



11、销售出库单,注册插件



12、最终效果,新增销售订单,填写新增页签,单据体备注信息,下推销售出库单,备注带到了销售出库单上面;


image.png      image.png


image.png


image.png



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using System.ComponentModel;

//用于写sql
using Kingdee.BOS.App.Data;

using Kingdee.BOS.Core.Metadata;
using System.Data;


namespace Kingdee.Bos.Project.BillAfterBindData
{
    [Description("AfterBindData")]
    
    [Kingdee.BOS.Util.HotUpdate]
    
    
    
    public class ClassName:AbstractBillPlugIn
    {
        //定义几个字段
        string sql;
        DataSet ds;
        DataTable dt;
        
        
        
        //这个是一个数据绑定后事件。
        //这个事件是单据新增,编辑,查询加载后最后一个事件。
        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            
            
            //这个方法是判断单据状态。
            //有四种:ADDNEW、EDIT、VIEW、DISASSEMBLY
            //新增、编辑、查看、卸载
            //如果是,新增状态 ADDNEW
            //如果是,编辑状态 EDIT
            //if(this.View.OpenParameter.Status.Equals(OperationStatus.EDIT))
            //{
            //    //给备注和备注1,赋值
            //    this.View.Model.SetValue("FNote", "备注");
            //    this.View.Model.SetValue("FNote1", "备注1");
            
            
            //    //刷新这2个字段
            //    this.View.UpdateView("FNote");
            //    this.View.UpdateView("FNote1");
            //}
            
            
            
            
            //如果是新增状态,下推的,销售出库单,加载完成之后
            if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW))
            {
                 //如果是下推生成的,销售出库单上面有订单单号
                //获取源单,订单单号FSOORDENDO ,第一行,不等于空
                if (Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) != "")
                {
                    //到数据库里面,寻找,关联的备注信息
                    //获取上面关联的值1001,写入销售出库单里面
                    sql = "/*dialect*/select F_YDIE_TEXT from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')";
                    
                    
                    //读取数据库里面的,执行数据,赋值给ds
                    ds = DBUtils.ExecuteDataSet(this.Context, sql);
                    //读取第一行数据
                    
                    dt = ds.Tables[0];
                    //循环dt表,给单据体赋值,如果行大于0
                    
                    
                    if (dt.Rows.Count > 0)
                    {   //循环读取每一行数据
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            //给备注F_YDIE_TEXT,赋值
                            //dt.Rows[i]行    ["F_YDIE_TEXT"].ToString() 列
                            this.View.Model.SetValue("F_YDIE_Text", dt.Rows[i]["F_YDIE_TEXT"].ToString(), i);
                        }
                    }
                    
                    
                    //刷新单据体
                    this.View.UpdateView("YDIE_t_Cust_Entry100018");
     
                           
                }
            }
        }
    }
}


视频下载链接


链接:https://pan.baidu.com/s/17MIKyIy9My5sc5Gn2HI7UA 

提取码:KISS 





总目录链接

https://vip.kingdee.com/article/64993872014591232






图标赞 21
21人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!