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

Autonumeration错误求助:Numbering ID为null问题排查

Acumatica自动编号报错:Numbering ID is null 排查与解决

我已为自定义单据创建了Setup DAC,并在主Graph中添加了Setup视图。尽管已在设置界面配置了对应编号器,但创建新单据时始终抛出**"Autonumeration error, CS Error: Numbering ID is null"**错误。切换到默认SO发货单的编号器和设置类可正常工作,但需求必须使用自定义编号器配置。

相关代码片段

主DAC的自动编号字段

[PXDBString(15, IsKey = true, IsUnicode = true, InputMask = ">CCCCCCCCCCCCCCC")]
[PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
[PXUIField(DisplayName = "Ref. Nbr.", Visibility = PXUIVisibility.SelectorVisible)]
[AutoNumber(typeof(ASPaymentCalendarPreferences.revenueForecastNumberingID), typeof(ASRevenueForecast.date))]
[PXSelector(typeof(Search<ASRevenueForecast.reqNbr>))]
public virtual string ReqNbr { get; set; }
public abstract class reqNbr : PX.Data.BQL.BqlString.Field<reqNbr> { }

Setup DAC代码

[PXPrimaryGraph(typeof(ASPaymentCalendarPreferencesMaint))]
[PXCacheName("Payment Calendar Preferences")]
public class ASPaymentCalendarPreferences : IBqlTable
{
    #region Keys
    public static class FK
    {
        public class RevenueForecastNumberingID : PX.Objects.CS.Numbering.PK.ForeignKeyOf<ASPaymentCalendarPreferences>.By<revenueForecastNumberingID> { }
    }   
    #endregion

    #region RevenueForecastNumberingID
    public abstract class revenueForecastNumberingID : PX.Data.BQL.BqlString.Field<revenueForecastNumberingID> { }
    protected String _RevenueForecastNumberingID;
    [PXDBString(10, IsUnicode = true)]
    [PXDefault("REVENUEFO")]
    [PXSelector(typeof(Numbering.numberingID), DescriptionField = typeof(Numbering.descr))]
    [PXUIField(DisplayName = "Revenue Forecast Numbering", Visibility = PXUIVisibility.Visible)]
    public virtual String RevenueForecastNumberingID
    {
        get
        {
            return this._RevenueForecastNumberingID;
        }
        set
        {
            this._RevenueForecastNumberingID = value;
        }
    }
    #endregion
}

主Graph构造函数

public PXSetup<ASPaymentCalendarPreferences> AutoNumSetup;
public PXSetup<PX.Objects.GL.Company> Company;

#endregion

#region Graph constructor
public ASRevenueForecastEntry()
{
    ASPaymentCalendarPreferences setup = AutoNumSetup.Current;
  
}
#endregion

排查与解决步骤

  1. 确认Setup记录已正确保存

    • 进入ASPaymentCalendarPreferencesMaint设置界面,检查是否已选择并保存编号器"REVENUEFO"(或自定义编号ID)。即使有PXDefault标注,首次使用时仍需手动保存设置记录,确保数据写入数据库。
  2. 检查AutoNumber属性的BQL引用

    • 确保AutoNumber属性中引用的ASPaymentCalendarPreferences.revenueForecastNumberingID为正确的抽象字段类型,Acumatica要求BQL字段引用必须使用抽象类而非具体属性。
  3. 验证Setup视图的访问权限

    • 确保当前操作用户拥有ASPaymentCalendarPreferences DAC的读取权限,可在系统管理 > 权限 > 角色中为对应角色添加该DAC的读取权限。
  4. 强制加载Setup缓存

    • 在Graph构造函数中主动加载Setup记录,避免缓存未命中:
      public ASRevenueForecastEntry()
      {
          AutoNumSetup.Select(); // 主动加载Setup记录
          ASPaymentCalendarPreferences setup = AutoNumSetup.Current;
      }
      
  5. 检查编号器配置有效性

    • 进入系统管理 > 编号序列,确认编号器"REVENUEFO"配置正确:
      • 编号类型与单据类型匹配
      • 已设置下一个编号
      • 编号格式规则无误
  6. 调试验证Setup值

    • 在Graph中添加调试代码,检查AutoNumSetup.Current是否为空,必要时手动初始化记录(仅调试用,正式环境建议通过设置界面保存):
      public ASRevenueForecastEntry()
      {
          ASPaymentCalendarPreferences setup = AutoNumSetup.Current;
          if(setup == null)
          {
              setup = new ASPaymentCalendarPreferences();
              setup.RevenueForecastNumberingID = "REVENUEFO";
              AutoNumSetup.Insert(setup);
              this.Actions.PressSave();
          }
      }
      

内容的提问来源于stack exchange,提问作者Nazar Krach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:25:21