База знаний ERP: Axapta/НомерныеСерии ...

Начало | Index | Changes | Comments | Users | Registration | Login  Password:  
 

Раздел: Программирование > Среда Исполнения


Номерные серии предназначены для автоматической генерации заначений полей вида <префикс><номер><суффикс> на основе счетчика. При помощи номерных серий заполняюется такие поля как «Номер складского журнала» и т.д.


C номерными сериями документов можно работать через пункт главного меню «Основное\Настройки\Серии документов\Серии документов»


Хорошее описание того, как делать номерные серии есть в статье «Номерные серии в Microsoft Axapta»


В качестве альтернативы можно использовать Rec Id, но следует учесть, что его значение не сохраняется при экспорте-иморте

Contents

Создание собственного модуля номерных серий

Создание номерной серии

// Укажем, какой тип мы хотим использовать.

// Разумеется, здесь должен быть наш тип - тот,что мы использовали в таблице.
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;
}

Перекрыть метод close на форме:
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());
}

2. При удалении записей из таблицы, в номерную серию возвращается номер только если запись не была сохранена.
3. При закрытии происходит то же самое

см. также



 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]