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

2020-09-29 20:05发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个产品的价格行中有6个小数...

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

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


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

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

4条回答
我是小鹏鹏啊
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中的提升将对舍入产生影响。

一周热门 更多>