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

7.6版本以下锁库和解锁二开示例

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

7.6版本以下锁库和解锁二开示例

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.K3.Core.SCM.STK;

using Kingdee.K3.SCM.ServiceHelper;

using Kingdee.BOS.Core;

using Kingdee.BOS.Core.DependencyRules;

using Kingdee.BOS.Core.Metadata.EntityElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Resource;

using Kingdee.BOS.ServiceHelper;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.ComponentModel;

using Kingdee.BOS.App.Data;

using Kingdee.BOS;


namespace HCK

{

    [Description("发货通知单创建预留锁库")]

    public class SaveLockInfo : AbstractOperationServicePlugIn

    {

        public override void OnPreparePropertys(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)

        {

            e.FieldKeys.Add("FID");

            base.OnPreparePropertys(e);

        }


        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)

        {

            base.AfterExecuteOperationTransaction(e);

            foreach (DynamicObject items in e.DataEntitys)

            {

                int FID = 0;

                decimal FQTY = 0;

                decimal FBASEAVBQTY = 0;

                string fresult = "", FMATERIALID = "", FSHIPMENTSTOCKID = "", fseq = "";

                if (items["Id"] != null)

                {

                    FID = Convert.ToInt32(items["Id"]);

                }

                string SQL0 = "/*dialect*/" + string.Format(@"      SELECT t1.fseq,t1.FMATERIALID,t1.FSHIPMENTSTOCKID,T1.FQTY FROM T_SAL_DELIVERYNOTICE t

                                                                    left join T_SAL_DELIVERYNOTICEENTRY t1 on t.FID=t1.FID

                                                                    where t.FID=" + FID + " and t1.FSHIPMENTSTOCKID=242404");

                DynamicObjectCollection DynamData0 = DBUtils.ExecuteDynamicObject(this.Context, SQL0);

                DynamicObjectCollection DynamData1 = DBUtils.ExecuteDynamicObject(this.Context, SQL0);

                //判断是否满足可用量,可用量=库存量-预留数量

                if (DynamData1.Count > 0)

                {

                    for (int y = 0; y < DynamData1.Count; y++)

                    {

                        FMATERIALID = Convert.ToString(DynamData1[y]["FMATERIALID"]);

                        FSHIPMENTSTOCKID = Convert.ToString(DynamData1[y]["FSHIPMENTSTOCKID"]);

                        FQTY = Convert.ToDecimal(DynamData1[y]["FQTY"]);

                        fseq = Convert.ToString(DynamData1[y]["fseq"]);

                        string SQL2 = "/*dialect*/" + string.Format(@"  select

                                                            case when (select FBASEDEMANDQTY from T_PLN_RESERVELINK where FSRCINTERID=T.FID)>0 then (T.FBASEQTY-(select FBASEDEMANDQTY from T_PLN_RESERVELINK where FSRCINTERID=T.FID)) else T.FBASEQTY end FBASEAVBQTY,

T.FSTOCKORGID StockOrgId,

T.FMATERIALID MaterialId,

T.FSTOCKID StockId into #A

from T_STK_INVENTORY T

where t.FMATERIALID='" + FMATERIALID + "' and t.FSTOCKID=" + FSHIPMENTSTOCKID + " " +

                                                            "order by T.FMATERIALID,T.FSTOCKID " +

                                                            "SELECT SUM(FBASEAVBQTY)FBASEAVBQTY,StockOrgId,MaterialId,StockId FROM #A " +

                                                            "GROUP BY StockOrgId,MaterialId,StockId");

                        DynamicObjectCollection DynamData2 = DBUtils.ExecuteDynamicObject(this.Context, SQL2);

                        if (DynamData2.Count > 0)

                        {

                            for (int x = 0; x < DynamData2.Count; x++)

                            {

                                FBASEAVBQTY = Convert.ToDecimal(DynamData2[x]["FBASEAVBQTY"]);

                                if (FBASEAVBQTY < FQTY)

                                {

                                    throw new KDBusinessException("500", "第" + fseq + "行物料可用量不足!,无法生成发货单。");

                                    return;

                                }

                            }

                        }

                    }

                }

                if (DynamData0.Count > 0)

                {

                    for (int i = 0; i < DynamData0.Count; i++)

                    {

                        FMATERIALID = Convert.ToString(DynamData0[i]["FMATERIALID"]);

                        FSHIPMENTSTOCKID = Convert.ToString(DynamData0[i]["FSHIPMENTSTOCKID"]);

                        FQTY = Convert.ToDecimal(DynamData0[i]["FQTY"]);

                        List<LockStockArgs> list = new List<LockStockArgs>();

                        string SQL = "/*dialect*/" + string.Format(@" select

                                                            T.FBASEQTY,

                                                            case when (select FBASEDEMANDQTY from T_PLN_RESERVELINK where FSRCINTERID=T.FID)>0 then (T.FBASEQTY-(select FBASEDEMANDQTY from T_PLN_RESERVELINK where FSRCINTERID=T.FID)) else T.FBASEQTY end FBASEAVBQTY,

T.FID InvDetailID,

T.FSTOCKORGID StockOrgId,

T.FMATERIALID MaterialId,

T1.FPLANMODE PlanMode,

T.FBOMID BomId,

T.FAuxPropId AuxPropId,

T.FLOT,

T2.FNUMBER FLOTNUMBER,

T.FMTONO MtoNo,

T.FPROJECTNO ProjectNo,

T.FPRODUCEDATE ProduceDate,

T.FEXPIRYDATE ExpiryDate,

T.FSTOCKID StockId,

T.FSTOCKLOCID StockLocId,

T.FSTOCKSTATUSID StockStatusId,

T.FOWNERTYPEID OwnerTypeId,

T.FOWNERID OwnerId,

T.FKEEPERTYPEID KeeperTypeId,

T.FKEEPERID KeeperId,

T.FSTOCKUNITID UnitID,

T.FBASEUNITID BaseUnitId,

T.FSECUNITID SecUnitId,

T.FLOCKQTY LockQty,

T.FBASELOCKQTY BaseLockQty,

T.FSECLOCKQTY SecLockQty

from T_STK_INVENTORY T

LEFT JOIN t_BD_MaterialPlan T1 ON T.FMATERIALID=T1.FMATERIALID

LEFT JOIN T_BD_LOTMASTER T2 ON T.FLOT=T2.FLOTID

where T.FSTOCKID='" + FSHIPMENTSTOCKID + "' AND T.FMATERIALID='" + FMATERIALID + "'");

                        DynamicObjectCollection DynamData = DBUtils.ExecuteDynamicObject(this.Context, SQL);

                        if (DynamData.Count > 0)

                        {

                            foreach (DynamicObject item in DynamData)

                            {

                                FBASEAVBQTY = Convert.ToDecimal(item["FBASEAVBQTY"]);

                                if (FQTY <= FBASEAVBQTY)

                                {

                                    list.Add(GetSubData(item, FQTY));

                                    break;

                                }

                                if (FQTY > FBASEAVBQTY)

                                {

                                    list.Add(GetSubData(item, FBASEAVBQTY));

                                    FQTY = FQTY - FBASEAVBQTY;

                                }

                            }

                        }

                        var result = StockServiceHelper.SaveLockInfo(base.Context, list);

                        if (result.Count > 0)

                        {

                            fresult = result[0]["fresult"].ToString();

                            throw new KDBusinessException("500", fresult);

                        }

                    }

                }

            }

        }


        private LockStockArgs GetSubData(DynamicObject materialObj, decimal FQTY)

        {

            LockStockArgs lockStockArgs = new LockStockArgs();

            lockStockArgs.ObjectId = "STK_Inventory";//单据对象内码

            lockStockArgs.BillId = materialObj["InvDetailID"].ToString();//单据内码

            lockStockArgs.BillDetailID = "";//单据明细内码

            lockStockArgs.FInvDetailID = materialObj["InvDetailID"].ToString();//即时库存明细内码

            lockStockArgs.StockOrgID = Convert.ToInt64(materialObj["StockOrgId"]);//库存组织

            lockStockArgs.DemandOrgId = lockStockArgs.StockOrgID;//需求组织内码

            lockStockArgs.MaterialID = Convert.ToInt64(materialObj["MaterialID"]);//物料内码

            lockStockArgs.DemandMaterialId = lockStockArgs.MaterialID;//需求物料内码

            lockStockArgs.DemandDateTime = null;//需求日期

            lockStockArgs.DemandPriority = "";//需求优先级

            if (materialObj["PlanMode"] != null && materialObj["PlanMode"].ToString() == "1")

            {

                lockStockArgs.IsMto = "1";//是否MTO

            }

            lockStockArgs.BOMID = Convert.ToInt64(materialObj["BomID"]);//BomID

            lockStockArgs.AuxPropId = Convert.ToInt64(materialObj["AuxPropId"]);//辅助属性

            if (materialObj["FLOT"] != null && Convert.ToInt64(materialObj["FLOT"]) > 0)

            {

                lockStockArgs.Lot = Convert.ToInt64(materialObj["FLOT"]);////批号内码

                lockStockArgs.LotNo = Convert.ToString(materialObj["FLOTNUMBER"]);//批号编码

            }

            lockStockArgs.MtoNo = materialObj["MtoNo"].ToString();//MTO号

            lockStockArgs.ProjectNo = materialObj["ProjectNo"].ToString();//计划跟踪号

            if (materialObj["ProduceDate"] != null)

            {

                lockStockArgs.ProduceDate = DateTime.Parse(materialObj["ProduceDate"].ToString());//生成日期

            }

            if (materialObj["ExpiryDate"] != null)

            {

                lockStockArgs.ExpiryDate = DateTime.Parse(materialObj["ExpiryDate"].ToString());//有效期

            }

            lockStockArgs.STOCKID = Convert.ToInt64(materialObj["StockId"]);//仓库内码

            lockStockArgs.StockLocID = Convert.ToInt64(materialObj["StockLocID"]);//仓位内码

            lockStockArgs.StockStatusID = Convert.ToInt64(materialObj["StockStatusID"]);//仓库状态

            lockStockArgs.OwnerTypeID = materialObj["OwnerTypeId"].ToString();//货主类型

            lockStockArgs.OwnerID = Convert.ToInt64(materialObj["OwnerID"]);//货主

            lockStockArgs.KeeperTypeID = materialObj["KeeperTypeId"].ToString();//保管者类型

            lockStockArgs.KeeperID = Convert.ToInt64(materialObj["KeeperID"]);//保管者

            lockStockArgs.UnitID = Convert.ToInt64(materialObj["UnitID"]);//库存单位

            lockStockArgs.BaseUnitID = Convert.ToInt64(materialObj["BaseUnitID"]);//基本单位

            lockStockArgs.SecUnitID = Convert.ToInt64(materialObj["SecUnitID"]);//辅助单位

                                                                                //lockStockArgs.LockQty = decimal.Parse(materialObj["LockQty"].ToString());//锁库数量

                                                                                //lockStockArgs.LockBaseQty = decimal.Parse(materialObj["BaseLockQty"].ToString());//锁库数量(基本)

                                                                                //lockStockArgs.LockSecQty = decimal.Parse(materialObj["SecLockQty"].ToString());//锁库数量(辅助)

            lockStockArgs.LockQty = FQTY;//锁库数量

            lockStockArgs.LockBaseQty = FQTY;//锁库数量(基本)

            lockStockArgs.LockSecQty = 0;//锁库数量(辅助)


            //object obj2 = materialObj["ReserveDate"];

            //if (obj2 != null && !string.IsNullOrWhiteSpace(obj2.ToString()))

            //{

            lockStockArgs.ReserveDate = DateTime.Now;//锁库日期

                                                     //}

                                                     //lockStockArgs.ReserveDays = Convert.ToInt32(materialObj["ReserveDays"]);//锁库天数

                                                     //obj2 = materialObj["ReleaseDate"];

                                                     //if (obj2 != null && !string.IsNullOrWhiteSpace(obj2.ToString()))

                                                     //{

                                                     // lockStockArgs.ReLeaseDate = DateTime.Parse(obj2.ToString());//预计解锁日期

                                                     //}

                                                     //lockStockArgs.SupplyNote = Convert.ToString(materialObj["SupplyNote"]);//供应备注

                                                     //lockStockArgs.RequestNote = lockStockArgs.SupplyNote;//需求备注

            return lockStockArgs;

        }


        private long GetDynamicValue(DynamicObject obj)

        {

            if (obj == null)

            {

                return 0L;

            }

            if (obj.DynamicObjectType.Properties.ContainsKey(FormConst.MASTER_ID))

            {

                return Convert.ToInt64(obj[FormConst.MASTER_ID]);

            }

            if (obj.DynamicObjectType.Properties.ContainsKey("Id"))

            {

                return Convert.ToInt64(obj["Id"]);

            }

            return 0L;

        }

    }


    [Description("发货通知单释放预留")]

    public class SaveUnLockInfo : AbstractOperationServicePlugIn

    {

        public override void OnPreparePropertys(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgs e)

        {

            e.FieldKeys.Add("FID");

            base.

7.6版本以下锁库和解锁二开示例

using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.K3.Core.SCM.STK;using K...
点击下载文档文档为doc格式

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

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