Acumatica 根据票据和调整单中的自定义日期字段计算发票日期和折扣日期

Acumatica 根据票据和调整单中的自定义日期字段计算发票日期和折扣日期,acumatica,Acumatica,我在账单和调整单中创建了一个自定义日期字段“发票日期”。在BIL和调整中,根据DocDate和所选TermsID计算的到期日和现金折扣日 但是,我希望使用自定义字段“发票日期”中的日期来计算到期日期和现金折扣日期,而不是DocDate 我尝试在APInvoiceEntry图中搜索DocDate和TermsID的字段更新事件,还尝试在图中的CacheAttached中查找到期日期和现金折扣日期的PXFormula属性。此外,我还查看了APInvoice DAC,以找到到期日和现金折扣日的公式,但在

我在账单和调整单中创建了一个自定义日期字段“发票日期”。在BIL和调整中,根据DocDate和所选TermsID计算的到期日和现金折扣日

但是,我希望使用自定义字段“发票日期”中的日期来计算到期日期和现金折扣日期,而不是DocDate

我尝试在APInvoiceEntry图中搜索DocDate和TermsID的字段更新事件,还尝试在图中的CacheAttached中查找到期日期和现金折扣日期的PXFormula属性。此外,我还查看了APInvoice DAC,以找到到期日和现金折扣日的公式,但在任何地方都找不到。我也试图在DescentEngine类中找到方法,但没有成功

谢谢。

TL;DR

创建从TermsAttribute派生的新属性并重写
计算字符
方法。替换
TermsID
字段上的属性


正确答案

理解更新某些字段的逻辑的最可靠的方法是使用调试器。 为此,可以使用以下步骤:

  • 添加用于使用自定义设置断点的事件。在这种情况下,字段更新是最佳匹配
  • public类APInvoiceEntry_扩展名:PXGraphExtension
    
  • 您可以在调用堆栈中导航,双击行。在这种情况下,
    PX.Objects.dll!PX.Objects.CS.TermsAttribute.CalcTerms(PX.Data.PXCache sender,PX.Data.PXFieldUpdatedEventArgs e)第3461行看起来很有希望
  • 通常,您应该看到PX.Objects.dll中所有内容的代码,但如果看不到,请按以下步骤进行修复:
    • 确保在安装Acumatica ERP时设置了
      安装调试器工具
    • 在Visual Studio设置中禁用“仅启用我的代码”选项
    • 您可以手动将visual studio指向位于
      SiteFolder\App\u Data\code repository\PX.Objects
  • 探索代码以找到覆盖逻辑的最佳位置。在这种情况下,最好的方法是创建一个从TermsAttribute派生的新属性,并重写
    CalcTerms
    方法(这样您仍然可以重用基本
    CalcTermsDates
    方法)
  • TL;DR

    创建从TermsAttribute派生的新属性并重写
    计算字符
    方法。替换
    TermsID
    字段上的属性


    正确答案

    理解更新某些字段的逻辑的最可靠的方法是使用调试器。 为此,可以使用以下步骤:

  • 添加用于使用自定义设置断点的事件。在这种情况下,字段更新是最佳匹配
  • public类APInvoiceEntry_扩展名:PXGraphExtension
    
  • 您可以在调用堆栈中导航,双击行。在这种情况下,
    PX.Objects.dll!PX.Objects.CS.TermsAttribute.CalcTerms(PX.Data.PXCache sender,PX.Data.PXFieldUpdatedEventArgs e)第3461行看起来很有希望
  • 通常,您应该看到PX.Objects.dll中所有内容的代码,但如果看不到,请按以下步骤进行修复:
    • 确保在安装Acumatica ERP时设置了
      安装调试器工具
    • 在Visual Studio设置中禁用“仅启用我的代码”选项
    • 您可以手动将visual studio指向位于
      SiteFolder\App\u Data\code repository\PX.Objects
  • 探索代码以找到覆盖逻辑的最佳位置。在这种情况下,最好的方法是创建一个从TermsAttribute派生的新属性,并重写
    CalcTerms
    方法(这样您仍然可以重用基本
    CalcTermsDates
    方法)

  • 非常感谢你的回答。termsatAttribute.CalcTerms就是我要找的。在我的例子中,我只需覆盖术语的FieldUpdated和自定义字段的FieldUpdated事件,并在CalCharterms方法中传递新字段的日期,并获取到期日期和光盘日期,我用于设置相应字段的值。非常感谢您的回答。termsatAttribute.CalcTerms就是我要找的。在我的例子中,我只需覆盖术语的FieldUpdated和自定义字段的FieldUpdated事件,并在CalcTerms方法中传递新字段的日期,然后获取用于设置相应字段值的到期日期和光盘日期。
    public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
    {
        public void APInvoice_DueDate_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e)
        {
        }
    }