首页 > 解决方案 > 根据账单和调整中的自定义日期字段计算发票日期和折扣日期

问题描述

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

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

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

谢谢你。

标签: acumatica

解决方案


TL;博士

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


正确答案

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

  1. 添加用于使用自定义设置断点的事件。在这种情况下,FieldUpdating 是最好的匹配。
public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
{
    public void APInvoice_DueDate_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e)
    {
    }
}
  1. 发布自定义。

  2. 在 Visual Studio 中打开代码

    A. 如果您使用运行时代码(自定义项目中内置的代码编辑器),请SiteFolder\App_RuntimeCode在 Visual Studio(管理员模式)中打开所需的文件。

    B. 如果你使用扩展库,打开你的 Visual Studio 项目(管理员模式)

  3. 为事件设置断点

  4. 附加调试器。在 Visual Studio 菜单中,转到Debug-> Attach to process-> 附加到 IIS 进程(通常名称为 w3wp.exe)(确保选中复选框Show processes from all users
  5. 触发字段更新。在这种情况下,您可以更改文档日期以触发到期日期重新计算。
  6. 当断点被命中时,检查调用堆栈窗口在此处输入图像描述
  7. 您可以通过双击行来浏览调用堆栈。在那种情况下PX.Objects.dll!PX.Objects.CS.TermsAttribute.CalcTerms(PX.Data.PXCache sender, PX.Data.PXFieldUpdatedEventArgs e) Line 3461看起来很有希望。
  8. 通常,您应该会看到 PX.Objects.dll 中所有内容的代码,但如果您没有看到,请按照以下步骤进行修复:
    • 确保Install debugger tools在安装 Acumatica ERP 时进行设置
    • Visual Studio 设置中的禁用Enable Just My Code选项
    • 您可以手动将 Visual Studio 指向位于SiteFolder\App_Data\CodeRepository\PX.Objects
  9. 探索代码以找到覆盖逻辑的最佳位置。在这种情况下,最好的方法是创建一个从 TermsAttribute 派生的新属性并重写CalcTerms方法(这样您仍然可以重用基本CalcTermsDates方法)

推荐阅读