Раздел: Программирование > Среда Исполнения
Номерные серии предназначены для автоматической генерации заначений полей вида <префикс><номер><суффикс> на основе счетчика. При помощи номерных серий заполняюется такие поля как «Номер складского журнала» и т.д.
C номерными сериями документов можно работать через пункт главного меню «Основное\Настройки\Серии документов\Серии документов»
Хорошее описание того, как делать номерные серии есть в статье
«Номерные серии в Microsoft Axapta»
В качестве альтернативы можно использовать Rec Id, но следует учесть, что его значение не сохраняется при экспорте-иморте
// Укажем, какой тип мы хотим использовать.
// Разумеется, здесь должен быть наш тип - тот,что мы использовали в таблице.
numRef.DataTypeId = typeid2extendedtypeid(typeid(SalesManagersGroupId));
// Это будет в подсказке
numRef.ReferenceHelp = literalStr("Уникальный идентификатор групп менеджеров");
// А это само имя - его мы видим в графе <Ссылка> при настройке номерных серий.
numRef.ReferenceLabel = literalStr("Идентификатор группы менеджеров");
// Настройка мастера.
// Если мы решим запустить стандартны мастер, то он
// по-умолчанию сформирует нашу серию как <Непрерывную>
numRef.WizardContinuous = false;
// Допускать изменения пользователем <Вручную>
numRef.WizardManual = NoYes::No;
// : только на понижении серии
numRef.WizardAllowChangeDown = NoYes::No;
// : только на повышение номера.
numRef.WizardAllowChangeUp = NoYes::No;
// Максимальный номер.
// Здесь мы предполагаем, что у нас не будет больше 9999 групп менеджеров.
numRef.WizardHighest = 9999;
numRef.SortField = 3;
// Создаем
this.create( numRef);
// Получение объекта "Номерная серия"
NumberSeq sequence = NumberSeq::newGetNum(
NumberSequenceReference::find(
typeId2extendedTypeId(typeID(<Ваш EDT>))));
;
// получение нового значения из номерной серии
<Таблица>.<Поле> = sequence.num();
Ниже инструкция, как добавить использование номерной серии в форму. Немного переработанный пример из
статьи — устранена избыточность кода
в class declaration формы добавить:
NumberSeqFormHandler numberSeq;
в форму добавить метод для получения обработчика номерной серии (используется приём /Ленивая Инициализация)
NumberSeqFormHandler numberSeq()
{
;
if(!numberSeq)
{
numberSeq = numberSeqFormHandler::newForm(
NumberSequenceReference::find(
typeId2extendedTypeId(typeID(ИмяТипаДанных))
).NumberSequence,
element,
element.dataSource(),
fieldNum(НазваниеТаблицы, НазваниеПоля)
);
}
return numberSeq;
}public void close()
{
;
if (numberSeq)
numberSeq.formMethodClose();
super();
}
Перекрыть следующие методы источника данных формы и добавить в них обращения к обработчику номерной серии:
public void delete()
{
;
ttsbegin;
element.numberSeq().formMethodDataSourceDelete();
super();
ttscommit;
}
public void linkActive()
{
;
element.numberSeq().formMethodDataSourceLinkActive();
super();
}
public void write()
{
;
ttsbegin;
super();
element.numberSeq().formMethodDataSourceWrite();
ttscommit;
}
public boolean validateWrite()
{
boolean ret;
;
ret = super();
ret = ret && element.numberSeq().formMethodDataSourceValidateWrite();
return ret;
}
public void create(boolean _append = false)
{
;
element.numberSeq().formMethodDataSourceCreatePre();
super(_append);
element.numberSeq().formMethodDataSourceCreate();
}
1. Aльтернативный эквивалентный вариант validateWrite:
public boolean validateWrite()
{
return element.numberSeq().formMethodDataSourceValidateWrite(super());
}