AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2004, 11:06   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Может это поможет (пролетала по какойто из аксаптовских рассылок)
Вложения
Тип файла: zip new number sequence step by step in axapta 20040628.zip (15.7 Кб, 627 просмотров)
За это сообщение автора поблагодарили: konopello (3).
Старый 02.07.2004, 11:18   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо.
Перенес в проекты.

дополнительно о number sequence framework можно посмотреть в best practice
http://technet.navision.com/usered/B...rd_Components_(..)/Number_Sequences/Number_sequence_framework.htm

или по ключевому слову "number sequence framework"
Старый 02.07.2004, 11:53   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Разделил ветку на две части, выделив собственно проект из обсуждения. Обсуждение здесь: http://www.axforum.info/forums/showt...p?threadid=220
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 24.07.2009, 13:17   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
-> Автоматическое создание номерной серии в заданном модуле
Доброго времени суток.

Во вложении мини-проект(может кому еще пригодится), который позволит автоматически создавать номерную серию для существующего модуля.

Как пользоваться :

Выбираем Extended Data Type, и вызываем
контекстное меню\Add-ins\Auto Create Number Sequence Reference

Задаем следующие параметры :

1. Модуль, для которого создается номерная серия
2. Является ли номерная серия непрерывной?(опционально)
3. Создавать ли статический метод на таблице параметров?(опционально)

Параметров немного, остальные по-умолчанию, если нужно, то думаю доработать будет не сложно.

Что делается :
1. В метод loadModule класса numberSequenceReference_<Module> автоматически добавится нужный код.
2. В случае если нужно, автоматически создает статический метод на
таблице <Module>Parameters, возвращающий ссылку на номерную серию.

Также во вложеном проекте, есть следующие мини dev-tools :

1. Для классов (Classes\Add-ins\Extended By) - показывает классы-потомки для указанного класса

2. Для проектов(Project\Add-ins\Compile All Project) - позволяет откомпилировать все объекты проекта, не открывая проект в новом окне

3. Для узла Classes(Classes\Add-ins\Auto Create Template RunBase) - создает класс-наследник RunBase\RunBaseBatch, также создается Menu Item для нового класса (опционально)

Проект импортировать аккуратно, изменен макрос xppTexts, затронуты методы системных классов, ниже их список :
X++:
SysContextMenu\verifyItem
ClassBuild\addSourceToEndMethod
Global\pickEnumValue
xppSource\beginBlock
xppSource\constructMethod
xppSource\constructMethod
xppSource\endBlock
xppSource\endLine
xppSource\getSource
xppSource\initDefaultIndentColumns
xppSource\mainMethodRunBase
xppSource\simpleLine
После импорта проекта Menu Items нужно закинуть в SysContextMenu.

Тестирование мини dev-tools производилось на DAX 4.0.

Вопросы к знатокам :

Почему в NumberSeqModule разные элементы имеют одинаковые метки ?
Например, NumberSeqModule::Ledger и NumberSeqModule::Asset имеют метку General Ledger.(В результате этого, если создавать контрол
typeId(NumberSeqModule) возникает путаница насчет модулей )

Почему поле Module в таблице NumberSequenceReference
имеет тип Integer, а не NumberSeqModule ?

offtopic: В Global\PickEnumValue был обнаружен баг, проявляется в любой из версий AX :
X++:
...
for (i=1;i <= dictEnum.values(); i++)
...
Такой код приводит к тому, что значение енума 0 теряется, должно быть :
X++:
...
for (i=0;i <= dictEnum.values(); i++)
...
Также в данном методе есть небольшая помарка :
X++:
...
formRun.choices(names, #ImageClass);
...
по идее логичнее использовать картинку #ImageBaseEnumElement, т.е.
X++:
...
formRun.choices(names, #ImageBaseEnumElement);
...
Вложения
Тип файла: zip SRF_DevTools_DAX30.zip (47.1 Кб, 116 просмотров)
Тип файла: zip PrivateProject_SRF_DevTools_DAX40.zip (45.9 Кб, 111 просмотров)
Тип файла: zip PrivateProject_SRF_DevTools_DAX2009.zip (58.6 Кб, 117 просмотров)
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: TasmanianDevil (4), konopello (3), dech (1).
Старый 29.07.2009, 07:27   #5  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от SRF Посмотреть сообщение
offtopic: В Global\PickEnumValue был обнаружен баг, проявляется в любой из версий AX :
X++:
...
for (i=1;i <= dictEnum.values(); i++)
...
Такой код приводит к тому, что значение енума 0 теряется, должно быть :
X++:
...
for (i=0;i <= dictEnum.values(); i++)
...
Нет, Вы не правы - значение enum'а 0 не теряется .
Там идет проход по индексу enum'а, а затем уже по индексу инициализируется конкретное числовое значение enum'а.
X++:
for (i=1;i<=dictEnum.values();i++)
    {
        value = dictEnum.index2Value(i);
P.S.
При редактировании метода loadModule() у наследников NumberSequenceReference определение наименования переменной ошибочно, ввиду неправильного определения конца строки по символу ";" - strscan() ищет по подстроке от полного исходника, а начало поиска установлено на индекс относительно полной строки исходника. В результате поиск происходит где-то далеко за обявлением искомой переменной. В рабочем варианте выглядит так :
X++:
if (methodInfo)
    {
        positionVarTableStart = strScan(methodInfo.getSource(), tableStr(NumberSequenceReference), 1, strLen(methodInfo.getSource()));

        if (positionVarTableStart)
        {
            positionVarTableEnd = strScan(subStr(methodInfo.getSource(), positionVarTableStart, strlen(methodInfo.getSource())), ';', 1, strLen(methodInfo.getSource()));
            positionVarTableEnd += positionVarTableStart;

            if (positionVarTableEnd)
            {
                positionVarTableStart += strlen(tableStr(NumberSequenceReference));
                return strLRTrim(subStr(methodInfo.getSource(), positionVarTableStart,  positionVarTableEnd - positionVarTableStart - 1));
            }
        }
    }
P.P.S.
Кому б из "китайских пионеров" гвоздь в голову вбить за слой sys у механизма номерных серий ?
Отвратительно !
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 29.07.2009 в 09:13. Причина: Добавил некоторое описание багов, поругался
За это сообщение автора поблагодарили: SRF (1).
Старый 01.08.2009, 12:50   #6  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Нет, Вы не правы - значение enum'а 0 не теряется .
Там идет проход по индексу enum'а, а затем уже по индексу инициализируется конкретное числовое значение enum'а.
X++:
for (i=1;i<=dictEnum.values();i++)
    {
        value = dictEnum.index2Value(i);
И все таки SRF прав - баг в pickEnumValue() имеет место быть.
Речь видимо шла не о нулевом значении enum'а, а о значении индекса enum'а (который валиден в интервале [0..enumcnt()-1]) - в текущей реализации метода цикл начат с 1. Цикл в pickEnumValue() должен был выглядеть:
X++:
    for (i=0;i<dictEnum.values();i++)
    {
        ...
    }
В варианте SRF было for (i=0;i <= dictEnum.values(); i++) в результате чего в список добавлялось пустая строка (при достижении равенства dictEnum.values()) с 'левым' значением.

P.S. либо так:
X++:
    for (i=1;i<=dictEnum.values();i++)
    {
        value = dictEnum.index2Value(i-1);
        ...
        names += dictEnum.index2Label(i-1);
        ...
    }
__________________
Dynamics AX 4.0 SP2
Теги
faq, number sequence, номерная серия, нумерация, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Получение последнего номера из номерной серии longson DAX: Программирование 12 21.06.2007 13:30
привязка к новой номерной серии delicia DAX: База знаний и проекты 5 01.04.2007 22:40
Непрерывность номерной серии YaHooka DAX: Функционал 7 30.06.2005 18:04
Конфигуратор продуции - создание новой номенклатуры против создания новой конфигураци OliaM DAX: Функционал 6 15.04.2005 20:11
привязка к новой номерной серии delicia DAX: Программирование 2 21.11.2002 11:24
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.