You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Acumatica 2022R1升级后代码创建套件失败:财务期间指定异常

问题

我们有一个用于创建套件装配的自定义处理界面,升级至Acumatica 2022R1后停止工作。以下是尝试设置交易日期和财务期间的代码(日期已设置但财务期间相关代码无效果):

protected virtual void GenerateKitAssembly(KitAssemblyEntry kitGraph, ProcessKitAssemblyItemInfoPX soline)
{
    kitGraph.Clear();

    INKitRegister doc = PXCache<INKitRegister>.CreateCopy(kitGraph.Document.Insert(new INKitRegister()));
    doc.InventoryID = soline.InventoryID;
    doc.KitRevisionID = soline.KitRevisionID;
    doc.Qty = soline.AssemblyQty;
    doc.UOM = soline.UOM;
    doc.Hold = true;
    doc.Status = INDocStatus.Hold;
    doc.BranchID = soline.BranchID;
    doc.TranBranchID = soline.BranchID;
    doc.TranDate = DateTime.Now;
    doc.TranTranDate = DateTime.Now;
    doc.FinPeriodID = DateTime.Now.ToString("yyyyMM");
    doc.TranFinPeriodID = DateTime.Now.ToString("yyyyMM");
    doc.TranPeriodID = DateTime.Now.ToString("yyyyMM");
    doc.TranTranPeriodID = DateTime.Now.ToString("yyyyMM");
    doc.SiteID = soline.SiteID;

    doc.GetExtension<INKitRegisterExt>().UsrManualProcess = soline.RoboticsFulfill == null ? true : !soline.RoboticsFulfill;

    doc = kitGraph.Document.Update(doc);
}

抛出的错误信息如下:

PX.Data.PXFieldValueProcessingException
   HResult=0x80131500
  Message=Error: An error occurred during processing of the field Post Period value 07-2022 GL Error: The financial period cannot be specified because the branch has not been specified in the Branch box.
  Source=PX.Data
  StackTrace:
   at PX.Data.PXCache`1.FillWithValues(TNode item, TNode copy, TNode newitem)
   at PX.Data.PXCache`1.Update(Object data, Boolean bypassinterceptor)
   at PX.Data.PXCache`1.Update(Object data, Boolean bypassinterceptor)
   at PX.Data.PXSelectBase`1.Update(Table item)
   at PX.CreateKitAssemblyFromSO.Ext.ProcessKitAssemblyItemsPX.GenerateKitAssembly(KitAssemblyEntry kitGraph, ProcessKitAssemblyItemInfoPX soline) in C:\Apps\Acumatica\AcumaticaUpgrade\App_Data\Projects\IntegraOptics\IntegraOptics\IN\ProcessKitAssemblyItemsPX.cs:line 143

  This exception was originally thrown at this call stack:
    [External Code]

Inner Exception 1:
PXSetPropertyException: GL Error: The financial period cannot be specified because the branch has not been specified in the Branch box.

通过字段更新处理器查看套件时,发现所有财务期间相关字段均为空,但抛出异常的代码属于Acumatica底层代码。已确认登录用户设置了默认分支,且GUI中已选择公司分支,请求识别版本升级后的变更点及解决方法。

解决方案

1. 版本变更点说明

Acumatica 2022R1强化了财务期间字段的校验逻辑,要求必须先完成分支字段的设置并让缓存确认分支值生效,才能设置或推导财务期间。旧版本允许先设置期间再补分支,新版本会触发严格的依赖校验,导致分支未生效时设置期间直接报错。

2. 代码调整方案

修改代码执行顺序,先确认分支生效,再设置交易日期(让系统自动推导财务期间,避免手动硬编码):

protected virtual void GenerateKitAssembly(KitAssemblyEntry kitGraph, ProcessKitAssemblyItemInfoPX soline)
{
    kitGraph.Clear();

    // 第一步:先初始化文档并设置分支,提交让缓存确认分支生效
    INKitRegister doc = kitGraph.Document.Insert(new INKitRegister());
    doc.BranchID = soline.BranchID;
    doc.TranBranchID = soline.BranchID;
    doc = kitGraph.Document.Update(doc);

    // 第二步:创建副本并设置其余业务字段
    INKitRegister docCopy = PXCache<INKitRegister>.CreateCopy(doc);
    docCopy.InventoryID = soline.InventoryID;
    docCopy.KitRevisionID = soline.KitRevisionID;
    docCopy.Qty = soline.AssemblyQty;
    docCopy.UOM = soline.UOM;
    docCopy.Hold = true;
    docCopy.Status = INDocStatus.Hold;
    docCopy.SiteID = soline.SiteID;

    // 第三步:设置交易日期,系统会自动匹配对应分支的财务期间
    docCopy.TranDate = DateTime.Now;
    docCopy.TranTranDate = DateTime.Now;

    // 第四步:设置自定义字段
    docCopy.GetExtension<INKitRegisterExt>().UsrManualProcess = soline.RoboticsFulfill == null ? true : !soline.RoboticsFulfill;

    // 第五步:最终更新文档
    doc = kitGraph.Document.Update(docCopy);
}

3. 关键优化细节

  • 移除手动硬编码财务期间:Acumatica会根据TranDate和BranchID自动匹配对应的财务期间,手动设置FinPeriodID等字段容易引发分支不匹配的校验错误,尤其是多分支期间配置不同的场景。
  • 分支优先设置:确保分支字段先被缓存处理,后续的期间推导和校验才能基于正确的分支上下文执行。
  • 删除冗余字段赋值:TranFinPeriodID、TranPeriodID、TranTranPeriodID等字段会由系统自动同步,无需手动赋值。

4. 额外排查点

  • 确认soline.BranchID不为空:如果数据源的分支ID为空,即使用户有默认分支,系统也无法自动填充,需提前校验分支值的有效性。
  • 检查财务期间配置:确保目标分支下对应日期的财务期间已正确创建并处于打开状态。

内容的提问来源于stack exchange,提问作者June B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:24:11