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

在做单时,一行一行分录的去选择序列号比较繁琐,在没有严格管理一定要选择某个序列号时,可以通过自动批量填充的方式进行填写。
处理逻辑:找到符合对应分录库存维度的在库序列号,选出出库数量的序列号填写到单据上。
示例代码如下:
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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



