检索货币特定价格表

2020-09-04 14:58发布

         点击此处--->   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的价格。

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

         点击此处--->   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
1楼 · 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)"部分中添加一个返回值。

土豆飞人
2楼-- · 2020-09-04 15:58

您好,Ralph,

感谢您努力收集这种怪兽中可用的东西。 我尝试了许多不同的过滤,但没有一个返回我的"特定货币价格表"。 正如您在我自己的答案中看到的那样,我最终不得不手动进行过滤。

关于您建议调用SAP自己的Web服务的建议,我希望不要走这条路,因为这样做的开销太大。

下一个实施方式,我计划仅订阅SalesPriceList的Event-BeforeSave并以更易读的格式存储定价信息。

如果开发团队将添加几个简单的功能以使将来"花钱"的麻烦减少,我将不胜感激。 诸如此类:具有以下参数的GetPrice,GetDiscount,GetDiscountedPrice:BusinessPartnerID,ProductID,数量(根据您的喜好进行扩展)。

悠然的二货
3楼-- · 2020-09-04 15:49

Vicent,您的线程有很多问题。 下次,可以创建其他主题。

最后4个过滤器甚至可以做什么?

您可以找到此处快速解释(产品= CND_PRODUCT_ID + CND_PRODUCT_ID_TYPE_CODE + CND_PRODUCT_TYPE_COD。

有关< 关于所有这些评估属性及其支持的值的hraf=" https://launchpad.support.sap.com/#/notes/1398753"> SAP注释1398753 。

我可以通过过滤.. ,ElementPropertyValue.ID.content ==我的产品密钥来过滤特定产品吗?

我担心吗

我看到这段代码只返回基本价格表,为什么呢?如何使其返回特定于货币的价格表呢?

与货币相关的价格应该是同一查询的结果。此处是视频 如何 配置(感谢 Murthy V )。 在使用 ws查询服务的测试中,它们出现了。

PS:我还建议您看一下如何使用Web服务检索价格表。 恕我直言,一种更简单(又优雅)的方法。 此处是使用Odata的示例,而使用旧学校的SOAP。



一周热门 更多>