工序转移单上通过采购价目表表体自定义基础资料字段和自定义辅助资料字段来自动匹配和获取采购价目表

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

工序转移单上通过采购价目表表体自定义基础资料字段和自定义辅助资料字段来自动匹配和获取采购价目表

【应用场景】

采购价目表表体自定义基础资料字段和自定义辅助资料字段后,如何在工序转移单上自动匹配采购价目表


【注意事项】

该实现方案仅支持在工序转移单上匹配采购价目表


【实现步骤】

<1>首先需要在BOSIDE上维护好采购价目表上维护基础资料的类型或者是辅助资料的类型。

<2>采购价目表上维护好新增的基础资料的信息,用于后面匹配采购价目表的条件。

<3>还需要通过BOSIDE二开一下工序转移单,新增一个基础资料,基础资料的类型是采购价目表上的类型。

<4>注册自定义的表单插件,该插件继承自OperationTransferEdit,需要扩展1个方法:DataChanged,参考代码如下:

        /// <summary>
        /// 当字段数据变化触发
        /// </summary>
        /// <param name="e"></param>
        public override void DataChanged(DataChangedEventArgs e)
        {
            base.DataChanged(e);

            switch (e.Field.Key)
            {
                case "FBase":
                    this.BaseDataChanged(e);
                    break;
                default:
                    break;
            }
        }
private void BaseDataChanged(DataChangedEventArgs e)
        {
            DynamicObject outSrcData = null;
            var product = this.Model.GetValue<DynamicObject>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FProductId);
            if (product == null) throw new ArgumentNullException("KEY_FProductId");
            long msterId = Convert.ToInt64(product["msterID"]);
            // 加工组织
            long processOrgId = this.Model.GetValue<long>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInProOrgId,
                e.Row);
            // 作业
            long processMasterId = 0;
            if (
                this.Model.GetValue<DynamicObject>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInProcessId, e.Row) !=
                null)
            {
                processMasterId =
                    Convert.ToInt64(
                        this.Model.GetValue<DynamicObject>(
                            CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInProcessId, e.Row)["msterID"]);
            }
            //计价单位
            long valUnitId =
                this.Model.GetValue<long>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendValuationUnitId, e.Row);
            //供应商
            long supplierMasterId = 0;
            if (
                this.Model.GetValue<DynamicObject>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInSupplier, e.Row) !=
                null)
            {
                supplierMasterId =
                    Convert.ToInt64(
                        this.Model.GetValue<DynamicObject>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInSupplier,
                            e.Row)["msterID"]);
            }
            //采购组织
            long purOrgId = this.Model.GetValue<long>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInPurOrgId, e.Row);
            // 辅助属性id
            long auxiliaryId = Convert.ToInt64(this.Model.DataObject["ProAuxPropId_Id"]);
            DynamicObject auxiliary = this.Model.DataObject["ProAuxPropId"] as DynamicObject;
            //计价数量
            DynamicObject opt = GetOpt();
            decimal valQty = Convert.ToDecimal(opt["ValuationQty"]);

            DynamicObjectCollection dy = product["MaterialAuxPty"] as DynamicObjectCollection;
            //获取影响价格的辅助属性维度
            string[] auxPropIds = (from s in dy
                where Convert.ToBoolean(s["IsAffectPrice"]) == true
                select s["AuxPropertyId_Id"].ToString()).ToArray();
            //工序转移单创建的时间
            DateTime transDateCreateTime =
                Convert.ToDateTime(this.View.Model.GetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FBillDate));

            //币别
            long outSrcCurrency = Convert.ToInt64(opt["OutSrcCurrency_Id"]);

            //二开新增的字段在这边获取一下
            long baseTestId = this.Model.GetValue<long>("FBase", e.Row);
            string sqlStr = string.Format(GetPriceDataFilterBySupplier(),
                Convert.ToDateTime(opt["OperPlanStartTime"]), msterId, processMasterId, valQty, 5, supplierMasterId,
                purOrgId, processOrgId, valUnitId, transDateCreateTime, outSrcCurrency, baseTestId);
            DynamicObjectCollection results = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlStr);
            if (auxPropIds.Length > 0 && results.Count > 0)
            {
                foreach (var Tempresult in results)
                {
                    if (OperationPlanning4TransferServiceHelper.CheckAuxProp(this.Context, auxiliary, product,
                        Convert.ToInt64(Tempresult["FAUXPROPID"])))
                    {
                        outSrcData = Tempresult;
                    }

                }
            }
            else
            {
                if (results.Count > 0) //原则是有供应商的取有供应商的采购价目表
                {
                    outSrcData = results[0];
                }
            }
            if (outSrcData != null)
            {
                // supplierByPriceList = true;
                this.Model.SetValue("FPriceList", outSrcData["FID"], e.Row);
            }
            //else
            //{
            //    this.View.Model.SetItemValueByID("FPriceList", null, e.Row);
            //    // 清除价格信息,由于手动清除采购价目表时并不清除价格信息,所以将清除代码放在供应商清除方法里,而不是放在采购价目表的清除方法里
            //    ClearPriceInfo(e.Row);
            //}
            TaxRateBySupplierDataChanged(e);
        }
/// <summary>
        /// 获取根据供应商查询采购价目表的sql(同时查询供应商为空的采购价目表)
        /// </summary>
        /// <returns></returns>
        private string GetPriceDataFilterBySupplier()
        {
            return @"SELECT 
                        T0.FPRICE ,
                        T0.FTAXPRICE ,
                        T0.FPUBLICWASTEPRICE,
                        T0.FPUBLICWASTETAXPRICE,
                        T0.FWASTEPRICE,
                        T0.FWASTETAXPRICE,
                        T1.FCURRENCYID,
                        T0.FUNITID,
                        T0.FTAXRATE,
                        T1.FID,
                        T0.FAUXPROPID
                        FROM T_PUR_PRICELISTENTRY T0 INNER JOIN T_PUR_PRICELIST T1 ON T0.FID=T1.FID
                        JOIN T_BD_UNIT U ON U.FUNITID=T0.FUNITID
                        JOIN T_BD_UNITCONVERTRATE UR ON UR.FCURRENTUNITID=U.FUNITID
                        JOIN T_BD_MATERIAL M ON M.FMATERIALID=T0.FMATERIALID
                        WHERE T1.FDOCUMENTSTATUS='C' AND T1.FFORBIDSTATUS='A' 
                        AND t1.FFORBIDSTATUS='A' AND t0.FDISABLESTATUS='B'
                        AND T0.FDISABLESTATUS='B' AND (T0.FEFFECTIVEDATE<={{ts '{0}'}} OR T0.FEFFECTIVEDATE<={{ts '{9}'}}) AND T0.FEXPIRYDATE>={{ts '{0}'}} 
                        AND U.FDOCUMENTSTATUS='C' AND U.FFORBIDSTATUS='A' AND T0.FPRICE>0
                        AND M.FMASTERID={1} AND (T0.FProcessId in (select A.Fid from T_ENG_PROCESS A where A.fmasterid={2} ) )
                        AND (T0.FTOQTY*UR.FCONVERTNUMERATOR/UR.FCONVERTDENOMINATOR>={3} OR T0.FTOQTY=0)
                        AND T1.FPRICETYPE='{4}'
                        AND  ( ( T1.FSUPPLIERID in (select S.fsupplierid from t_bd_supplier S
                            where S.fmasterid={5} )) or T1.FSUPPLIERID=0 )
                        AND T1.FCREATEORGID={6}
                        AND T0.FPROCESSORGID={7}
                        AND T0.FUnitId={8} 
                        AND T0.FROWAUDITSTATUS = 'A'
                        AND T1.FCURRENCYID={10}
                        AND T0.FDEFBASEDATAO={11}    
                        GROUP BY T1.FID,T0.FENTRYID,T0.FTOQTY,T0.FPRICE,T0.FTAXPRICE,T0.FPUBLICWASTEPRICE,T0.FPUBLICWASTETAXPRICE,T0.FWASTEPRICE,T0.FWASTETAXPRICE,T0.FUNITID,T0.FTAXRATE,T1.FCURRENCYID,T0.FEFFECTIVEDATE,T1.FSUPPLIERID,T0.FAUXPROPID,T0.FDEFBASEDATAO 
                        ORDER BY T0.FTOQTY ASC,T0.FEFFECTIVEDATE DESC,T1.FSUPPLIERID DESC ";
        }

        /// <summary>
        /// 获得工序
        /// </summary>
        /// <returns></returns>
        private DynamicObject GetOpt()
        {
            long inOperId = this.Model.GetValue<long>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FInOperId);
            DynamicObject opt = OperationPlanning4TransferServiceHelper.GetOperData(this.Context, inOperId);
            return opt;
        }
        /// <summary>
        /// 供应商变化后, 赋值税率
        /// </summary>
        /// <param name="e"></param>
        private void TaxRateBySupplierDataChanged(DataChangedEventArgs e)
        {
            //供应商为空
            if (e.NewValue == null || string.IsNullOrEmpty(e.NewValue.ToString()) || "0".Equals(e.NewValue.ToString()))
            {
                this.Model.SetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendTaxRate, 0, e.Row);
            }
            else if (this.Model.GetValue<decimal>(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendTaxRate, e.Row) ==
                     decimal.Zero) // 供应商不为空,且税率为空
            {
                // 税率=供应商.默认税率.税率
                FormMetadata metadata = MetaDataServiceHelper.Load(this.Context, "BD_Supplier") as FormMetadata;
                DynamicObject supplierInfo = BusinessDataServiceHelper.LoadSingle(this.Context, e.NewValue,
                    metadata.BusinessInfo.GetDynamicObjectType());
                DynamicObject supplierFinance =
                    supplierInfo.GetDynamicObjectItemValue<DynamicObjectCollection>("SupplierFinance").FirstOrDefault();
                DynamicObject taxRateId = supplierFinance.GetDynamicObjectItemValue<DynamicObject>("TaxRateId");
                if (taxRateId != null)
                {
                    decimal taxRate = taxRateId.GetDynamicObjectItemValue<decimal>("TaxRate");
                    this.Model.SetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendTaxRate, taxRate, e.Row);

                    decimal tempQulityPrice =
                        this.Model.GetValue<decimal>(
                            CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendQualifiedTaxPrice, e.Row);
                    decimal quliytPrice = tempQulityPrice / (1 + taxRate / 100);
                    this.Model.SetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendQualifiedPrice, quliytPrice,
                        e.Row);

                    decimal tempFailPrice =
                        this.Model.GetValue<decimal>(
                            CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendProFailTaxPrice, e.Row);
                    decimal failPrice = tempFailPrice / (1 + tempFailPrice / 100);
                    this.Model.SetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendProFailPrice, failPrice,
                        e.Row);

                    decimal tempMatFailPrice =
                        this.Model.GetValue<decimal>(
                            CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendMatFailTaxPrice, e.Row);
                    decimal matFailPrice = tempMatFailPrice / (1 + tempMatFailPrice / 100);
                    this.Model.SetValue(CONST_SFC_OperationTransfer.CONST_FBillHead.KEY_FSendMatFailPrice, matFailPrice,
                        e.Row);

                }
            }
        }

<4>注册表单插件,保存元数据,开发完毕。




【参考资料】

【二开案例.基础资料.联动查询(GetValue)】

https://vip.kingdee.com/article/127710528226504960



【金蝶云星空BOS二次开发案例演示】

https://vip.kingdee.com/article/94751030918525696



工序转移单上通过采购价目表表体自定义基础资料字段和自定义辅助资料字段来自动匹配和获取采购价目表

【应用场景】采购价目表表体自定义基础资料字段和自定义辅助资料字段后,如何在工序转移单上自动匹配采购价目表【注意事项】该实现方案仅支...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息