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

时间:2017-06-08 19:00:47

标签: acumatica

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

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

我使用了以下步骤,并附上了要审核的代码。保存时我收到错误而没有生成数字

  1. 我为Memo In文档创建了一个编号序列 enter image description here

  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
    
  3. 我已将自动生成序列号添加到MemoIn DAC

  4. `

    #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
    
    1. 在配置屏幕中,我选择了文档enter image description here
    2. 中用于备忘录的编号顺序

      保存Memo In文档时出现以下错误

      enter image description here

      我注意到订单编号未初始化为" NEW"它显示" SELECT"

      我已经通过CASetup,CMSetup,ARSetup DAC代码而无法找出差异。

1 个答案:

答案 0 :(得分:4)

如果我们想使用编号序列,那么在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;
    }
}

接下来,在您的凭证编号字段中,您将使用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;
    }
}

编辑:确保在构建文档的图形中将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) }) { ; }
}