Ejemplo n.º 1
0
        public static string UnLockInventory(Context ctx, DynamicObjectCollection dyUnLockInfo, string formId)
        {
            if (dyUnLockInfo == null || dyUnLockInfo.Count < 1)
            {
                return("");
            }

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

            foreach (DynamicObject dynEntry in dyUnLockInfo)
            {
                LockStockArgs arg = new LockStockArgs
                {
                    FEntryID      = Convert.ToInt64(dynEntry["Id"]),
                    FInvDetailID  = Convert.ToString(dynEntry["FInvDetailID"]),
                    BillDetailID  = Convert.ToString(dynEntry["BillDetailID"]),
                    LockSecQty    = Convert.ToDecimal(dynEntry["FSECQTY"]),
                    UnLockSecQty  = Convert.ToDecimal(dynEntry["FSECQTY"]),
                    LockBaseQty   = Convert.ToDecimal(dynEntry["FBASEQTY"]),
                    UnLockBaseQty = Convert.ToDecimal(dynEntry["FBASEQTY"])
                };
                saveList.Add(arg);
            }
            if (saveList.Count > 0)
            {
                Kingdee.K3.SCM.Contracts.ServiceFactory.GetService <IStockLockService>(ctx).SaveUnLockInfo(ctx, saveList, formId);
            }
            return(string.Empty);
        }
Ejemplo n.º 2
0
        public static void LockInventory(Context ctx, IOperationResult oper, string dataSql, string formId)
        {
            //判断是否已有货审信息
            //List<long> lstIds = new List<long>();

            oper.IsSuccess = true;
            string sql = string.Format(@" select ts.*,isnull(tk.FID,'') as FINVENTORYID
                                        from ( {0} ) ts
                                        LEFT JOIN T_STK_INVENTORY tk on ts.FSTOCKORGID=tk.FSTOCKORGID and tk.FKEEPERTYPEID=ts.FKEEPERTYPEID and tk.FKEEPERID=ts.FKEEPERID
                                        and tk.FOWNERTYPEID=ts.FOWNERTYPEID and tk.FOWNERID=ts.FOWNERID and tk.FSTOCKID=ts.FSTOCKID and tk.FSTOCKLOCID=ts.FSTOCKPLACEID and tk.FAUXPROPID=ts.FAUXPROPERTYID 
                                        and tk.FSTOCKSTATUSID=ts.FSTOCKSTATUSID and tk.FLOT=ts.FLOT and tk.FBOMID=ts.FBOMID and tk.FMTONO=ts.FMTONO and tk.FPROJECTNO=ts.FPROJECTNO                                      
                                        and ISNULL(tk.FPRODUCEDATE, ISNULL(ts.FPRODUCTDATE,'')) = ISNULL(ts.FPRODUCTDATE,'') and ISNULL(tk.FEXPIRYDATE, ISNULL(ts.FVALIDATETO,'')) = ISNULL(ts.FVALIDATETO,'')  
                                        and tk.FBASEUNITID=ts.FBASEUNITID and tk.FSECUNITID=ts.FSECUNITID and tk.FMATERIALID=ts.FMATERIALID 
                                        inner join T_BD_MATERIALSTOCK MS on MS.FMATERIALID=ts.FMATERIALID and MS.FIsLockStock='1'
                                        inner join T_BD_STOCK TSK on TSK.FSTOCKID=ts.FSTOCKID AND TSK.FALLOWLOCK='1'
                                        where NOT EXISTS (SELECT 1 FROM T_PLN_RESERVELINKENTRY TKE 
                                        inner join T_PLN_RESERVELINK TKH on TKE.FID = TKH.FID WHERE TKE.FSUPPLYINTERID<>'' AND 
										TKH.FDEMANDFORMID='{1}' AND TKH.FDEMANDINTERID=ts.FID AND TKH.FDEMANDENTRYID=ts.FENTRYID )
                                ", string.Join(",", dataSql), formId);

            //配方单特殊处理
            if (formId == "PRD_PPBOM")
            {
                sql = dataSql;
            }
            DynamicObjectCollection dyLockInfo = DBUtils.ExecuteDynamicObject(ctx, sql);

            if (dyLockInfo == null || dyLockInfo.Count == 0)
            {
                return;
            }
            List <LockStockArgs> saveList = new List <LockStockArgs>();


            foreach (DynamicObject dynEntry in dyLockInfo)
            {
                if (Convert.ToString(dynEntry["FINVENTORYID"]).IsNullOrEmptyOrWhiteSpace())
                {
                    oper.ValidationErrors.Add(new ValidationErrorInfo("", Convert.ToString(dynEntry["FENTRYID"]), 1, 1, Convert.ToString(dynEntry["FENTRYID"]), "单据" + dynEntry["FBillNo"].ToString() + " 第" + Convert.ToString(dynEntry["FSeq"]) + "行物料库存不足,锁库失败!", ""));

                    continue;
                }

                LockStockArgs item = new LockStockArgs
                {
                    //ObjectId = this.objectId,
                    //BillId-单据头ID
                    ObjectId = formId,
                    BillId   = Convert.ToString(dynEntry["FID"]),
                    //BillDetailID-单据体ID
                    BillDetailID = Convert.ToString(dynEntry["FENTRYID"]),
                    //EntiryKey = this.entiryKey,
                    BillNo           = dynEntry["FBILLNO"].ToString(),
                    BillSEQ          = Convert.ToInt32(dynEntry["FSEQ"]),
                    BillTypeID       = string.Empty,
                    DemandOrgId      = 0,
                    DemandMaterialId = Convert.ToInt64(dynEntry["FMATERIALID"]),
                    StockOrgID       = Convert.ToInt64(dynEntry["FSTOCKORGID"]),
                    MaterialID       = Convert.ToInt64(dynEntry["FMATERIALID"]),
                    STOCKID          = Convert.ToInt64(dynEntry["FSTOCKID"]),
                    LockQty          = Convert.ToDecimal(dynEntry["FQTY"]),
                    Qty            = Convert.ToDecimal(dynEntry["FQTY"]),
                    LockBaseQty    = Convert.ToDecimal(dynEntry["FBASEQTY"]),
                    BaseQty        = Convert.ToDecimal(dynEntry["FBASEQTY"]),
                    UnitID         = Convert.ToInt64(dynEntry["FUNITID"]),
                    LockSecQty     = Convert.ToDecimal(dynEntry["FSECQTY"]),
                    SecQty         = Convert.ToDecimal(dynEntry["FSECQTY"]),
                    DemandPriority = "",
                    FInvDetailID   = Convert.ToString(dynEntry["FINVENTORYID"]),
                    AuxPropId      = Convert.ToInt64(dynEntry["FAUXPROPERTYID"]),
                    BOMID          = Convert.ToInt64(dynEntry["FBOMID"]),
                    KeeperID       = Convert.ToInt64(dynEntry["FKEEPERID"]),
                    KeeperTypeID   = Convert.ToString(dynEntry["FKEEPERTYPEID"]),
                    Lot            = Convert.ToInt64(dynEntry["FLOT"]),
                    MtoNo          = Convert.ToString(dynEntry["FMTONO"]),
                    StockStatusID  = Convert.ToInt64(dynEntry["FSTOCKSTATUSID"]),
                    StockLocID     = Convert.ToInt64(dynEntry["FSTOCKPLACEID"]),
                    SecUnitID      = Convert.ToInt64(dynEntry["FSECUNITID"]),
                    ProjectNo      = Convert.ToString(dynEntry["FPROJECTNO"]),
                    OwnerTypeID    = Convert.ToString(dynEntry["FOWNERTYPEID"]),
                    OwnerID        = Convert.ToInt64(dynEntry["FOWNERID"]),
                    BaseUnitID     = Convert.ToInt64(dynEntry["FBASEUNITID"]),
                    ProduceDate    = Convert.ToDateTime(dynEntry["FPRODUCTDATE"]),
                    ExpiryDate     = Convert.ToDateTime(dynEntry["FVALIDATETO"])
                };
                saveList.Add(item);
            }


            if (saveList.Count > 0)
            {
                DynamicObjectCollection objectResult = Kingdee.K3.SCM.Contracts.ServiceFactory.GetService <IStockLockService>(ctx).SaveLockInfo(ctx, saveList, formId, true);

                if (objectResult.Count > 0)
                {
                    IEnumerable <string> values = (from p in objectResult select string.Format(ResManager.LoadKDString("分录[{1}]不完全锁库(获取锁库不成功!)]原因:{2}", "004072030006502", SubSystemType.SCM, new object[0]), p["FBIZBILLNO"], p["FBILLSEQ"], p["FRESULT"])).Distinct <string>();
                    oper.IsSuccess = false;
                    oper.ValidationErrors.Add(new ValidationErrorInfo("", "", 1, 1, "1", string.Join("\n", values), ""));
                }
                if (!oper.IsSuccess && oper.ValidationErrors.Count > 0)
                {
                    throw new Exception(oper.ValidationErrors[0].Message);
                }
            }
        }