private bool Check(CheckPara para, string formKey, string formCaption, string tableName, string entryFormKey, out string errInfor)
        {
            errInfor = "";
            QueryBuilderParemeter qbPara = GetQBPara(para, formKey, tableName, entryFormKey);

            try
            {
                DynamicObjectCollection datas = QueryServiceHelper.GetDynamicObjectCollection(para.ctx, qbPara);
                if (datas != null && datas.Count > 0)
                {
                    errInfor = string.Format("{4} 单号 {1} 物料编码 {2} 物料名称 {3}  单位酶活量{0} ", datas[0]["FJNUnitEnzymes"],
                                             datas[0]["FBillNo"],
                                             datas[0]["FMatNumber"],
                                             datas[0]["FMatName"], formCaption);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }

            return(false);
        }
Пример #2
0
        private QueryBuilderParemeter GetQBPara(CheckPara para, string formKey)
        {
            FormMetadata          formMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formKey);
            QueryBuilderParemeter qbPara       = new QueryBuilderParemeter();

            qbPara.FormId = formKey;
            if (formKey == "STK_TransferDirect")
            {
                qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And FSTOCKORGID ={1} And {2} = {3} And {4}={5} And {6} = '{7}' ",
                                                           para.unitEnzymes, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLot.FNumber", para.lotNumber);
            }
            else
            {
                qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And {1} ={2} And {3} = {4} And {5}={6} And {7} = '{8}' ",
                                                           para.unitEnzymes, formMetadata.BusinessInfo.MainOrgField.FieldName, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLot.FNumber", para.lotNumber);
            }

            if (para.currFormKey.EqualsIgnoreCase(formKey))
            {
                qbPara.FilterClauseWihtKey += string.Format(" And {0} <> {1} ", para.currEnFldName, para.currentEntryId);
            }

            qbPara.SelectItems = SelectorItemInfo.CreateItems("FBillNo,FMaterialId.FNumber as FMatNumber,FMaterialId.FName as FMatName,FJNUnitEnzymes");

            return(qbPara);
        }
Пример #3
0
        private bool TraCheck(CheckPara para, string formKey, string formCaption, out string errInfor)
        {
            errInfor = "";

            string sql = string.Format(@" select FJNUnitEnzymes,FBILLNO,FauxPropId,t3.FNUMBER as FMatNumber,t4.FNAME as FMatName,t5.FNUMBER from T_STK_STKTRANSFERIN t1 
                                    join T_STK_STKTRANSFERINENTRY t2 on t1.FID=t2.FID
                                    join T_BD_MATERIAL t3 on t2.FMATERIALID=t3.FMATERIALID
                                    join T_BD_MATERIAL_L t4 on t3.FMATERIALID=t4.FMATERIALID
                                    join T_BD_LOTMASTER t5 on t2.FLOT=t5.FLOTID where
                                    FJNUnitEnzymes <> {0} And FSTOCKORGID ={1} And  t2.FMATERIALID = {2} And FauxPropId={3} And t5.FNUMBER = '{4}' ",
                                       para.unitEnzymes, para.orgId, para.matId, para.auxPropId, para.lotNumber);


            try
            {
                DynamicObjectCollection datas = DBUtils.ExecuteDynamicObject(para.ctx, sql);
                // QueryServiceHelper.GetDynamicObjectCollection(para.ctx, qbPara);
                if (datas != null && datas.Count > 0)
                {
                    errInfor = string.Format("{4} 单号 {1} 物料编码 {2} 物料名称 {3}  单位酶活量{0} ", datas[0]["FJNUnitEnzymes"],
                                             datas[0]["FBillNo"],
                                             datas[0]["FMatNumber"],
                                             datas[0]["FMatName"], formCaption);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }

            return(false);
        }
        private bool CheckExists(CheckPara para, out string errInfor)
        {
            errInfor = "";
            if (Check(para, "PUR_ReceiveBill", "采购收料单", "T_PUR_ReceiveEntry", "FDetailEntity", out errInfor))
            {
                return(true);
            }
            if (Check(para, "PRD_INSTOCK", "生产入库单", "T_PRD_INSTOCKENTRY", "FEntity", out errInfor))
            {
                return(true);
            }
            if (Check(para, "PRD_MORPT", "生产汇报单", "T_PRD_MORPTENTRY", "FEntity", out errInfor))
            {
                return(true);
            }
            if (Check(para, "SFC_OperationReport", "工序汇报单", "T_SFC_OPTRPTENTRY", "FEntity", out errInfor))
            {
                return(true);
            }
            //if (Check(para, "PRD_ReturnMtrl", "生产退料单", "T_PRD_RETURNMTRLENTRY", "FEntity", out errInfor))
            //{
            //    return true;
            //}

            if (Check(para, "SAL_RETURNSTOCK", "销售退货单", "T_SAL_RETURNSTOCKENTRY", "FEntity", out errInfor))
            {
                return(true);
            }
            //if (Check(para, "SP_ReturnMtrl", "简单生产退料单", "T_SP_RETURNMTRLENTRY", out errInfor))
            //{
            //    return true;
            //}
            //if (Check(para, "SP_InStock", "简单生产入库单", "T_SP_INSTOCKENTRY", out errInfor))
            //{
            //    return true;
            //}

            if (Check(para, "STK_MISCELLANEOUS", "其他入库单", "T_STK_MISCELLANEOUSENTRY", "FEntity", out errInfor))
            {
                return(true);
            }

            if (Check(para, "STK_InStock", "采购入库单", "T_STK_INSTOCKENTRY", "FInStockEntry", out errInfor))
            {
                return(true);
            }
            if (Check(para, "QM_InspectBill", "检验单", "T_QM_INSPECTBILLENTRY", "FEntity", out errInfor))
            {
                return(true);
            }
            return(false);
        }
        private QueryBuilderParemeter GetQBPara(CheckPara para, string formKey, string tableName, string entryFormKey)
        {
            FormMetadata          formMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formKey);
            QueryBuilderParemeter qbPara       = new QueryBuilderParemeter();

            qbPara.FormId = formKey;
            qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And {1} ={2} And {3} = {4} And {5}={6} And {7} = '{8}' ",
                                                       para.unitEnzymes, formMetadata.BusinessInfo.MainOrgField.FieldName, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLOT_TEXT", para.lotNumber);
            if (para.currFormKey.EqualsIgnoreCase(formKey))
            {
                qbPara.FilterClauseWihtKey += string.Format(" And {2}_{0} <> {1} ", para.currEnFldName, para.currentEntryId, entryFormKey);
            }
            if (para.tableName == tableName)
            {
                qbPara.FilterClauseWihtKey += string.Format(" And FID not in ({0})", para.linkId);
            }
            qbPara.SelectItems = SelectorItemInfo.CreateItems("FBillNo,FMaterialId.FNumber as FMatNumber,FMaterialId.FName as FMatName,FJNUnitEnzymes");

            return(qbPara);
        }
        /// <summary>
        /// 校验逻辑实现
        /// </summary>
        /// <param name="dataEntities"></param>
        /// <param name="validateContext"></param>
        /// <param name="ctx"></param>
        public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx)
        {
            if (dataEntities == null)
            {
                return;
            }

            var enProp = validateContext.BusinessInfo.GetField(matFldKey).Entity.EntryName;

            this.EntityKey = enProp;
            var orgFldKey = validateContext.BusinessInfo.MainOrgField.Key;

            foreach (var dataEntity in dataEntities)
            {
                string billType = dataEntity["FBillTypeID_Id"].ToString();
                if (!(billType == "005056c00008baa211e3097d9bc0332e" || billType == "005056945db184ed11e3af2dcda7ee49"))
                {
                    continue;                                                                                                     //产品检验单\自制工序检验单
                }
                DynamicObjectCollection rows = dataEntity[enProp] as DynamicObjectCollection;
                if (rows == null || rows.Count <= 0)
                {
                    continue;
                }

                //取酶活量大于零的
                var checkRows = rows.Where(f => Convert.ToDecimal(f["FJNUnitEnzymes"]) > 0).ToList();
                if (checkRows == null || checkRows.Count() <= 0)
                {
                    continue;
                }

                //先查本单的数据
                var grp1 = (from p in checkRows
                            select new
                {
                    OrgID = long.Parse(dataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"].ToString()),
                    MatId = long.Parse(p["MaterialId_Id"].ToString()),
                    AuxId = long.Parse(p["AuxPropId_Id"].ToString()),
                    LotNumber = Convert.ToString(p["Lot_Text"]),
                    UnitEnzymes = Convert.ToDecimal(p["FJNUnitEnzymes"])
                }).Distinct().ToList();

                var grp2 = (from p in checkRows
                            select new
                {
                    OrgID = long.Parse(dataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"].ToString()),
                    MatId = long.Parse(p["MaterialId_Id"].ToString()),
                    AuxId = long.Parse(p["AuxPropId_Id"].ToString()),
                    LotNumber = Convert.ToString(p["Lot_Text"])
                }).Distinct().ToList();

                if (grp1.Count != grp2.Count)
                {
                    validateContext.AddError(dataEntity.DataEntity,
                                             new ValidationErrorInfo("FBillNo",
                                                                     Convert.ToString(((DynamicObject)(dataEntity.DataEntity))["Id"]),
                                                                     dataEntity.DataEntityIndex,
                                                                     dataEntity.RowIndex,
                                                                     "JN-InStockCheck-002",
                                                                     string.Format("保存失败:启用双计量单位的物料,公司+物料+辅助属性+批号所对应的单位酶活量有多个!", dataEntity.BillNo),
                                                                     "金蝶提示", ErrorLevel.Warning));
                    continue;
                }

                //查数据库后台的数据
                foreach (var item in checkRows)
                {
                    var matVal = item["MaterialId"] as DynamicObject;
                    if (matVal == null)
                    {
                        continue;
                    }
                    CheckPara para = new CheckPara();
                    para.lotNumber = item["Lot_Text"].ToString();
                    if (para.lotNumber.Length == 0)
                    {
                        continue;
                    }
                    DynamicObjectCollection linkData = item["FEntity_Link"] as DynamicObjectCollection;
                    para.tableName     = linkData[0]["sTableName"].ToString();
                    para.linkId        = string.Join(",", linkData.Select(s => Convert.ToInt32(s["SBillId"])));
                    para.currEnFldName = validateContext.BusinessInfo.GetField(matFldKey).Entity.EntryPkFieldName;
                    para.orgId         = Convert.ToInt64(dataEntity.DataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"]);
                    para.matId         = Convert.ToInt64(matVal["Id"]);
                    var aux = item["AuxPropId"] as DynamicObject;
                    if (aux != null)
                    {
                        para.auxPropId = Convert.ToInt64(aux["Id"]);
                    }

                    para.unitEnzymes    = Convert.ToDecimal(item["FJNUnitEnzymes"]);
                    para.currentEntryId = Convert.ToInt64(item["Id"]);
                    para.currFormKey    = validateContext.BusinessInfo.GetForm().Id;
                    para.ctx            = ctx;

                    string errInfor = "";
                    if (CheckExists(para, out errInfor))
                    {
                        validateContext.AddError(dataEntity.DataEntity,
                                                 new ValidationErrorInfo("FBillNo",
                                                                         Convert.ToString(dataEntity.DataEntity["Id"]),
                                                                         dataEntity.DataEntityIndex,
                                                                         dataEntity.RowIndex,
                                                                         "JN-InStockCheck-002",
                                                                         string.Format("保存失败:第{1}行物料,启用双计量单位,公司+物料+辅助属性+批号所对应的单位酶活量有多个({0})!", errInfor, rows.IndexOf(item) + 1),
                                                                         "金蝶提示", ErrorLevel.Warning));
                        continue;
                    }
                }
            }
        }
Пример #7
0
        /// <summary>
        /// 校验逻辑实现
        /// </summary>
        /// <param name="dataEntities"></param>
        /// <param name="validateContext"></param>
        /// <param name="ctx"></param>
        public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx)
        {
            if (dataEntities == null)
            {
                return;
            }

            var enProp = validateContext.BusinessInfo.GetField(matFldKey).Entity.EntryName;

            this.EntityKey = enProp;

            var   orgFldKey = validateContext.BusinessInfo.MainOrgField.Key;
            Field lotFld    = validateContext.BusinessInfo.GetField(this.LotNoFldKey);
            Field matFld    = validateContext.BusinessInfo.GetField(this.MatFldKey);
            Field auxFld    = validateContext.BusinessInfo.GetField(this.AuxPropFldKey);

            foreach (var dataEntity in dataEntities)
            {
                DynamicObjectCollection rows = dataEntity[enProp] as DynamicObjectCollection;
                if (rows == null || rows.Count <= 0)
                {
                    continue;
                }

                //取酶活量大于零的
                var checkRows = rows.Where(f => Convert.ToDecimal(f["FJNUnitEnzymes"]) > 0).ToList();
                if (checkRows == null || checkRows.Count() <= 0)
                {
                    continue;
                }

                //先查本单的数据
                var grp1 = (from p in checkRows
                            select new
                {
                    OrgID = long.Parse(dataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"].ToString()),
                    MatId = long.Parse(p[matFld.PropertyName + "_Id"].ToString()),
                    AuxId = long.Parse(p[auxFld.PropertyName + "_Id"].ToString()),
                    LotNumber = Convert.ToString(p[lotFld.PropertyName + "_Text"]),
                    UnitEnzymes = Convert.ToDecimal(p["FJNUnitEnzymes"])
                }).Distinct().ToList();

                var grp2 = (from p in checkRows
                            select new
                {
                    OrgID = long.Parse(dataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"].ToString()),
                    MatId = long.Parse(p[matFld.PropertyName + "_Id"].ToString()),
                    AuxId = long.Parse(p[auxFld.PropertyName + "_Id"].ToString()),
                    LotNumber = Convert.ToString(p[lotFld.PropertyName + "_Text"])
                }).Distinct().ToList();

                if (grp1.Count != grp2.Count)
                {
                    validateContext.AddError(dataEntity.DataEntity,
                                             new ValidationErrorInfo("FBillNo",
                                                                     Convert.ToString(((DynamicObject)(dataEntity.DataEntity))["Id"]),
                                                                     dataEntity.DataEntityIndex,
                                                                     dataEntity.RowIndex,
                                                                     "JN-InStockCheck-002",
                                                                     string.Format("保存失败:启用双计量单位的物料,公司+物料+辅助属性+批号所对应的单位酶活量有多个!", dataEntity.BillNo),
                                                                     "金蝶提示"));
                    continue;
                }

                //查数据库后台的数据
                foreach (var item in checkRows)
                {
                    var matVal = matFld.GetFieldValue(item) as DynamicObject;
                    if (matVal == null)
                    {
                        continue;
                    }

                    CheckPara para = new CheckPara();
                    para.currEnFldName = validateContext.BusinessInfo.GetField(matFldKey).Entity.EntryPkFieldName;
                    para.orgId         = Convert.ToInt64(dataEntity.DataEntity[validateContext.BusinessInfo.MainOrgField.PropertyName + "_Id"]);
                    para.matId         = Convert.ToInt64(matVal["Id"]);
                    var lotVal = lotFld.GetFieldValue(item);
                    if (lotVal != null && !lotVal.IsNullOrEmptyOrWhiteSpace())
                    {
                        para.lotNumber = lotVal.ToString();
                    }
                    else
                    {
                        para.lotNumber = "";
                    }
                    var aux = auxFld.GetFieldValue(item) as DynamicObject;
                    if (aux != null)
                    {
                        para.auxPropId = Convert.ToInt64(aux["Id"]);
                    }

                    para.unitEnzymes    = Convert.ToDecimal(item["FJNUnitEnzymes"]);
                    para.currentEntryId = Convert.ToInt64(item["Id"]);
                    para.currFormKey    = validateContext.BusinessInfo.GetForm().Id;
                    para.ctx            = ctx;

                    string errInfor = "";
                    if (CheckExists(para, out errInfor))
                    {
                        validateContext.AddError(dataEntity.DataEntity,
                                                 new ValidationErrorInfo("FBillNo",
                                                                         Convert.ToString(dataEntity.DataEntity["Id"]),
                                                                         dataEntity.DataEntityIndex,
                                                                         dataEntity.RowIndex,
                                                                         "JN-InStockCheck-002",
                                                                         string.Format("保存失败:第{1}行物料,启用双计量单位,公司+物料+辅助属性+批号所对应的单位酶活量有多个({0})!", errInfor, rows.IndexOf(item) + 1),
                                                                         "金蝶提示"));
                        continue;
                    }
                }
            }
        }
Пример #8
0
        private bool CheckExists(CheckPara para, out string errInfor)
        {
            errInfor = "";
            if (Check(para, "PUR_ReceiveBill", "采购收料单", out errInfor))
            {
                return(true);
            }
            if (Check(para, "PRD_INSTOCK", "生产入库单", out errInfor))
            {
                return(true);
            }
            if (Check(para, "PRD_MORPT", "生产汇报单", out errInfor))
            {
                return(true);
            }
            if (Check(para, "SFC_OperationReport", "工序汇报单", out errInfor))
            {
                return(true);
            }
            if (Check(para, "PRD_ReturnMtrl", "生产退料单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "SAL_RETURNSTOCK", "销售退货单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "SP_ReturnMtrl", "简单生产退料单", out errInfor))
            {
                return(true);
            }
            if (Check(para, "SP_InStock", "简单生产入库单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "STK_MISCELLANEOUS", "其他入库单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "STK_InStock", "采购入库单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "STK_OEMInStock", "受托加工材料入库单", out errInfor))
            {
                return(true);
            }

            if (Check(para, "SUB_RETURNMTRL", "委外退料单", out errInfor))
            {
                return(true);
            }
            //增加直接调拨单验证
            if (TraCheck(para, "STK_TransferDirect", "直接调拨单", out errInfor))
            {
                return(true);
            }
            return(false);
        }