【049】应收单UI插件触发修改联动
侧边栏壁纸
  • 累计撰写 60 篇文章
  • 累计收到 2 条评论

【049】应收单UI插件触发修改联动

秋驰雪隙
2025-04-08 / 0 评论 / 8 阅读 / 正在检测是否收录...

应收单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

评论 (0)

取消