金蝶云星空 调价表取历史价格
因系统自带的选单新增功能,选单列表中显示不明确,业务部门习惯使用批量填充价目表,和块粘贴物料编码进行调价操作,这样就无法带出调前价格,故做此开发
[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");}}}
-- =============================================
-- 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