Показаны различия между двумя версиями страницы.
axapta:номерныесерии [2018/04/13 22:43] |
axapta:номерныесерии [2018/04/13 22:43] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | Раздел: | ||
+ | ---- | ||
+ | Номерные серии предназначены для автоматической генерации заначений полей вида < | ||
+ | C номерными сериями документов можно работать через пункт главного меню " | ||
+ | |||
+ | Хорошее описание того, как делать номерные серии есть в статье [[http:// | ||
+ | |||
+ | В качестве альтернативы можно использовать RecId, но следует учесть, | ||
+ | {{toc}} | ||
+ | === Создание собственного модуля номерных серий === | ||
+ | *добавить новое значение в BaseEnum/ | ||
+ | *создать подкласс [[Класс/ | ||
+ | *в созданном подклассе: | ||
+ | *добавить статический метод numberSeqModule возвращающий значение нового элемента | ||
+ | *перекрыть метод loadModule (см. ниже) | ||
+ | *добавить создание экземпляра этого класса в [[AxPath:// | ||
+ | *добавить свой тип в перечень типов модулей в [[AxPath:// | ||
+ | *добавить в форму параметров своего модуля закладку " | ||
+ | === Создание номерной серии === | ||
+ | *создать собственный ExtendedDataType типа [[Тип/ | ||
+ | *добавить инициализацию номерной серии в метод loadModule потомка класса NumberSeqReference (например, | ||
+ | <code XPP> | ||
+ | // Укажем, | ||
+ | |||
+ | // Разумеется, | ||
+ | numRef.DataTypeId = typeid2extendedtypeid(typeid(SalesManagersGroupId)); | ||
+ | |||
+ | // Это будет в подсказке | ||
+ | numRef.ReferenceHelp = literalStr(" | ||
+ | |||
+ | // А это само имя - его мы видим в графе < | ||
+ | numRef.ReferenceLabel = literalStr(" | ||
+ | |||
+ | // Настройка мастера. | ||
+ | // Если мы решим запустить стандартны мастер, | ||
+ | // по-умолчанию сформирует нашу серию как < | ||
+ | | ||
+ | |||
+ | // Допускать изменения пользователем < | ||
+ | numRef.WizardManual = NoYes::No; | ||
+ | |||
+ | // : только на понижении серии | ||
+ | numRef.WizardAllowChangeDown = NoYes::No; | ||
+ | |||
+ | // : только на повышение номера. | ||
+ | numRef.WizardAllowChangeUp = NoYes::No; | ||
+ | |||
+ | // Максимальный номер. | ||
+ | // Здесь мы предполагаем, | ||
+ | numRef.WizardHighest = 9999; | ||
+ | numRef.SortField = 3; | ||
+ | |||
+ | // Создаем | ||
+ | this.create( numRef); | ||
+ | </ | ||
+ | === Использование номерной серии === | ||
+ | ==== Вне формы ==== | ||
+ | <code XPP> | ||
+ | // Получение объекта " | ||
+ | NumberSeq sequence = NumberSeq:: | ||
+ | NumberSequenceReference:: | ||
+ | typeId2extendedTypeId(typeID(< | ||
+ | ; | ||
+ | // получение нового значения из номерной серии | ||
+ | < | ||
+ | </ | ||
+ | ==== В форме ==== | ||
+ | Ниже инструкция, | ||
+ | |||
+ | в **class declaration** формы добавить: | ||
+ | <code XPP> | ||
+ | | ||
+ | </ | ||
+ | |||
+ | в форму добавить метод для получения обработчика номерной серии (используется приём [[: | ||
+ | <code XPP> | ||
+ | NumberSeqFormHandler numberSeq() | ||
+ | { | ||
+ | ; | ||
+ | if(!numberSeq) | ||
+ | { | ||
+ | numberSeq = numberSeqFormHandler:: | ||
+ | NumberSequenceReference:: | ||
+ | typeId2extendedTypeId(typeID(ИмяТипаДанных)) | ||
+ | ).NumberSequence, | ||
+ | element, | ||
+ | element.dataSource(), | ||
+ | fieldNum(НазваниеТаблицы, | ||
+ | ); | ||
+ | } | ||
+ | return numberSeq; | ||
+ | } | ||
+ | </ | ||
+ | Перекрыть метод close на форме: | ||
+ | <code XPP> | ||
+ | public void close() | ||
+ | { | ||
+ | ; | ||
+ | if (numberSeq) | ||
+ | numberSeq.formMethodClose(); | ||
+ | super(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Перекрыть следующие методы источника данных формы и добавить в них обращения к обработчику номерной серии: | ||
+ | <code XPP> | ||
+ | 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: | ||
+ | <code XPP> | ||
+ | public boolean validateWrite() | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | 2. При удалении записей из таблицы, | ||
+ | 3. При закрытии происходит то же самое | ||
+ | === см. также === | ||
+ | |||
+ | *[[http:// | ||
+ | *[[http:// |