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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2009, 13:31   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Номерная серия без нулей
Вот стало надо нумеровать серии без нулей. То есть вместо
ППП_009
написать
ППП_9.
Максимум = 999
Как задать формат такой номерной серии?
Не хочется заниматься постобработкой полученной строки.
Старый 01.04.2009, 13:40   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Вот стало надо нумеровать серии без нулей. То есть вместо
ППП_009
написать
ППП_9.
Максимум = 999
Как задать формат такой номерной серии?
Не хочется заниматься постобработкой полученной строки.
1. Нету такого формата.
2. формат с нулями нужен для правильной сортировки "как числа". В вашем варианте номера будут сортироваться "как строки" (ППП_1, ППП_11, ППП_12, ... ППП_19, ППП_2, ППП_21...)

См. http://axapta.mazzy.ru/lib/adjustment/
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 01.04.2009, 15:07   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Если все же хотите сделать по-своему, невзирая на замечание №2 от mazzy (очень существенное замечание, хочу заметить), то смотреть нужно в сторону метод NumberSeq::numInsertFormatInternal().

В нем надо сделать следующее изменение
X++:
            case #SymbolNumerals:
                //tmpTxt  = strpoke(tmpTxt,'0',x);
                tmpTxt = strDel(tmpTxt, x, 1);
                break;
Ограничения, о которых стоит упомянуть:
Это только для ситуации, когда используются числовые подстановки, а не буквенные
Если уже были использованы номера, и серия непрерывная, то значения будут браться из списка, а не формироваться новые - тогда этот код, опять же, не отработает.
Старый 01.04.2009, 15:31   #4  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Тогда придется править еще как минимум ::numRemoveFormat(), насколько я помню.

Желательно отказаться от хотелки.
__________________
С уважением,
glibs®
Старый 01.04.2009, 15:40   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Зачем и кому это надо? Не зная ответа на этот вопрос можно много "вредных" советов надавать.

А то ведь получится как у Джоэля.
Цитата:
Хороший кандидат попытается вытянуть из вас побольше информации. Для кого нужен дом? Я принципиально не приму на работу кого-то, занимающегося проектированием и не спрашивающего, для чего. Однажды меня это так возмутило, что я прервал кандидата и сказал: «Вы забыли об этом спросить, но это дом для семейства слепых жирафов.»
http://russian.joelonsoftware.com/Ar...erviewing.html
Старый 01.04.2009, 16:09   #6  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
У нас одна из серий имеет формат - КЛ9-#######, номера сейчас такие - КЛ9-0029921, максимум -9999999
Так что впрде все нормально работает
Старый 01.04.2009, 16:12   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от egorych Посмотреть сообщение
У нас одна из серий имеет формат - КЛ9-#######, номера сейчас такие - КЛ9-0029921, максимум -9999999
Так что впрде все нормально работает
Автор хочет избавиться от нулей
чтобы при таком формате, как у Вас, вместо КЛ9-0029921 получилось КЛ9-29921
Старый 01.04.2009, 16:14   #8  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Давайте разделять реальный используемый номер и вывод на экран-на печать.

Напишите дисплей-метод, и все дела!

С Уважением,
Георгий
Старый 01.04.2009, 22:29   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
А поиск? а переход к основной таблице?
имхо, предложение имеет смысл только при отображении номера в печатных документах. Возможно, автору вопроса стоит подумать над изменением постановки задачи как раз в эту сторону.
Старый 02.04.2009, 07:12   #10  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Зачем и кому это надо?
Таблица уже заполнена данными, причем код набивался в другой системе.
Вот мне и нужно, запретить ввод кода, оставив при этом формат предыдущей системы, который идет с префиксом и не имеет ведущих нулей.

Цитата:
Напишите дисплей-метод, и все дела!
Ну, дисплей метод тут и на самом деле не пойдет. Это ключевое поле в таблице.

Да, жаль, конечно, что нельзя. Если оставить формат номерной серии пустым, то нумеруется именно так как мне и надо, но без префикса. Вот и подумалось, что можно задать то же самое но с префиксом. Но ради такой малой задачи, вряд ли буду модифицировать эти классы. Всем спасибо!
Старый 02.04.2009, 12:23   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если данные заливаются из другой системы, то нельзя ли влезть в процесс заливки и добавить "не достающие" нули? Ну или поправить после заливки?
Старый 02.04.2009, 12:30   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Если данные заливаются из другой системы, то нельзя ли влезть в процесс заливки и добавить "не достающие" нули?
А смысл? Тогда уж легче префикс дописать... А формат номерной серии оставить пустым.
К тому же, если добавлять нули, формат исходной системы теряется. И еще получаем проблему: в аксапте, ППП_0001 и ППП_1 это разные значения, в другой системе - одинаковые .
Старый 02.04.2009, 14:59   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Смысл есть. И не маленький.

1. Значение ключа формируется в формате "естесственном" с точки зрения идеологии построения номерных серий. Не надо будет никуда влезать и ничего править в "родной" системе.

2. Опыт перекачки данных из других систем научил тому, что нельзя использовать идентификатор другой системы в качестве идентификатора данной системы. По разным соображениям. Идентификатор "чужой" системы должен хранится в отдельном поле. Как служебная (справочная) информация.
За это сообщение автора поблагодарили: oip (1).
Старый 02.04.2009, 15:22   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Идентификатор "чужой" системы должен хранится в отдельном поле.
согласен, во всех остальных таблицах именно так и делается, но здесь не получится - требование пользователей.
Старый 03.04.2009, 00:40   #15  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
но здесь не получится - требование пользователей.
Нет такого требования пользователей, которое им нельзя было бы убедительно опровергнуть. Особенно если на то есть реальные причины. Какое у пользвателей обоснование - наверняка "привычность такого формата номера" ?
Старый 03.04.2009, 07:04   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Какое у пользвателей обоснование
совместимость с филиалами, в которых этот код вообще вводится вручную.
Старый 10.04.2009, 15:25   #17  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
? результат
Eldar9x как в итоге решили вопрос с 'удалением' ведущих нулей?
__________________
Dynamics AX 4.0 SP2
Старый 10.04.2009, 15:48   #18  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Eldar9x как в итоге решили вопрос с 'удалением' ведущих нулей?
X++:
BrendId genBrendId()
{
    NumberSeq       NumberSeq;
    str 4           prefx = "ПОС.";
    Num             num;
    ;

    do
    {
        numberSeq = NumberSeq::newGetNum(CompanyInfo::tmn_numRefBrendId(), true);

        if (!numberSeq)
            throw checkFailed("Не задана номерная серия для Бренда в параметрах УЗ.");

        num = numberSeq.num();

        numberSeq.used();
    }
    while (BrendTable::exist(prefx + num));

    return prefx + num;
}
на initValue вызываем данный код, если поле не заполнено на таблице.
Формат номерной серии - пустой.
Старый 11.04.2009, 09:02   #19  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
X++:
BrendId genBrendId()
{
    NumberSeq       NumberSeq;
    str 4           prefx = "ПОС.";
    Num             num;
    ;

    ...
    return prefx + num;
}
'Жестко' прописанный (фиксированный) в коде префикс для всех компаний которые ведутся?
Как-то не совсем красиво, если только нет твердой уверенности что ничего не поменяется в политике формирования номеров.

Может есть еще какие-то варианты?
__________________
Dynamics AX 4.0 SP2
Старый 13.04.2009, 07:21   #20  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Может есть еще какие-то варианты?
Ну, как написал, kashperuk, можно класс, отвечающий за номерные серии, подправить. Добавляете в classDeclaration новый макрос для символа, потом, добавляете его в formattingChars() и редактируете метод numInsertFormatInternal. Пробовал, вроде работает.
Но попробовав, поиск по классу на эти макросы, вы получите, что придется модифицировать еще несколько методов. Разбираться в них не было необходимости, так как текущая модификация меня вполне устраивает. По поводу компаний, они в виртуальной, так что - нет проблем. Плюсы: заполняются промежутки для данного кода, так как количество их ограничено (9999); после отказа от старой системы, номерная серия продолжает функционировать (после некоторых изменений, конечно); обнуление номерной серии никак не сказывается на работе.
Теги
download, faq, законченный пример, номерная серия, нули, нумерация, полезное, пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Номерная серия,,, превышена. tolstjak DAX: Функционал 28 14.01.2013 20:06
Номерная серия konopello DAX: Программирование 11 02.10.2007 12:00
Номерная серия общая для всех компаний! 3oppo DAX: Программирование 13 01.09.2006 06:38
Номерная серия в виртуальной компании Владимир Максимов DAX: Программирование 2 22.12.2005 12:52
Номерная серия требование-накладная loka DAX: Функционал 2 15.06.2005 13:14
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:49.