0

我在 SO Invoice 屏幕 (SO303000) 上创建了一个自定义复选框字段,即使在 Invoice 发布并且付款已全额支付后也需要更新。

但是现在我不能这样做,因为一旦发票被释放并全额支付,它就会被禁用。

我试图用自动化步骤来做到这一点,但它不起作用。我在“字段”选项卡上添加了自定义字段,以使其在 SO Invoices 的已关闭步骤中启用。

请建议。

4

1 回答 1

1

要在 Invoice 发布和/或关闭后启用 SO Invoices 顶级表单和 Transactions 网格上的自定义字段,您应该为 SOInvoiceEntry 创建一个扩展,并按照以下示例订阅 ARInvoice_RowSelected 和 ARTran_RowSelected 事件:

public class SOInvoiceEntryExt : PXGraphExtension<SOInvoiceEntry>
{
    private bool IsDisabled(ARInvoice doc)
    {
        return doc.Released == true
            || doc.Voided == true
            || doc.DocType == ARDocType.SmallCreditWO
            || doc.PendingPPD == true
            || doc.DocType == ARDocType.FinCharge
            && !Base.IsProcessingMode
            && Base.Document.Cache.GetStatus(doc) == PXEntryStatus.Inserted;
    }

    public void ARInvoice_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        ARInvoice doc = e.Row as ARInvoice;
        if (doc == null) return;

        if (IsDisabled(doc))
        {
            PXUIFieldAttribute.SetEnabled<ARInvoiceExt.usrCustomTextField>(
                sender, doc, true);
            Base.Transactions.Cache.AllowUpdate = true;
        }
    }

    public void ARTran_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        var doc = Base.Document.Current;
        ARTran row = e.Row as ARTran;

        if (row != null && doc != null && IsDisabled(doc))
        {
            PXUIFieldAttribute.SetEnabled(sender, row, false);
            PXUIFieldAttribute.SetEnabled<ARTranExt.usrCustomTextField>(
                sender, row, true);
        }
    }
}

此外,您需要在Closed自动化步骤 中启用添加到顶级表单的自定义字段:在此处输入图像描述

这是应用上述更改后 SO Invoices 屏幕的工作方式:

在此处输入图像描述

在此处输入图像描述

于 2017-10-15T21:03:03.663 回答