我试图在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")]
它发布得很好,但当我进入销售订单屏幕并尝试在网格中添加一行时,它会给我一个错误:“尝试除以零”。我还在做错吗?
我想知道这是否与没有任何费用或价格信息的行有关,但是在我输入任何内容之前公式试图划分...不确定如何解决。
答案 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中轻松打开自定义:
更新:
我想知道这是否与没有任何费用或价格信息的行有关,但是在我输入任何内容之前公式试图划分...不确定如何解决。
看起来你是对的。你可以这样解决它:
[PXFormula(typeof(Switch<Case<Where<SOLine.curyLineAmt, Equal<decimal0>>, decimal0>, Div<SOLineExt.usrTotalProfit, SOLine.curyLineAmt>>))]
此外,我认为在这种情况下你应该使用SOLINEExt.curyUsrTotalProfit。