应收单UI插件触发修改联动
应收单的UI插件中,对单价、金额、数量进行赋值,并不会联动其它的值的修改。而且也没有相对应的方法进行调用,经反编译调试研究,使用以下解决方案
反射调用SetBatchPasteData
curPart为UI插件中获取到的强类型private ARMainUIFormWebPart curPart
SetBatchPasteData函数就是批量粘贴值的处理方法,内部会对粘贴后的值进行其他值的联动处理
srcColumnField就是粘贴列,触发源头
SetBatchPasteData只会修改核币相关的其他值
/// <summary>
/// 通过调用批量粘贴值的方法,达到值变化的目的
/// </summary>
/// <param name="line">粘贴的行</param>
/// <param name="srcColumnField">PUAmount、TaxPrice、NonTaxPrice、AROCMoney_NonTax、AROCMoneyPriceTaxSum、AROCMoney_GoodsTax</param>
/// <param name="Pastevalue">值</param>
/// <param name="roundHelperACMoney">核币金额精度</param>
/// <param name="roundHelperACPrice">核币单价精度</param>
/// <param name="modifiedLineIds">要同步修改的行ID集合</param>
/// <param name="isTaxPrice">是否含税</param>
/// <param name="head">应收单头</param>
private void SetBatchPasteData(ARBillHead_ARBillLinesRecord line, string srcColumnField, string Pastevalue, RoundHelper roundHelperACMoney, RoundHelper roundHelperACPrice, List<long> modifiedLineIds, bool isTaxPrice, ARBillHeadRecord head)
{
// 获取类型
Type type = curPart.GetType();
// 获取方法信息
MethodInfo methodInfo = type.GetMethod("SetBatchPasteData", BindingFlags.NonPublic | BindingFlags.Instance);
// 调用方法,传递参数
methodInfo.Invoke(curPart, new object[] { line, srcColumnField, Pastevalue, roundHelperACMoney, roundHelperACPrice, modifiedLineIds, isTaxPrice, head, null });
}
反射调用CalcFCMoneyFromACMoney
SetBatchPasteData只会修改核币相关的其他值,所以需要CalcFCMoneyFromACMoney根据核币金额重算本币金额
第二个参数是是否重算所有行,如果只是重算特定行,要保证那一行是焦点行,因为方法内部就是获取焦点行
注意,应收单审核后此方法就不会执行了(但是SetBatchPasteData是会执行的,所以保存的时候会报错本币金额与核币金额不一致)
/// <summary>
/// 根据核币金额计算本币金额
/// </summary>
/// <param name="head">应收单头</param>
/// <param name="allLineCalc">是否重算全部行</param>
private void CalcFCMoneyFromACMoney(ARBillHeadRecord head, bool allLineCalc)
{
// 获取类型
Type type = curPart.Action.GetType();
// 获取方法信息
MethodInfo methodInfo = type.GetMethod("CalcFCMoneyFromACMoney", BindingFlags.NonPublic | BindingFlags.Instance);
// 调用方法,传递参数
methodInfo.Invoke(curPart.Action, new object[] { head, allLineCalc });
}
案列:折扣计算
对应收单进行折扣计算
应收单行扩展字段:3s折扣前价税合计、4s折扣前未税金额、5s折扣前税额、6s折扣金额、7s折扣率、8s折扣前含税单价
应收单折扣计算 ARMainUIFormUIPlugIn.cs
评论 (0)