C# 如何在Acumatica ERP系统中定制屏幕AP全部释放和AR全部释放
我在自定义屏幕AR Relase All(AR501000)时遇到问题。问题是当我试图通过使用复选框使用屏幕AR Release All Process(AR501000)传递屏幕发票和备忘录(AR301000)中发票编号(客户订单字段)的值时 首先,我创建如下GLTranExtension:C# 如何在Acumatica ERP系统中定制屏幕AP全部释放和AR全部释放,c#,acumatica,C#,Acumatica,我在自定义屏幕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.O
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
}
}
使用系统;
使用PX数据;
使用PX.Objects.CM;
使用PX.Objects.CS;
使用PX.Objects.PM;
使用PX.Objects.CR;
使用PX.Objects.TX;
使用System.Collections.Generic;
使用PX.Objects;
使用PX.Objects.GL;
名称空间SGLCustomizeProject
{
[可序列化]
公共类GLTranExtension:PXCacheExtension
{
#乌斯林地区
公共抽象类usrInvoiceNbr:IBqlTable{}
[PXDBString(60,IsFixed=true)]
[PXUIField(DisplayName=“供应商参考/客户订单”)]
公共字符串UsrInvoiceNbr{get;set;}
#端区
}
}
然后我尝试创建一个自定义的进程扩展。
下面是我的自定义代码:
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);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用PX数据;
使用PX.Objects.AR;
使用PX.Objects.GL;
使用PX.Objects.CM;
使用PX.Objects.CA;
使用PX.Objects.CR;
使用PX.Objects.CS;
使用PX.Objects.CT;
使用PX.Objects.PM;
名称空间SGLCustomizeProject
{
公共类ARRelaseProcessExtension:PXGrapherExtension
{
公共代表列表ReleaseDocProcDel(JournalEntry je、ref ARRegister doc、PXResult res、out PMRegister pmDoc);
[PXOverride]
公共列表ReleaseDocProc(JournalEntry je、ref ARRegister doc、PXResult res、out PMRegister pmDoc、ReleaseDocProcDel del)
{
je.RowInserting.AddHandler((发送方,e)=>
{
GLTran GLTran=e。行作为GLTran;
ARInvoice ari=PXResult.电流;
if(ari!=null&&ari.InvoiceNbr!=null)
{
GLTranExtension glTex=PXCache.GetExtension(glTran);
glTex.UsrInvoiceNbr=ari.InvoiceNbr;
}
});
返回del(je、参考文件、res、out pmDoc);
}
}
}
如果转到屏幕释放AR文档(AR501000),我只需要使用复选框按钮释放一个事务。它起作用了。。
但是,当我尝试使用复选框按钮释放多个交易时,我的第二个交易在日记账交易屏幕中填写相同的发票号,我将描述使用此条件:
如果我释放两个事务
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
}
}
我不知道为什么在第二笔交易中,日记账交易屏幕上显示相同的发票号码值。在您的情况下,发生这种情况是因为
ARInvoice ari = PXResult<ARInvoice>.Current;
arinari=PXResult.Current;
PXResult.Current可能与您正在处理的实际发票不同
在这种情况下,最好明确选择所需发票:
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);
ARInvoice ari=PXSelect.Select(sender.Graph、glTran.RefNbr、glTran.TranType);
您好,Dmitry,谢谢您的留言。我已经在我的定制中实现了你的代码,这是我的工作。非常感谢:)但它也发生在屏幕上的一个预览文档中。如果我在一个ReleaseProcessExtension中实现,它能工作吗?我的意思是上面相同的代码,我只需要用APInvoice替换ARInvoice….?是的,它可以正常工作。您可以在中找到代码示例