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

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

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
相关推荐
Rewloc1 小时前
Trae CN配置Maven环境
java·maven
彭于晏Yan1 小时前
MyBatis-Plus使用动态表名分表查询
java·开发语言·mybatis
Rotion_深3 小时前
C# 对Bitmap 的一些处理方法,裁剪,压缩,旋转等
图像处理·c#
秋月的私语3 小时前
如何快速将当前的c#工程发布成单文件
android·java·c#
天***88963 小时前
使用python写一个应用程序要求实现微软常用vc++功能排查与安装功能
java
Joseit3 小时前
AI应用生成平台:数据库、缓存与存储
数据库·人工智能·缓存
代码充电宝4 小时前
LeetCode 算法题【简单】283. 移动零
java·算法·leetcode·职场和发展
迎風吹頭髮5 小时前
UNIX下C语言编程与实践9-UNIX 动态库创建实战:gcc 参数 -fpic、-shared 的作用与动态库生成步骤
c语言·数据库·unix
黑马金牌编程6 小时前
深入浅出 Redis:从核心原理到运维实战指南一
数据库·redis·缓存·性能优化·非关系型数据库
李迟6 小时前
2025年9月个人工作生活总结
服务器·数据库·生活