27.01.2010, 21:25 | #1 |
Участник
|
InventUpdate classes - общий вопрос по дизайну
Вопрос о дизайне InventUpd* классов (правда не совсем конкретный). Возможно вы сталкивались с ситуацией когда существуюший дизайн вам не позволял сделать определенные кастомизации и вам приходилось как то с этим бороться (can't customize by design, have to workaround). Интересно было бы узнать.
Встречный вопрос - насколько хорошо вы понимаете как они работают, хватает ли существующей документации, может какие то куски логики вам кажуться не нужной, не правильной и так далее. Заранее огромное!!! спасибо за любые ответы
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ |
|
28.01.2010, 00:05 | #2 |
----------------
|
"может какие-то куски логики вам кажутся ненужной, неправильной и так далее"
Лично меня, всегда раздражал перекрестный стек вызовов InventUpd - InventMov, когда из проверки InventUpd вызывается проверка InventMov, которая вызывает проверку InventUpd, которая вызывает проверку InventMov. (относится к Ax3, в Ax5 не смотрел) |
|
28.01.2010, 09:09 | #3 |
Злыдни
|
Мы тут как-то обсуждали одну неприятность в этих классах.
Резервирование при переносе |
|
28.01.2010, 11:14 | #4 |
Участник
|
Цитата:
перекрестный стек вызовов InventUpd - InventMov
Цитата:
Мы тут как-то обсуждали одну неприятность в этих классах.
Резервирование при переносе
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ |
|
28.01.2010, 11:28 | #5 |
Moderator
|
Ну я бы сказал, что в стандартной поставке не хватает хорошего tutorial по созданию собственных складских документов, которой также стоило бы расписать в тренинге Development IV.
По архитектуре - особых замечаний нет, всегда хватало стандартной (ну может новые методы в inventMovement добавлял, когда новые поля в inventTrans заводил). |
|
28.01.2010, 11:44 | #6 |
Ищущий знания...
|
о, нконец то появилась тема в которой могу высказать своё "фе" на тему документации архитектуры классов InventUpd и InventMovement.
Я не могу понять, почему такие фундаментальные классы ни в какой документации не описаны?! (что они делают, зачем нужен тот или иной метод и т.д и т.п) Приходится урывками искать информацию в интернете, у знакомых и прочих областях (например у своего горького опыта ) В итоге получается: хочешь сделать доработку по всем правилам (Best Practices), и следуя всем канонам стандартной архитектуры... Ищешь доки, как сделать? доков нет... Начинаешь копать примеры, вроде разбираешься что как работает, делаешь доработку... И потом при тестировании начинают всплывать всякие мелочи\подводные камни, которых попросту и не заметиш при первом приближении... Естественно чем больше опыта у программиста, тем глубже его знания... А как тогда, простите, корректно кодировать новичкам??? Фуух, вроде все сказал
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
28.01.2010, 11:50 | #7 |
Banned
|
В эти классы вообще лучше не залезать, особенно в свете багов и связанных с ними изменений в каждом сервис-паке. IMHO
|
|
28.01.2010, 12:59 | #8 |
Участник
|
Цитата:
Сообщение от Wamr
"может какие-то куски логики вам кажутся ненужной, неправильной и так далее"
Лично меня, всегда раздражал перекрестный стек вызовов InventUpd - InventMov, когда из проверки InventUpd вызывается проверка InventMov, которая вызывает проверку InventUpd, которая вызывает проверку InventMov. (относится к Ax3, в Ax5 не смотрел) |
|
28.01.2010, 13:41 | #9 |
Moderator
|
Цитата:
Я думаю, у вас там что-то в логике разноски изменено, из за чего базовый класс разноски вызывается на клиенте, что и порождает чехарду... |
|
|
За это сообщение автора поблагодарили: Logger (1). |
28.01.2010, 13:57 | #10 |
Участник
|
Да, есть такое дело.
|
|
28.01.2010, 16:06 | #11 |
Участник
|
Цитата:
Я не могу понять, почему такие фундаментальные классы ни в какой документации не описаны?!
Цитата:
в стандартной поставке не хватает хорошего tutorial по созданию собственных складских документов, которой также стоило бы расписать в тренинге Development IV.
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ |
|
28.01.2010, 22:00 | #12 |
Гость
|
Буквально сегодня рисовал свой InventUpd_* класс (добавлял дополнительный статус проводки для ax2009)
В принципе, там всё просто, но для новичка наверное не помешали бы комменты в коде или хотя бы описание переменных, объявленых в класс декларейшн. |
|
29.01.2010, 10:04 | #13 |
Участник
|
AX2009 напомнил про одну деталь. Правда она не напрямую затрагивает InventUpd*, но связана с этими классами.
В перечислениях статусов прихода и расхода значения идут подряд не хватает "дырок", позволяющих вводить свои промежуточные статусы (например, ушло от поставщика и находится в пути). А так как во многих местах идет сравнение, то вводить новые статусы проблематично - приходится во многие места добавлять к условиям > (или >=) еще и || Что-то там |
|
|
За это сообщение автора поблагодарили: konopello (2). |
29.01.2010, 10:33 | #14 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
AX2009 напомнил про одну деталь. Правда она не напрямую затрагивает InventUpd*, но связана с этими классами.
В перечислениях статусов прихода и расхода значения идут подряд не хватает "дырок", позволяющих вводить свои промежуточные статусы (например, ушло от поставщика и находится в пути). А так как во многих местах идет сравнение, то вводить новые статусы проблематично - приходится во многие места добавлять к условиям > (или >=) еще и || Что-то там Мне кажется, в стандартном коде некорректно поставлены условия на эти статусы в виде ">" или "<" Изначально правильнее было бы перечисления вводить. |
|
29.01.2010, 10:33 | #15 |
Moderator
|
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле. Но вот только вопрос: Допустим вы между Ordered и Arrived завели статусы InTransitForeign, InCustomWarehouse,InTransitDomestic. Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ?
Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение.. |
|
29.01.2010, 10:59 | #16 |
Administrator
|
Цитата:
Сообщение от fed
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле.
... Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ? Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение..
__________________
Возможно сделать все. Вопрос времени |
|
29.01.2010, 11:38 | #17 |
Участник
|
Цитата:
Т.е. в моём представлении, если UseEnumValue = NoYes::Yes, то enum представляет собой не просто множество доступных значений, а именно упорядоченное множество. И в таком случае логично повсеместно использовать операции < >. |
|
29.01.2010, 12:02 | #18 |
Administrator
|
Цитата:
1. Обозреватель таблиц 2. Обычные формы, где используется енум 3. Отладчик. Нигде не показывается числовое значение енума. Его можно увидеть лишь в свойствах енума аналогично его id. Т.е. конечно программист при желании может достать числовое значение. Но в коде он оперирует именно буквенными обозначениями енума, которые математически сравнивать некорректно на больше или меньше.
__________________
Возможно сделать все. Вопрос времени |
|
29.01.2010, 12:23 | #19 |
Участник
|
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.
P.S.: Cоздавая relation'ы на таблицах с использованием enum приходится использовать их числовые значения. |
|
29.01.2010, 14:38 | #20 |
Administrator
|
Цитата:
Сообщение от S.Kuskov
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.
И неупорядоченные - в которых порядок неважен - главное - наличие значения (например, кодировка файла при экспорте). Сейчас все имеющиеся Enum-ы неупорядоченные. Упорядочить их можно - сделав класс-обертку, который бы контролировал статусы и их сравнивал. Либо править ядро. Поэтому, на будущее я и предложил - что хорошо было бы сделать однообразно. Неважно как. Увы, это так - но я бы назвал это скорее недостатком ядра, т.к. уже успел еще на 3.0 столкнуться с тем, что MS менял id значения енумов, в результате чего в собственных доработках приходилось раскапывать все эти места и править
__________________
Возможно сделать все. Вопрос времени |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Как выполнять дефрагментирование RecID | 174 | |||
Передача функции в качестве параметра | 20 | |||
Общий вопрос по реализации кап стоя в Axapta | 3 | |||
Вопрос по дизайну отчета | 8 | |||
Вопрос по дизайну | 1 |
|