金蝶云星空 调价表取历史价格

因系统自带的选单新增功能,选单列表中显示不明确,业务部门习惯使用批量填充价目表,和块粘贴物料编码进行调价操作,这样就无法带出调前价格,故做此开发

csharp 复制代码
    [Description("调价单保存时获取供应商最近历史价格_逐行查询")]
    [Kingdee.BOS.Util.HotUpdate]
    public class PUR_PATSaveGetLastSupplierPricebyline : AbstractBillPlugIn
    {
        private bool doSave = false;
        private Entity ListEntity = null;
        private DynamicObjectCollection EntityRows = null;

        public override void BeforeDoOperation(BeforeDoOperationEventArgs e)
        {
            base.BeforeDoOperation(e);
            if (e.Operation.FormOperation.OperationId == 8)
            {
                ListEntity = View.BillBusinessInfo.GetEntity("FPUR_PATENTRY");
                EntityRows = this.Model.GetEntityDataObject(ListEntity);
                //this.View.ShowMessage("插件触发了保存前事件:BeforeDoOperation"+JsonConvert.SerializeObject(EntityRows));
                List<string> Matestr = new List<string>();
                if (EntityRows == null || EntityRows.Count == 0)
                {
                    return;
                }
                SuppMateInfo suppMateInfo = new SuppMateInfo();
                string MateNos = string.Empty;
                string SuppNO = string.Empty;
                foreach (DynamicObject row in EntityRows)
                {
                    // sql前缀/*dialect*/
                    MaterialItem Mateinfo = new MaterialItem();
                    if (row["SupplierId"] == null) { return; }
                    DynamicObject supplierid = row["SupplierId"] as DynamicObject;
                    DynamicObject material = row["MaterialId"] as DynamicObject;
                    SuppNO = supplierid["Number"].ToString();
                    string MateNo = Mateinfo.MateNo = material["Number"].ToString();
                    string FROMQTY = Mateinfo.FROMQTY = row["FROMQTY"].ToString();
                    string TOQTY = Mateinfo.TOQTY = row["TOQTY"].ToString();

                    if (MateNos.IsNullOrEmpty())
                    {
                        MateNos = material["Number"].ToString();
                    }
                    else
                    {
                        MateNos = MateNos + "," + material["Number"].ToString();
                    }
                    string sql = string.Format("/*dialect*/ DECLARE @SuppNO NVARCHAR(10) DECLARE @MateNOS NVARCHAR(30) DECLARE @TOQTY DECIMAL(23,10) " +
                        "DECLARE @FROMQTY DECIMAL(23,10) " +
                         "SET @SuppNO='{0}'SET @MateNOS='{1}' SET @FROMQTY={2} SET @TOQTY={3}" +
                         " EXECUTE [Proc_BHR_GetLastSupplierPrice]  @SuppNO,@MateNOS,@FROMQTY,@TOQTY", SuppNO, MateNo, FROMQTY, TOQTY);
                   //  Logger.Info("sql:", sql);
                    DynamicObjectCollection SuppMateLastPriceInfo = DBUtils.ExecuteDynamicObject(this.Context, sql);
                    if (SuppMateLastPriceInfo == null || SuppMateLastPriceInfo.Count == 0)
                    {
                        row["F_BHR_PriceSource"] = "未找到"+SuppNO+ "的物料历史定价";
                      //  Logger.Info("aaaaaaaaaaaaaaaa SuppMateLastPriceInfo ",View.Model.GetValue("F_BHR_PriceSource").ToString());
                        continue; 
                    }
                   // Logger.Info("aaaaaaaaaaaaaaaa SuppMateLastPriceInfo ", JsonConvert.SerializeObject(SuppMateLastPriceInfo));
                    foreach (DynamicObject obj in SuppMateLastPriceInfo)
                    {
                        row["BeforePrice"] = obj["FPRICE"];
                        row["BeforeTaxPrice"] = obj["FTAXPRICE"];
                        row["BeforeTaxRate"] = obj["FTAXRATE"];
                        row["F_BHR_PriceSource"] =obj["FBILLNO"] +"-"+ obj["FSEQ"].ToString();
                    }
                }
                this.View.UpdateView("FPUR_PATENTRY");
            }
            
        }
    }
sql 复制代码
-- =============================================
-- Author:		master
-- Create date: 2025-09-09
-- Description:	/*物料来源为多物料逗号分隔 分量计价取从数量在于等于历记录从数量最小的价格*/
-- =============================================
ALTER PROCEDURE [dbo].[Proc_BHR_GetLastSupplierPrice]
	 @SuppNO NVARCHAR(10),@MateNOS NVARCHAR(4000),@FROMQTY DECIMAL(23,10),@TOQTY DECIMAL(23,10)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
    WITH RateCTE AS
(SELECT TOP 1 FBEGDATE,FENDDATE, FCYFORID,FRATETYPEID,FEXCHANGERATE FROM T_BD_Rate
WHERE FCYFORID=7 AND FRATETYPEID=1 AND 	FCYTOID=1 /*FRATETYPEID=1:固定汇率 2023-05-15 修改*/ /*2024-10-07 添加  FCYFORID=7:原币美元;  目标币 人民币 AND 	FCYTOID=1*/
AND (CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(),120)) BETWEEN FBEGDATE AND FENDDATE   /* CONVERT(DATETIME, CONVERT(VARCHAR(10),DATEADD(MONTH,-1,GETDATE()),120))  财务有可能在月初没有录入当月汇率*/
OR CONVERT(DATETIME, CONVERT(VARCHAR(10),DATEADD(MONTH,-1,GETDATE()),120)) BETWEEN FBEGDATE AND FENDDATE)
ORDER BY FBEGDATE DESC/* CONVERT(DATETIME, CONVERT(VARCHAR(10),DATEADD(MONTH,-1,GETDATE()),120))  财务有可能在月初没有录入当月汇率*//* CONVERT(DATETIME, CONVERT(VARCHAR(10),DATEADD(MONTH,-1,GETDATE()),120))  财务有可能在月初没有录入当月汇率*/
),MateList AS(
SELECT ROW_NUMBER() OVER(PARTITION BY p.FSUPPLIERID,pe.FMATERIALID ORDER BY pe.FEFFECTIVEDATE DESC,pe.FEXPIRYDATE DESC,pe.FFROMQTY ASC) ROWID /* pe.FEFFECTIVEDATE DESC,pe.FEXPIRYDATE DESC,pe.FPRICE DESC*/
,p.FNUMBER AS FBILLNO,m.FNUMBER FMATERIALNO,p.FID,p.FSUPPLIERID,vs.FNUMBER FSUPPLIERNO
,pe.FTAXPRICE
,CASE p.FCURRENCYID WHEN 1 THEN 1 ELSE ISNULL(r.FEXCHANGERATE, 1) END AS FEXCHANGERATE /*汇率*/
,pe.FTAXPRICE * CASE p.FCURRENCYID WHEN 1 THEN 1 ELSE ISNULL(r.FEXCHANGERATE, 1) END AS FTAXRATEPRICE /*本位币含税*/
,pe.FTAXRATE
,pe.FEFFECTIVEDATE
,pe.FEXPIRYDATE
,pe.FPRICE
,pe.FPRICE * CASE p.FCURRENCYID WHEN 1 THEN 1 ELSE ISNULL(r.FEXCHANGERATE, 1) END AS FRATEPRICE /*本位币不含税*/
,CASE p.FCURRENCYID WHEN 1 THEN 0 ELSE r.FRATETYPEID END AS FRATETYPEID
,pe.FFROMQTY /*2025-08-28 添加分量计价从数量*/
,pe.FTOQTY/*分量计价到数量*/
,pe.FENTRYID
,pe.FSEQ
,pe.FMATERIALTYPEID
,pe.FMMASTERID
,pe.FPROCESSORGID
,p.FISINCLUDEDTAX/*是否含税*/
,p.FDEFPRICELISTID/*是否默认价目表*/
FROM T_PUR_PRICELIST  p /*(价目表)*/
JOIN dbo.T_PUR_PRICELISTENTRY pe ON pe.FID = p.FID --AND pe.FEXPIRYDATE>GETDATE() /* 失效日大于当天-- CONVERT(NVARCHAR(10),,112)>CONVERT(NVARCHAR(10),GETDATE(),112)*/ /*AND FTOQTY=0*/
LEFT JOIN RateCTE r ON r.FCYFORID=p.FCURRENCYID /*汇率*/
JOIN (SELECT s.FSUPPLIERID,s.FNUMBER,sl.FNAME,sl.FSHORTNAME FROM dbo.T_BD_SUPPLIER s JOIN dbo.T_BD_SUPPLIER_L sl ON s.FSUPPLIERID = sl.FSUPPLIERID AND sl.FLOCALEID=2052) vs /*供应商*/
ON vs.FSUPPLIERID = p.FSUPPLIERID
JOIN dbo.Vw_BD_MATERIAL_BASE m ON pe.FMATERIALID = m.FMATERIALID_ID  AND FERPCLSID=1
WHERE vs.FNUMBER=@SuppNO AND m.FNUMBER IN(SELECT FID FROM dbo.fn_StrSplit(@MateNOS,','))/*物料来源为多物料逗号分隔*/
--AND pe.FFROMQTY<=@FROMQTY -- pe.FTOQTY=@TOQTY 
)
SELECT * FROM MateList WHERE MateList.ROWID=1
相关推荐
jc06205 小时前
4.1-中间件之Redis
数据库·redis·中间件
Elastic 中国社区官方博客5 小时前
介绍 Python Elasticsearch Client 的 ES|QL 查询构建器
大数据·开发语言·数据库·python·elasticsearch·搜索引擎·全文检索
一叶难遮天5 小时前
Android面试指南(八)
java·设计模式·数组·hashmap·string·android面试·匿名内部类
产幻少年5 小时前
maven
java·maven
独行soc5 小时前
2025年渗透测试面试题总结-60(题目+回答)
java·python·安全·web安全·adb·面试·渗透测试
TG_yunshuguoji5 小时前
阿里云国际代理:云数据库RDS及上云方案
服务器·数据库·阿里云·云计算
Seven976 小时前
剑指offer-29、最⼩的k个数
java
FOLLOW ME3116 小时前
MySQL集群高可用架构
数据库·mysql·架构
TG_yunshuguoji6 小时前
阿里云国际代理:稳定、高效、便捷的数据库服务-云数据库RDS
运维·服务器·数据库·阿里云·云计算