检索货币特定价格表

2020-09-04 14:58发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我做了一个复用功能来获取基本价格...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我做了一个复用功能来获取基本价格表。 它执行初始化步骤:

///初始化查询以定义Workcenter视图
 var qry_init = SalesPriceList.QueryByGroupCode;
 var qry_init_params = qry_init.CreateSelectionParams();
 qry_init_params.Add(qry_init.GroupCode.content," I"," EQ"," PLPRICE1"); //净价
 var qry_init_result = qry_init.Execute(qry_init_params); 

然后使用以下过滤器查询:

 TypeCode =" 7PL0"//列表中的价格
 ReleaseStatusCode =" 3"//已发布的价目表
 StartTimePoint = Context.GetCurrentUserDate()
 EndTimePoint = Context.GetCurrentUserDate()
 PriceSpecificationPropertyValuationPriceSpecificationElementPropertyValuation1.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content =" CND_PRODUCT_ID"
 PriceSpecificationPropertyValuationPriceSpecificationElementPropertyValuation2.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content =" CND_PRODUCT_ID_TYPE_CODE"
 PriceSpecificationPropertyValuationPriceSpecificationElementPropertyValuation3.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content =" CND_PRODUCT_TYPE_CODE"
 PriceSpecificationPropertyValuationPriceSpecificationElementPropertyValuation4.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content =" PRC_PRICE_LIST" 

(最后4个过滤器还有什么作用?没有解释!我假设它们定义了查询结果中的内容。有10个可能的过滤器。我还可以添加什么?我可以在特定过滤器上进行过滤吗? 通过过滤PriceSpecificationPropertyValuationPriceSpecificationElementPropertyValuation1.PriceSpecificationElementPropertyValue.ID.content ==我的产品密钥来确定产品?)

query.Execute()然后返回价目表的集合。 每个价目表都有一个PriceSpecification节点的集合。 它们每个都包含一个Amount(价格)和一个PropertyValuation(" pv")节点的集合,这些节点具有告知价格相关信息的信息。

我遍历PropertyValuation节点,如果pv.PriceSpecificationElementPropertyValuation.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content ==" CND_PRODUCT_ID",那么我可以比较pv.PriceSpecificationElementPropertyValuation.PriceSpecificationElementPropertyValue.ID.content ==我要寻找的产品。/p>

如果匹配,我将使用PriceSpecification的价格。

现在,该数据库还具有特定货币的价目表。 在调试器中,我看到此代码仅返回基本价格表。 为什么? 如何使它也返回/返回货币专用价格表?

3条回答
Bunny_CDM
2020-09-04 15:49 .采纳回答

拉尔夫(Ralph)建议他们应该出现在我的查询中(他们没有),这使我想到了一个可行的答案:只需阅读所有可以找到的内容,然后自己解决。

我将其细化为具有参数的重用函数:

ProductKey:AP.Common.GSDT:ProductInternalID

货币代码: AP.PDI.bo :字符串

结果:AP.Common.GDT:金额

导入ABSL;
 导入AP.Common.GDT;
 导入AP.FO.PriceAndTax.Global;
 导入AP.PDI.bo;

 var baseCurrency =" EUR"; //TODO:从当前公司获得
 var targetCurrency = Parameter :: CurrencyCode;
 如果(targetCurrency.IsInitial())
 {
 targetCurrency = baseCurrency;
 }


 var basePrice:金额;
 var currencyPrice:金额;


 var priceData:字符串的collection;


 如果(!ProductKey.IsInitial())
 {
//初始化查询以定义Workcenter视图
 var qry_init = SalesPriceList.QueryByGroupCode;
 var qry_init_params = qry_init.CreateSelectionParams();
 qry_init_params.Add(qry_init.GroupCode.content," I"," EQ"," PLPRICE1"); //净价
 var qry_init_result = qry_init.Execute(qry_init_params);


 var query = SalesPriceList.QueryByTypeCodeAndPropertyIDAndPropertyValue;
 var selParams = query.CreateSelectionParams();
 var queryResult = query.Execute(selParams);


 foreach(queryResult中的变量priceList
 哪里(pl =>
 pl.Status.ReleaseStatusCode ==" 3" &&
 (pl.CurrencyCode == targetCurrency || pl.CurrencyCode == baseCurrency))
 {
 var priceListID = priceList.ID.content;
 priceData.Add(priceListID);
 foreach(priceList.PriceSpecification中的var price
 哪里(ps =>
 ps.ValidityPeriod.StartTimePoint.Date <= Context.GetCurrentUserDate()&&
 ps.ValidityPeriod.EndTimePoint.Date> = Context.GetCurrentUserDate()&&
 ps.Status.ReleaseStatusCode ==" 3"))
 {
 foreach(变量propertyprice.PropertyValuation.Where(pv =>
 pv.PriceSpecificationElementPropertyValuation.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content ==" CND_PRODUCT_ID"))
 {
 var propID = propertyValuation.PriceSpecificationElementPropertyValuation.PriceSpecificationElementPropertyReference.PriceSpecificationElementPropertyID.content;
 var propValue = propertyValuation.PriceSpecificationElementPropertyValuation.PriceSpecificationElementPropertyValue.ID.content;
 priceData.Add(priceListID +"/" + propID +"/" + propValue +" =" + price.Amount.ToString());
 如果(propValue == ProductKey.content.RemoveLeadingZeros())
 {
 如果(priceList.CurrencyCode == targetCurrency)
 {
 currencyPrice =价格。金额;
 }
 如果(priceList.CurrencyCode == baseCurrency)
 {
 basePrice = price.Amount;
 }
 }
 }
 }
 }
 }


 如果(!currencyPrice.IsInitial())
 {
 返回currencyPrice;
 }
 其他
 {
 如果(!basePrice.IsInitial())
 {
 返回basePrice.ConvertCurrency(targetCurrency);
 }
 其他
 {
 返回basePrice;
 }
 }
 

这可能不是最好的方法,但是它可以与可怕的钝形结构和我们可以在其上找到的信息大杂烩结合使用。 priceData用于记录您传递的价格。 一旦满意,您可以在" if(priceList.CurrencyCode == targetCurrency)"部分中添加一个返回值。

一周热门 更多>