
There are cases in which we need to be able to use number sequences even if the mode is set to manual.
I am referring in particular to those automatic creation procedures that require the automatic entry of a number sequence.
If the sequence encoding mode is set to manual then we will not be able to take advantage of the automatic numbering.
To use the automation it is necessary to make a small change in the code.
Here’s how to do it:
/// <summary>
/// NumberSeq class extension
/// </summary>
[ExtensionOf(classStr(NumberSeq))]
final class NumberSeq_Extension
{
/// <summary>
/// Get Next number even if number sequence is set to manual
/// </summary>
/// <returns>Next Sequence Number</returns>
public Num getNextNumBypassManual()
{
if (!numberId || voucherId)
throw error("@SYS26051");
this.runNumber(); //This method gets the next sequence number
return lastNumGenerated;
}
}
First we need to extend the NumberSeq class adding a new custom method (getNextNumBypassManual()).
This method is essentially the same as the standard num() method but without controlling how the sequences are set. The standard method checks the input mode and if it is set to Manual it prevents the numerator from being advanced. We must remove this control so that the numerator is advanced even if the setting is manual.
class RunnableClass1
{
/// <summary>
/// Runs the class with the specified arguments.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
NumberSeq numberSeq;
Num nextSeqNum;
selectableDataArea selectableDataArea = 'DAT'; //Set Legal Entity
NumberSeqScope numberSeqScope = NumberSeqScopeFactory::createDataAreaScope(selectableDataArea); //Get Scope of the legal legal entity
NumberSequenceReference numberSequenceReference = NumberSeqReference::findReference(extendedTypeNum(CustAccount), numberSeqScope); //Get Customer Number sequence reference for the given legal entity
numberSeq = NumberSeq::newGetNum(numberSequenceReference);
nextSeqNum = numberSeq.GetNextNumBypassManual(); //Get next Customer number sequence by calling the extended method
info(nextSeqNum); //Show number sequence
}
}
In the above code we created a Runnable class to get the Next Customers sequence number for a given legal entity even if mode is set to manual.