如何在Acumatica ERP系统中自定义屏幕AP Release All和AR Relase All
How to Customize screen AP Release All and AR Relase All in Acumatica ERP System
我在自定义屏幕 AR Relase All (AR501000) 时遇到问题。问题是当我尝试通过屏幕 AR Release All Process (AR501000) 使用复选框在屏幕发票和备忘录 (AR301000) 中传递发票编号(客户订单字段)的值时。
首先,我像下面这样创建 GLTranExtension :
using System;
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.PM;
using PX.Objects.CR;
using PX.Objects.TX;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.GL;
namespace SGLCustomizeProject
{
[Serializable]
public class GLTranExtension: PXCacheExtension<PX.Objects.GL.GLTran>
{
#region UsrInvoiceNbr
public abstract class usrInvoiceNbr : IBqlTable { }
[PXDBString(60, IsFixed = true)]
[PXUIField(DisplayName = "Vendor Ref. / Customer Order")]
public string UsrInvoiceNbr { get; set; }
#endregion
}
}
然后我尝试创建自定义 ARReleaseProcessExtension。
这在我的自定义代码下面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;
using PX.Objects.AR;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CA;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.CT;
using PX.Objects.PM;
namespace SGLCustomizeProject
{
public class ARRelaseProcessExtension: PXGraphExtension<ARReleaseProcess>
{
public delegate List<ARRegister> ReleaseDocProcDel(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc);
[PXOverride]
public List<ARRegister>ReleaseDocProc(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc, ReleaseDocProcDel del)
{
je.RowInserting.AddHandler<GLTran>((sender, e) =>
{
GLTran glTran = e.Row as GLTran;
ARInvoice ari = PXResult<ARInvoice>.Current;
if (ari != null && ari.InvoiceNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrInvoiceNbr = ari.InvoiceNbr;
}
});
return del(je, ref doc, res, out pmDoc);
}
}
}
如果转到屏幕发布 AR 文档 (AR501000),我只需要使用复选框按钮发布一笔交易。有用..
但是,当我也尝试使用复选框按钮释放多个交易时,我的第二笔交易在日记账交易屏幕中填写了相同的发票编号,我将描述如何使用此条件:
如果我发布两笔交易
- 参考编号 = 000012 和发票编号(在客户订单字段中)= inv1254
- 参考编号 = 000013 和发票编号(在客户订单字段中)= inv1255
然后我发布这两个交易,并在日志交易中显示如下结果:
- 参考编号 = 000012 和发票编号(在客户订单字段中)= inv1254
- 参考编号 = 000013 和发票编号(在客户订单字段中)= inv1254
我不知道为什么在第二笔交易中,在日记帐交易屏幕中显示相同的发票编号值。
你的情况是因为
ARInvoice ari = PXResult<ARInvoice>.Current;
PXResult.Current 可能与您正在处理的实际发票不同。
在这种情况下,最好明确select需要发票:
ARInvoice ari = PXSelect<ARInvoice, Where<ARInvoice.refNbr, Equal<Required<GLTran.refNbr>>, And<ARInvoice.docType, Equal<Required<GLTran.tranType>>>>>.Select(sender.Graph, glTran.RefNbr, glTran.TranType);
我在自定义屏幕 AR Relase All (AR501000) 时遇到问题。问题是当我尝试通过屏幕 AR Release All Process (AR501000) 使用复选框在屏幕发票和备忘录 (AR301000) 中传递发票编号(客户订单字段)的值时。
首先,我像下面这样创建 GLTranExtension :
using System;
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.PM;
using PX.Objects.CR;
using PX.Objects.TX;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.GL;
namespace SGLCustomizeProject
{
[Serializable]
public class GLTranExtension: PXCacheExtension<PX.Objects.GL.GLTran>
{
#region UsrInvoiceNbr
public abstract class usrInvoiceNbr : IBqlTable { }
[PXDBString(60, IsFixed = true)]
[PXUIField(DisplayName = "Vendor Ref. / Customer Order")]
public string UsrInvoiceNbr { get; set; }
#endregion
}
}
然后我尝试创建自定义 ARReleaseProcessExtension。 这在我的自定义代码下面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;
using PX.Objects.AR;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CA;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.CT;
using PX.Objects.PM;
namespace SGLCustomizeProject
{
public class ARRelaseProcessExtension: PXGraphExtension<ARReleaseProcess>
{
public delegate List<ARRegister> ReleaseDocProcDel(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc);
[PXOverride]
public List<ARRegister>ReleaseDocProc(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc, ReleaseDocProcDel del)
{
je.RowInserting.AddHandler<GLTran>((sender, e) =>
{
GLTran glTran = e.Row as GLTran;
ARInvoice ari = PXResult<ARInvoice>.Current;
if (ari != null && ari.InvoiceNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrInvoiceNbr = ari.InvoiceNbr;
}
});
return del(je, ref doc, res, out pmDoc);
}
}
}
如果转到屏幕发布 AR 文档 (AR501000),我只需要使用复选框按钮发布一笔交易。有用.. 但是,当我也尝试使用复选框按钮释放多个交易时,我的第二笔交易在日记账交易屏幕中填写了相同的发票编号,我将描述如何使用此条件:
如果我发布两笔交易
- 参考编号 = 000012 和发票编号(在客户订单字段中)= inv1254
- 参考编号 = 000013 和发票编号(在客户订单字段中)= inv1255
然后我发布这两个交易,并在日志交易中显示如下结果:
- 参考编号 = 000012 和发票编号(在客户订单字段中)= inv1254
- 参考编号 = 000013 和发票编号(在客户订单字段中)= inv1254
我不知道为什么在第二笔交易中,在日记帐交易屏幕中显示相同的发票编号值。
你的情况是因为
ARInvoice ari = PXResult<ARInvoice>.Current;
PXResult.Current 可能与您正在处理的实际发票不同。
在这种情况下,最好明确select需要发票:
ARInvoice ari = PXSelect<ARInvoice, Where<ARInvoice.refNbr, Equal<Required<GLTran.refNbr>>, And<ARInvoice.docType, Equal<Required<GLTran.tranType>>>>>.Select(sender.Graph, glTran.RefNbr, glTran.TranType);