如何在自定义屏幕上实现自动生成单据编号

Mur*_*nan 2 acumatica

我需要创建一个像 screen 这样的机会,但我不知道如何为新创建的文档实现自动生成文档编号

我期待有人在这个问题上帮助我。

我使用了以下步骤,并附上了代码以供审查。我在保存而不生成数字时出错

  1. 我已经为 Memo In 文档创建了一个编号序列 在此处输入图片说明

  2. 我为序列号设置创建了一个 DAC

    区域 MemoInOrderId

    public abstract class memoInOrderId : PX.Data.IBqlField
    {
    }
    protected string _MemoInOrderId;
    [PXDBString(10, IsUnicode = true)]
    [PXDefault("MEMOIN")]
    [PXSelector(typeof(Numbering.numberingID),
                 DescriptionField = typeof(Numbering.descr))]
    [PXUIField(DisplayName = "Memo In Order Nbr")]
    public virtual string MemoInOrderId
    {
        get
        {
            return this._MemoInOrderId;
        }
        set
        {
            this._MemoInOrderId = value;
        }
    }
    #endregion
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我已将自动生成序列号添加到 MemoIn DAC

`

#region OrderNbr
    public abstract class orderNbr : PX.Data.IBqlField
    {
    }
    [PXDBString(10, IsUnicode = true, IsKey = true, InputMask = ">CCCCCCCCCCCCCCC")]
    [PXUIField(DisplayName = "Order Nbr", Visibility = PXUIVisibility.SelectorVisible)]
    [AutoNumber(typeof(MemoSetUp.memoInOrderId), typeof(AccessInfo.businessDate))]
    [PXSelector(typeof(MemoIN.orderNbr),
        new Type[]
            {
             typeof(MemoIN.orderNbr),
             typeof(MemoIN.orderDate),
             typeof(MemoIN.vendorId)
            })]
    public virtual string OrderNbr { get; set; }
    #endregion
Run Code Online (Sandbox Code Playgroud)
  1. 在配置屏幕中,我选择了用于文档中备忘录的编号顺序在此处输入图片说明

在保存 Memo In 文档时,我收到以下错误

在此处输入图片说明

我注意到订单号没有初始化为“新”,它显示“选择”

我已经通过了 CASetup 、 CMSetup 、 ARSetup DAC 代码,但无法弄清楚其中的区别。

Bre*_*dan 7

如果我们想使用编号序列,它在 Acumatica 中非常简单。您应该在某处有一个设置/首选项字段,用于定义您将用于文档编号字段的编号顺序。

以下是使用选择器选择编号序列的设置字段示例:

// Setup field indicating which numbering sequence to use.
public abstract class myNumberingID : PX.Data.IBqlField
{
}
protected String _MyNumberingID;
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(Numbering.numberingID), DescriptionField = typeof(Numbering.descr))]
[PXUIField(DisplayName = "My Numbering Sequence")]
public virtual String MyNumberingID
{
    get
    {
        return this._MyNumberingID;
    }
    set
    {
        this._MyNumberingID = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,在您的凭证编号字段中,您将使用AutoNumberAttribute将字段定义为编号序列的使用者。下面是使用上面设置表中配置的定义编号序列的数字字段示例(假设“MyNumberingID”存在于 DAC/表“MySetup”中)。

// Field using the numbering sequence...
public abstract class myNumberField : PX.Data.IBqlField
{
}
protected String _MyNumberField;
[PXDBString(15, IsUnicode = true, IsKey = true, InputMask = ">CCCCCCCCCCCCCCC")]
[PXUIField(DisplayName = "My Number", Visibility = PXUIVisibility.SelectorVisible)]
[AutoNumber(typeof (MySetup.myNumberingID), typeof (AccessInfo.businessDate))]
[PXDefault]
public virtual String MyNumberField
{
    get
    {
        return this._MyNumberField;
    }
    set
    {
        this._MyNumberField = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:确保在构建文档的图表中将 PXSetup 视图包含到设置表中。

现在,当您在 DAC 上插入并保留包含您的编号字段的新记录时,将使用下一个编号序列值(除非编号序列配置为手动编号,否则用户必须提供一个值)。

对于基于特定条件/字段值使用多个编号序列时更复杂的配置,您可以查看PX.Objects.IN.INRegister.RefNbr示例。查看INDocType.Numbering以及它如何根据INRegister.docType(如下所示)更改编号顺序。另一个示例是与销售订单文档相关的销售订单订单类型。

public class NumberingAttribute : AutoNumberAttribute
{
    public NumberingAttribute()
        : base(typeof(INRegister.docType), typeof(INRegister.tranDate),
            new string[] { Issue, Receipt, Transfer, Adjustment, Production, Change, Disassembly },
            new Type[] { typeof(INSetup.issueNumberingID), typeof(INSetup.receiptNumberingID), typeof(INSetup.receiptNumberingID), typeof(INSetup.adjustmentNumberingID), typeof(INSetup.kitAssemblyNumberingID), typeof(INSetup.kitAssemblyNumberingID), typeof(INSetup.kitAssemblyNumberingID) }) { ; }
}
Run Code Online (Sandbox Code Playgroud)