在按下“发票和备忘录”屏幕中的“冲销并核销备忘”操作后,是否可以创建自定义以将过帐期间设置为当前有效的财务期间?
我们已经注意到,新创建的贷项通知单默认为发票的后期,如果在下一个财务期间贷记,这可能是不正确的。
发布于 2020-06-09 02:24:54
您正在讨论应收帐款方面的事情,但我在应付款方面也做了类似的事情。这并不完全是你想要的,但它太大了,无法发表评论。您也许能够从中获得总体思路,并将其应用于您的场景。我采取的方法是在发布时检查时间段。
protected virtual void _(Events.FieldUpdated<APInvoice.finPeriodID> e)
{
APInvoice row = (APInvoice)e.Row;
CheckPeriod(e.Cache, row);
}
#region Release override
public delegate IEnumerable ReleaseDelegate(PXAdapter adapter);
[PXOverride]
public virtual IEnumerable Release(PXAdapter adapter, ReleaseDelegate baseMethod)
{
CheckPeriod(Base.Caches[typeof(APInvoice)], Base.Document.Current);
return baseMethod(adapter);
}
#endregion
protected virtual void CheckPeriod(PXCache cache, APInvoice invoice)
{
if (invoice?.FinPeriodID == null) return;
string currentPeriod = GetCurrentPeriod(invoice.BranchID);
if (currentPeriod != invoice.FinPeriodID)
{
PXUIFieldAttribute.SetError<APInvoice.finPeriodID>(cache, invoice, "Invalid period");
}
}
public virtual string GetCurrentPeriod(int? branchID)
{
PXResultset<Branch> Results = PXSelectJoin<GL.Branch,
InnerJoin<FinPeriod, On<FinPeriod.organizationID, Equal<Branch.organizationID>>>,
Where<Branch.branchID, Equal<Required<Branch.branchID>>,
And<FinPeriod.startDate, LessEqual<Required<FinPeriod.startDate>>,
And<FinPeriod.endDate, Greater<Required<FinPeriod.endDate>>>>>> // End Date is the date AFTER the period ends
.SelectSingleBound(Base, null, branchID, Base.Accessinfo.BusinessDate, Base.Accessinfo.BusinessDate);
if (Results != null)
{
foreach (PXResult<GL.Branch, FinPeriod> result in Results)
{
FinPeriod period = result;
return period.FinPeriodID;
}
}
return null;
}正如您所看到的,我在释放上放置了一个覆盖,以执行我的验证,如果期间不是当前的,它将设置一个错误条件。验证是通过检索当前业务日期的当前期间并与APInvoice上的期间进行比较来执行的。
您可以从示例中探索如何利用GetCurrentPeriod,并在FieldDefaulting上进行覆盖(如果它有助于实现您的目标)。
发布于 2020-06-09 23:19:44
下面定义的解决方案是在Acumatica 20.102.0015中开发的,它将“冲销并应用备注”操作中创建的贷项通知单的日期和过帐期间更改为新单据的默认值,而不是冲销发票中的日期。
namespace AARAMPostPeriod
{
public class AAARInvoiceEntryExtension : PXGraphExtension<ARInvoiceEntry>
{
public delegate IEnumerable ReverseDocumentAndApplyToReversalIfNeededDel(PXAdapter adapter, ReverseInvoiceArgs reverseArgs);
[PXOverride]
public virtual IEnumerable ReverseDocumentAndApplyToReversalIfNeeded(PXAdapter adapter, ReverseInvoiceArgs reverseArgs, ReverseDocumentAndApplyToReversalIfNeededDel del)
{
if(reverseArgs.ApplyToOriginalDocument) reverseArgs.DateOption = ReverseInvoiceArgs.CopyOption.SetDefault;
return del(adapter, reverseArgs);
}
}
}reverseArgs.DateOption的默认值通常为
ReverseInvoiceArgs.CopyOption.SetOriginalhttps://stackoverflow.com/questions/62182381
复制相似问题