电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

出库单据批量填充序列号二开示例(以销售出库单为例)

来源:金蝶云社区作者:金蝶2024-09-231

出库单据批量填充序列号二开示例(以销售出库单为例)

在做单时,一行一行分录的去选择序列号比较繁琐,在没有严格管理一定要选择某个序列号时,可以通过自动批量填充的方式进行填写。


处理逻辑:找到符合对应分录库存维度的在库序列号,选出出库数量的序列号填写到单据上。


示例代码如下:

using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;


namespace CustomerPluginService.demo
{
    public class TESTEdit005 : AbstractBillPlugIn
    {
        public override void EntryBarItemClick(BarItemClickEventArgs e)
        {
            if (e.BarItemKey == "按钮标识")
            {
                //获取单据体所有分录
                List<Entity> entrys = this.View.Model.BusinessInfo.Entrys;
                Kingdee.BOS.Core.Metadata.EntityElement.SNSubEntryEntity snSubEntity = null;
                foreach (Kingdee.BOS.Core.Metadata.EntityElement.Entity item in entrys)
                {
                    if (item is Kingdee.BOS.Core.Metadata.EntityElement.SNSubEntryEntity)
                    {
						//找到序列号子单据体
                        snSubEntity = (item as Kingdee.BOS.Core.Metadata.EntityElement.SNSubEntryEntity);
                        break;
                    }
                }

                //获取本单据需要的所有在库序列号
                string sqlText = string.Format(@"SELECT TS.FID,TSE.FENTRYID,TSE.FSEQ,TSE.FBASEUNITQTY,INV.FBASEQTY,INV.FID INVID,MA.FMATERIALID,SM.FSERIALID ,
                                                        SM.FNUMBER AS FSerialNo 
                                                FROM    T_STK_INVENTORY INV --即时库存
                                                        INNER JOIN T_BD_SERIALBILLTRACE TRA ON INV.FID = TRA.FINVID --序列号追踪表
                                                        INNER JOIN ( SELECT MAX(T3.FBILLTRACEID) AS FBILLTRACEID
                                                                     FROM   T_BD_SERIALBILLTRACE T3
                                                                            INNER JOIN ( SELECT DISTINCT
                                                                                                FSERIALID
                                                                                         FROM   T_BD_SERIALBILLTRACE
                                                                                       ) T4 ON T4.FSERIALID = T3.FSERIALID
                                                                     WHERE  T3.FINVID <> ' '
                                                                     GROUP BY T3.FSERIALID
                                                                   ) TRA2 ON TRA2.FBILLTRACEID = TRA.FBILLTRACEID --一个序列号存在多条追踪记录时只取最近的
                                                        INNER JOIN T_BD_SERIALMASTER SM ON SM.FSERIALID = TRA.FSERIALID --序列号主档
                                                        INNER JOIN T_BD_MATERIAL MA ON MA.FMASTERID = INV.FMATERIALID  --物料主表
                                                                                       AND MA.FUSEORGID = INV.FSTOCKORGID
                                                        INNER JOIN T_BD_MATERIALSTOCK c_stock ON c_stock.FMATERIALID=MA.FMATERIALID
                                                        LEFT JOIN T_BD_LOTMASTER lot ON lot.FLOTID=INV.FLOT
                                                        LEFT JOIN T_ENG_BOM bom ON bom.FMASTERID=INV.FBOMID AND bom.FUSEORGID=INV.FSTOCKORGID														
                                                        LEFT JOIN V_ITEMCLASS_OWNER owner ON owner.fmasterid=INV.FOWNERID AND owner.fformid=INV.FOWNERTYPEID
                                                        LEFT JOIN V_ITEMCLASS_KEEPER keeper ON keeper.fmasterid=INV.FKEEPERID AND keeper.fformid=INV.FKEEPERTYPEID
                                                        INNER JOIN T_SAL_OUTSTOCKENTRY TSE ON TSE.FMATERIALID=MA.FMATERIALID AND TSE.FSTOCKID=INV.FSTOCKID
                                                        AND TSE.FAUXPROPID=inv.FAUXPROPID AND TSE.FSTOCKLOCID=INV.FSTOCKLOCID AND TSE.FSTOCKSTATUSID=INV.FSTOCKSTATUSID
                                                        AND ISNULL(TSE.FLOT_TEXT,' ')=ISNULL(lot.FNUMBER,' ') AND TSE.FBOMID=ISNULL(bom.FID,0) AND TSE.FOWNERTYPEID=INV.FOWNERTYPEID AND TSE.FOWNERID=owner.fitemid
                                                        AND TSE.FKEEPERTYPEID=INV.FKEEPERTYPEID AND TSE.FKEEPERID=keeper.fitemid 
                                                        AND ((c_stock.FISEXPPARTOFLOT='1' AND c_stock.FISKFPERIOD='1' AND TSE.FPRODUCEDATE=lot.FPRODUCEDATE AND TSE.FEXPIRYDATE=lot.FEXPIRYDATE)
                  

出库单据批量填充序列号二开示例(以销售出库单为例)

在做单时,一行一行分录的去选择序列号比较繁琐,在没有严格管理一定要选择某个序列号时,可以通过自动批量填充的方式进行填写。处理逻辑:...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信