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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2010, 21:25   #1  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
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  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
"может какие-то куски логики вам кажутся ненужной, неправильной и так далее"

Лично меня, всегда раздражал перекрестный стек вызовов InventUpd - InventMov, когда из проверки InventUpd вызывается проверка InventMov, которая вызывает проверку InventUpd, которая вызывает проверку InventMov. (относится к Ax3, в Ax5 не смотрел)
Старый 28.01.2010, 09:09   #3  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Мы тут как-то обсуждали одну неприятность в этих классах.
Резервирование при переносе
Старый 28.01.2010, 11:14   #4  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Цитата:
перекрестный стек вызовов InventUpd - InventMov
Спасибо - интересное наблюдение.

Цитата:
Мы тут как-то обсуждали одну неприятность в этих классах.
Резервирование при переносе
Спасибо - проблема ясна.
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/
Старый 28.01.2010, 11:28   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Ну я бы сказал, что в стандартной поставке не хватает хорошего tutorial по созданию собственных складских документов, которой также стоило бы расписать в тренинге Development IV.
По архитектуре - особых замечаний нет, всегда хватало стандартной (ну может новые методы в inventMovement добавлял, когда новые поля в inventTrans заводил).
Старый 28.01.2010, 11:44   #6  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
о, нконец то появилась тема в которой могу высказать своё "фе" на тему документации архитектуры классов InventUpd и InventMovement.
Я не могу понять, почему такие фундаментальные классы ни в какой документации не описаны?! (что они делают, зачем нужен тот или иной метод и т.д и т.п)
Приходится урывками искать информацию в интернете, у знакомых и прочих областях (например у своего горького опыта )
В итоге получается: хочешь сделать доработку по всем правилам (Best Practices), и следуя всем канонам стандартной архитектуры... Ищешь доки, как сделать? доков нет... Начинаешь копать примеры, вроде разбираешься что как работает, делаешь доработку... И потом при тестировании начинают всплывать всякие мелочи\подводные камни, которых попросту и не заметиш при первом приближении... Естественно чем больше опыта у программиста, тем глубже его знания... А как тогда, простите, корректно кодировать новичкам???
Фуух, вроде все сказал
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 28.01.2010, 11:50   #7  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
В эти классы вообще лучше не залезать, особенно в свете багов и связанных с ними изменений в каждом сервис-паке. IMHO
Старый 28.01.2010, 12:59   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Wamr Посмотреть сообщение
"может какие-то куски логики вам кажутся ненужной, неправильной и так далее"

Лично меня, всегда раздражал перекрестный стек вызовов InventUpd - InventMov, когда из проверки InventUpd вызывается проверка InventMov, которая вызывает проверку InventUpd, которая вызывает проверку InventMov. (относится к Ax3, в Ax5 не смотрел)
Особенно весело это смотрится когда InventMovement живет на клиенте. Ворох клиент-серверных вызовов.
Старый 28.01.2010, 13:41   #9  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Logger Посмотреть сообщение
Особенно весело это смотрится когда InventMovement живет на клиенте. Ворох клиент-серверных вызовов.
Ну как бы при нормальной разноске - он не должен жить на клиенте. Просто у inventMovement стоит RunOn:called from из за того, что иногда он вызывается не для разноски, а для того чтобы какая-нибудь форма (типа формы "В наличии") могла получить некоторые параметры складского документа, не залезая напрямую в исходную таблицу. Если inventMovement создается из кода разноски, скажем - PurchFormLetter_invoice, то он должен унаследовать execution tier от вызывающего класса. Который, в нормальных условиях, будет выполняться на сервере.
Я думаю, у вас там что-то в логике разноски изменено, из за чего базовый класс разноски вызывается на клиенте, что и порождает чехарду...
За это сообщение автора поблагодарили: Logger (1).
Старый 28.01.2010, 13:57   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да, есть такое дело.
Старый 28.01.2010, 16:06   #11  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Цитата:
Я не могу понять, почему такие фундаментальные классы ни в какой документации не описаны?!
Цитата:
в стандартной поставке не хватает хорошего tutorial по созданию собственных складских документов, которой также стоило бы расписать в тренинге Development IV.
Согласен. Постараемся исправить. Посмотрим что получиться.
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/
Старый 28.01.2010, 22:00   #12  
AX2009
Гость
 
n/a
Буквально сегодня рисовал свой InventUpd_* класс (добавлял дополнительный статус проводки для ax2009)
В принципе, там всё просто, но для новичка наверное не помешали бы комменты в коде или хотя бы описание переменных, объявленых в класс декларейшн.
Старый 29.01.2010, 10:04   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
AX2009 напомнил про одну деталь. Правда она не напрямую затрагивает InventUpd*, но связана с этими классами.
В перечислениях статусов прихода и расхода значения идут подряд не хватает "дырок", позволяющих вводить свои промежуточные статусы (например, ушло от поставщика и находится в пути). А так как во многих местах идет сравнение, то вводить новые статусы проблематично - приходится во многие места добавлять к условиям > (или >=) еще и || Что-то там
За это сообщение автора поблагодарили: konopello (2).
Старый 29.01.2010, 10:33   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
AX2009 напомнил про одну деталь. Правда она не напрямую затрагивает InventUpd*, но связана с этими классами.
В перечислениях статусов прихода и расхода значения идут подряд не хватает "дырок", позволяющих вводить свои промежуточные статусы (например, ушло от поставщика и находится в пути). А так как во многих местах идет сравнение, то вводить новые статусы проблематично - приходится во многие места добавлять к условиям > (или >=) еще и || Что-то там
Да, точно!

Мне кажется, в стандартном коде некорректно поставлены условия на эти статусы в виде ">" или "<"
Изначально правильнее было бы перечисления вводить.
Старый 29.01.2010, 10:33   #15  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле. Но вот только вопрос: Допустим вы между Ordered и Arrived завели статусы InTransitForeign, InCustomWarehouse,InTransitDomestic. Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ?
Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение..
Старый 29.01.2010, 10:59   #16  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле.
...
Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ?
Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение..
Тут надо определиться. Либо надо ВЕЗДЕ делать сравнение по < > и тогда делать "дырки" в статусах, либо ВЕЗДЕ перечислять их и отказаться от < >. Я (мое личное мнение) за то, чтобы отказаться от < >, т.к. внутреннее числовое значение енума спрятано от пользователя/программиста. А если уж кто вводит новй статус - пусть 10 раз подумает в скольких местах это аукнется. Ту же новую складскую аналитику прописываем в N-цати местах - научились. Так и тут - научимся коль припрет
__________________
Возможно сделать все. Вопрос времени
Старый 29.01.2010, 11:38   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
внутреннее числовое значение енума спрятано от пользователя/программиста
Это почему же? Программисту вполне доступна информарция о числовых значениях enum'а. А если включить свойство UseEnumValue, то и пользователь будет иметь представление, если не о самих значениях, то хотябы о порядке их следования.

Т.е. в моём представлении, если UseEnumValue = NoYes::Yes, то enum представляет собой не просто множество доступных значений, а именно упорядоченное множество. И в таком случае логично повсеместно использовать операции < >.
Старый 29.01.2010, 12:02   #18  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это почему же? Программисту вполне доступна информарция о числовых значениях enum'а.
Не согласен. Пользуемся штатными средствами:
1. Обозреватель таблиц
2. Обычные формы, где используется енум
3. Отладчик.

Нигде не показывается числовое значение енума. Его можно увидеть лишь в свойствах енума аналогично его id. Т.е. конечно программист при желании может достать числовое значение. Но в коде он оперирует именно буквенными обозначениями енума, которые математически сравнивать некорректно на больше или меньше.
__________________
Возможно сделать все. Вопрос времени
Старый 29.01.2010, 12:23   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.

P.S.: Cоздавая relation'ы на таблицах с использованием enum приходится использовать их числовые значения.
Старый 29.01.2010, 14:38   #20  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.
Вот... а в этом случае на уровне АОТа Enum-ы следовало бы разбить на 2 вида: Упорядоченные, для которых доступны операции инкремента/декремента и в которых программист не управляет значениями в БД, но зато сам может вставить промежуточный статус. Сейчас это не получится сделать, т.к. между двумя последовательными целыми числами новое число не вставишь. Хотя параметр UseEnumValue казалось бы мог решить сию проблему.

И неупорядоченные - в которых порядок неважен - главное - наличие значения (например, кодировка файла при экспорте).

Сейчас все имеющиеся Enum-ы неупорядоченные. Упорядочить их можно - сделав класс-обертку, который бы контролировал статусы и их сравнивал. Либо править ядро.
Поэтому, на будущее я и предложил - что хорошо было бы сделать однообразно. Неважно как.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
P.S.: Cоздавая relation'ы на таблицах с использованием enum приходится использовать их числовые значения.
Увы, это так - но я бы назвал это скорее недостатком ядра, т.к. уже успел еще на 3.0 столкнуться с тем, что MS менял id значения енумов, в результате чего в собственных доработках приходилось раскапывать все эти места и править
__________________
Возможно сделать все. Вопрос времени
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как выполнять дефрагментирование RecID mazzy DAX: База знаний и проекты 174 05.10.2017 12:59
Передача функции в качестве параметра lemchey_white DAX: Программирование 20 21.01.2008 22:51
Общий вопрос по реализации кап стоя в Axapta Ann DAX: Функционал 3 09.06.2005 17:58
Вопрос по дизайну отчета ATimTim DAX: Программирование 8 26.10.2004 16:23
Вопрос по дизайну shestakov DAX: Программирование 1 18.12.2001 20:39

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

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

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