当订单项价格的小数点后两位以上时,则无法应用促销

2020-09-29 20:05发布

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

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


我有一个产品的价格行中有6个小数位。 一旦我评估了晋升,就算术例外。 请确认是否还有其他方法可以计算小数点后6位的促销。 促销活动已正确应用,价格小数点后两位。

请告诉我们它是否有错误或存在任何解决方法。

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

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


我有一个产品的价格行中有6个小数位。 一旦我评估了晋升,就算术例外。 请确认是否还有其他方法可以计算小数点后6位的促销。 促销活动已正确应用,价格小数点后两位。

请告诉我们它是否有错误或存在任何解决方法。

付费偷看设置
发送
4条回答
我是小鹏鹏啊
1楼 · 2020-09-29 20:39.采纳回答

亲爱的查尔斯,

我检查并比较了6.1和6.2之间的代码库,发现以下分析。

在AbstractCommerceRAOAction类第226行中创建createOrderEntryConsumedRAO()时获取了异常

  **受保护的OrderEntryConsumedRAO createOrderEntryConsumedRAO(OrderEntryRAO orderEntryRAO,整数数量,BigDecimal折扣值)
  {
      OrderEntryConsumedRAO orderEntryConsumed = new OrderEntryConsumedRAO();//221
      orderEntryConsumed.setOrderEntry(orderEntryRAO);//222
      orderEntryConsumed.setQuantity(quantity);//223
      BigDecimal basePrice = orderEntryRAO.getBasePrice();//225
      BigDecimal调整后的UnitPrice = basePrice.subtract(discountValue).setScale(2);//226
      orderEntryConsumed.setAdjustedUnitPrice(adjustedUnitPrice);//228
      return orderEntryConsumed;//230
  } **

  

类似地,在6.2代码库中,不赞成使用该方法,而是从AbstractRuleExecutableSupport类使用createOrderEntryConsumedRAO()方法。 在这里,如果我们看到方法createOrderEntryConsumedRAO()依次调用getOrderUtils()。applyRounding(),则舍入处理如下。

受保护的OrderEntryConsumedRAO createOrderEntryConsumedRAO(OrderEntryRAO orderEntryRAO,整数数量,BigDecimal折扣值){OrderEntryConsumedRAO orderEntryConsumed = new OrderEntryConsumedRAO(); orderEntryConsumed.setOrderEntry(orderEntryRAO); orderEntryConsumed.setQuantity(quantity); BigDecimal basePrice = orderEntryRAO.getBasePrice(); BigDecimal AdjustedUnitPrice = basePrice.subtract(discountValue); BigDecimal roundedAdjustedUnitPrice = this.getOrderUtils().applyRounding(adjustedUnitPrice,orderEntryRAO.getCurrencyIsoCode()); orderEntryConsumed.setAdjustedUnitPrice(roundedAdjustedUnitPrice); 返回orderEntryConsumed; }

OrderUtils

  public BigDecimal applyRounding(BigDecimal price,String currencyIsoCode){
      BigDecimal roundedPrice = null;
      如果(Objects.nonNull(price)){
          可选比例= this.getDigitsOfCurrency(currencyIsoCode);
          roundedPrice =(BigDecimal)scale.map((d)-> {
              返回price.setScale(d.intValue(),RoundingMode.HALF_EVEN);
          })。orElse(price);
      }

      返回roundedPrice;
  }

  

请确认分析是否正确,并且6.1中的提升将对舍入产生影响。

CPLASF-自律
2楼-- · 2020-09-29 20:23

嗨,索普潘,

您是对的。 我之前已经用6.2进行过测试,但是没有发生此问题。 对于6.1,存在算术异常。

您仍然需要提出产品支持票证才能通过官方补丁进行修复。

如果您可以访问Wiki页面,则这里是常规信息: https ://wiki.hybris.com/display/SUP/SAP+Hybris+Product+Support+General+Information

链接到SAP支持门户: https://support.sap.com/contactus

SAP小菜
3楼-- · 2020-09-29 20:28

您可以通过设置所用货币的Currency.digits属性来配置小数位数。 这也将适用于价格计算和促销,即基本价格,订单项价格和促销折扣将包含配置的小数位数,具体取决于产品价格中的小数位数。

在这种情况下,您不应获得晋升的例外。 发布更多有关该异常的详细信息,以防万一您仍然可以得到它。

SAP小菜
4楼-- · 2020-09-29 20:37

嗨,索普潘,

我在我们这方面进行了验证,但没有算术异常发生。 您将必须报告产品支持问题以及详细信息,以便进一步调查。

一周热门 更多>