Acumatica:销售订单利润计算错误

时间:2016-06-13 16:24:12

标签: acumatica

  

我试图在SOLine级别上进行一些简单的计算   (文档详细信息网格)和SOOrder级别(订单摘要区域)。

     

感谢另一个stackoverflow用户,我得到了第一个SOLine   计算结果(字段称为总利润(Ext Price - Ext   成本)。现在,我正在尝试计算总计的百分比   利润除以Ext价格(在SOLine级别),但我有   的问题。这是可能的吗?功能似乎没有   认识新领域。所以我这样做了,它给了一个   “不能除以零”的错误......这是错的吗?

     

这是我第一次尝试新的自定义字段(TotalProfit字段已经定义并且   确认工作 - 但我遇到了这个GP%的问题):

    [PXUIField(DisplayName = "GP %", Enabled = false)]
    [PXFormula(typeof(Div<SOLine.curyTotalProfit, SOLine.curyLineAmt>))]
    [PXDefault(TypeCode.Decimal, "0.0")]
     

这是我尝试的第二个采用总利润公式   并将结果除以Ext price(curylineamt)

    [PXUIField(DisplayName = "GP %", Enabled = false)]
    [PXFormula(typeof(Div<Sub<SOLine.curyLineAmt, SOLine.curyExtCost>,SOLine.curyLineAmt>))]
    [PXDefault(TypeCode.Decimal, "0.0")]
     

我需要做的第二件事是显示(在订单摘要上)   等级)1。所有SOLINE TotalProfit和2.百分比的总和   每条线的总利润除以总费用。    - 对于这个,我知道我必须定义pxparent属性,但我的所有尝试都失败了。这是我试过的:

     

我创建了两个新字段 - (一个用于货币考虑):

    **(FIRST FIELD):**
    [PXParent ( typeof(Select<SOOrder,Where<SOLine.OrderNbr, Equal<Current<SOOrder.OrderNbr>>>>))]
    [PXDBCurrency(typeof(SOOrder.curyInfoID), typeof(SOOrder.usrOrderTotalProfit))]
    [PXUIField(DisplayName = "Total Profit", Enabled = false)]
    [PXFormula(null, typeof(SumCalc<SOLine.usrCuryTotalProfit>))]
    [PXDefault(TypeCode.Decimal, "0.0")]

    **(SECOND FIELD):**
    [PXDBDecimal(4)]
    [PXDefault(TypeCode.Decimal, "0.0")]
     

当我尝试发布这个时,我会收到错误,说明类型名称   不存在,并且说它是一个属性但是被用作一个   类型。

     

这些似乎应该被纳入Acumatica,但事实并非如此。   非常感谢任何帮助。

更新

嗨德米特里,非常感谢您的回复。我仍然坚持GP%一...我正在尝试计算我的自定义字段(UsrCuryTotalProfit)除以curyLineAmt。这是UsrCuryTotalProfit字段的属性:

    [PXDBCurrency(typeof(SOLine.curyInfoID), typeof(SOLineExt.usrTotalProfit))] 
    [PXUIField(DisplayName = "Total Profit", Enabled = false)]               
    [PXFormula(typeof(Sub<SOLine.curyLineAmt, SOLine.curyExtCost>))]    
    [PXDefault(TypeCode.Decimal, "0.0")] 

所以,我将此用于我的GP%字段:

    [PXUIField(DisplayName = "GP %", Enabled = false)] 
    [PXFormula(typeof(Div<SOLineExt.usrTotalProfit, SOLine.curyLineAmt>))] 
    [PXDefault(TypeCode.Decimal, "0.0")] 

它发布得很好,但当我进入销售订单屏幕并尝试在网格中添加一行时,它会给我一个错误:“尝试除以零”。我还在做错吗?

我想知道这是否与没有任何费用或价格信息的行有关,但是在我输入任何内容之前公式试图划分...不确定如何解决。

1 个答案:

答案 0 :(得分:1)

[PXUIField(DisplayName = "GP %", Enabled = false)]
[PXFormula(typeof(Div<SOLineTotalProfit, SOLine.curyLineAmt>))]
[PXDefault(TypeCode.Decimal, "0.0")]

您尝试发布此实际代码吗? 我认为此代码中存在拼写错误。应该是这样的:

[PXFormula(typeof(Div<SOLine.curyTotalProfit, SOLine.curyLineAmt>))]

您的父属​​性也不正确。您应该选择与当前记录匹配的父表。像那样:

[PXParent(typeof(Select<SOOrder,Where<SOOrder.orderNbr, Equal<Current<SOLine.orderNbr>>>>))]

但是,此类属性已存在于SOLine类中,您无需再次放置它。

您的公式

[PXFormula(null, typeof(SumCalc<SOLine.usrCuryTotalProfit>))]

应放在SOLine.usrCuryTotalProfit字段中。在第二个参数中,您应指定应存储结果的父DAC的字段。 父母和公式属性在T200培训第7课中得到了很好的阐述。

因此代码中存在多个错误。你还应该多注意第一个字母的情况。

以下是T100培训的引用:

  

抽象类和属性具有相同的名称,因第一个字母的大小写而异。通过   约定,抽象类名称以小写字母开头,而属性名称以   相同的大写字母。在BQL语句中,数据字段由抽象类名称

引用

Visual Studio是修复拼写错误和字母大小写的好工具。 您可以在visual studio中轻松打开自定义:

  1. 转到自定义项目
  2. 点击您的项目
  3. 点击扩展程序库 - &gt;新建
  4. 浏览器将下载* .bat文件,该文件将在visual studio中打开您的自定义。
  5. 您将能够查看和修复编译错误,使用自动完成和语法突出显示。
  6. 更新:

      

    我想知道这是否与没有任何费用或价格信息的行有关,但是在我输入任何内容之前公式试图划分...不确定如何解决。

    看起来你是对的。你可以这样解决它:

     [PXFormula(typeof(Switch<Case<Where<SOLine.curyLineAmt, Equal<decimal0>>, decimal0>, Div<SOLineExt.usrTotalProfit, SOLine.curyLineAmt>>))] 
    

    此外,我认为在这种情况下你应该使用SOLINEExt.curyUsrTotalProfit。