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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2011, 01:02   #41  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
В чем преимущество ax-классов перед непосредственной работой с таблицами?
"Управление из одной точки", отсутствие явных завязок на бизнес-логику, определяющую взаимозависимости полей, в фиговой туче мест приложения, где нужно работать с таблицей (соблюдения принципа DRY, пользуясь другой терминологией). За счет этого при необходимости изменить эту логику достаточно поправить один класс вместо десятков мест в коде. Код инициализации записи максимально упрощается: накидали известные значения полей (причем в произвольном порядке!), дернули один метод - и готово.
Цитата:
Сообщение от mazzy Посмотреть сообщение
в ходе обсуждения выявлены следующие вкусности axbc-классов:
1. удобство для программиста для использования во внешних системах
2. автоматическая "подмена кода" в некоторых заранее прописанных местах
3. инструменты для генерации классов-оберток.
Генераторы классов-оберток - это не вкусности, а средства компенсации негативных моментов, связанных с использованием AxBC-классов: любой дополнительный слой абстракции требует дополнительных накладных расходов на его поддержку, и генератор AxBC-классов-оберток лишь несколько снижает эти накладные расходы.
Цитата:
Сообщение от mazzy Посмотреть сообщение
только в чем преимущество внутри Аксапты то?
4. Код, работающий с таблицами, намного меньше завязан на бизнес-логику, связанную с той или иной таблицей, он намного более унифицирован.
5. При необходимости начать заполнять новое поле в зависимости от других полей во всех местах, где идет создание записей в таблице, достаточно поменять один класс - не надо менять десятки мест в приложении, где об этом поле раньше никто не знал (опять же принцип DRY, снижение стоимости сопровождения).
6. Это, по-моему, очень важно: методы initFromXX могут давать разный результат в зависимости от последовательности их вызова! При реализации AxBC-класса вам вам волей-неволей приходится продумать единую систему приоритезации зависимостей полей. Это сложнее, но зато уменьшает вероятность того, что вроде бы один и тот же код будет работать иначе в разных местах приложения просто из-за разного порядка вызова методов initFromXX.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Например, для работы с журналами внутри Аксапты есть:
= и непосредственная работа с таблицами через initFrom* и переопределение (overload) системных методов
Ничем не отличается от работы с любыми другими таблицами - со всеми описанными выше проблемами.
Цитата:
Сообщение от mazzy Посмотреть сообщение
= и классы JournalTableData, JournalTransData, journalStactic.
Не более чем код, реализующий общие моменты работы с журналами: ваучеры, номера журналов, итоги по строкам журналов в шапке, блокировки... В общем, ничего из того, что делают классы AxBC.
Цитата:
Сообщение от mazzy Посмотреть сообщение
= и куча классов типа LedgerJournalTransUpdate* и даже локализаторское семейство LedgerJournalCreate*
Слишком узкоспециализированы
Цитата:
Сообщение от mazzy Посмотреть сообщение
= и классы LedgerJournalTransType в зачаточном состоянии (причем LedgerJournalTableType отсутствует)
И ничего он не отсутствует Это уже ближе к теме, но все же недоразвито.
Цитата:
Сообщение от mazzy Посмотреть сообщение
= и axLedgerJournal*
Почти ничего не отличается от "голой" обертки, генерируемой мастером. Еще, наверно, стоило упомянуть семейство LedgerJournalEngine: раньше эти классы были жуткой смесью бизнес- и презентационной логики, к тому же работавшей строго на клиенте: они управляли и заполнением одних полей при изменении других, и доступом на редактирование всей текущей записи или отдельных полей, т.е. заведомо предполагалось, что курсор связан с datasource'ом и это предположение почти нигде не проверялось. Сейчас отчасти эти косяки исправлены, но остались те же "родовые проблемы", что и при использовании initFromXX: результат очень сильно зависит от порядка заполнения полей и дергания различных методов класса, плюс идея type-классов, как всегда, реализована не до конца: в базовом классе остался вагон и маленькая тележка мест, где явно прописан тот или иной тип журнала, вместо параметризации логики и перегрузки параметрических методов в классах-наследниках. И опять получается, что если в десятках мест создается журнал определенного типа, а потом в нем надо заполнять новое поле, то надо идти и править одинаковым образом эту хренову тучу мест, а если это стандартный функционал, то проделывать эту работу снова при любом крупном обновлении приложения.
Цитата:
Сообщение от mazzy Посмотреть сообщение
В чем преимущество каждого из подходов? Когда и какой применять?
Провокация какая-то Я лично не готов писать руководства в стиле Best Practices, могу лишь сказать, к чему пришел на собственном опыте после нескольких лет разработки: если речь идет не о контрактной работе по реализации разовых модификаций, то в долгосрочной перспективе предпочтительным видится подход с использованием AxBC-классов. Он сложнее в реализации, требует фиговой тучи промежуточного кода (который, впрочем, можно во многом сгенерить мастером), требует выворачивания на изнанку привычной логики работы методов initFromXX (там изменили одно поле - и каскадом поменялась куча других, тут надо описывать изменение каждого отдельного "другого" поля в зависимости от возможных изменений кучи "исходных" полей). Но в общем и в целом он существенно снижает стоимость поддержки приложения. А при реализации модификаций, если речь, опять же, не идет о разовой контрактной работе, нужно в первую очередь думать о перспективах поддержки, а не о стоимости решения текущей локальной задачи. Причем в стоимость поддержки входит как стоимость возможного изменения кода в будущем, так и стоимость его переноса на новые service pack'и и новые версии приложения. Более того, опять хотел бы вернуться к процитированному фрагменту из "What's New - Technical in Microsoft Dynamics AX 2012 for Development": в следующей версии штатно будет реализована возможность редактировать данные в Excel - то, о чем мечтает, по моим впечатлениям, 95% пользователей Аксапты, особенно работающих с финансами. Эта возможность напрямую будет зависеть от наличия и корректности реализации AxBC-классов, так что их реализация и использование сейчас - это еще и большой задел на будущее. Но, разумеется, в определенных условиях (таблица используется лишь в нескольких местах приложения, либо нужно сделать простое решение, а на разработку AxBC-классов никто не выделит бюджет, либо все уже слишком запущено, и на рефакторинг всего существующего кода никто не выделит бюджет) придется использовать лучшее из имеющегося либо создавать "простые" initFromXX-методы.
За это сообщение автора поблагодарили: mazzy (10), Logger (10), DmitrySt (1), konopello (3), wojzeh (1).
Старый 28.03.2011, 01:16   #42  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я тут в блогах увидел интересную сравнительную таблицу для выбора оптимального метода хранения и отборки товара на складе в зависимости от ряда параметров:

Так вот, чтобы ответить на поставленный вопрос:
Цитата:
Сообщение от mazzy Посмотреть сообщение
когда именно эффективнее использовать одно, а когда именно другое
нужно, как вариант, составить подобную таблицу для выбора оптимального API/подхода по работе с теми же журналами в зависимости от различных параметров. Но это очень непростая задача, мне кажется, в рамках простого обсуждения в одной ветке форума ее не решить.
Старый 28.03.2011, 01:34   #43  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо. Круть.
Цитата:
Сообщение от gl00mie Посмотреть сообщение
При реализации AxBC-класса вам вам волей-неволей приходится продумать единую систему приоритезации зависимостей полей. Это сложнее, но зато уменьшает вероятность того, что вроде бы один и тот же код будет работать иначе в разных местах приложения просто из-за разного порядка вызова методов initFromXX.
о_О!

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Провокация какая-то


Цитата:
Сообщение от gl00mie Посмотреть сообщение
то в долгосрочной перспективе предпочтительным видится подход с использованием AxBC-классов. Он сложнее в реализации, требует фиговой тучи промежуточного кода (который, впрочем, можно во многом сгенерить мастером), требует выворачивания на изнанку привычной логики работы методов initFromXX (там изменили одно поле - и каскадом поменялась куча других, тут надо описывать изменение каждого отдельного "другого" поля в зависимости от возможных изменений кучи "исходных" полей). Но в общем и в целом он существенно снижает стоимость поддержки приложения.
Надо подумать....

Наизнанку, стало быть... А ведь, правда... Спасибо за хорошее слово...
Название: 1.PNG
Просмотров: 1076

Размер: 3.4 Кб


Цитата:
Сообщение от gl00mie Посмотреть сообщение
Более того, опять хотел бы вернуться к процитированному фрагменту из "What's New - Technical in Microsoft Dynamics AX 2012 for Development": в следующей версии штатно будет реализована возможность редактировать данные в Excel - то, о чем мечтает, по моим впечатлениям, 95% пользователей Аксапты, особенно работающих с финансами.
О, дык вот какая задумка была...
Тогда годная задумка...

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Эта возможность напрямую будет зависеть от наличия и корректности реализации AxBC-классов, так что их реализация и использование сейчас - это еще и большой задел на будущее. Но, разумеется, в определенных условиях (таблица используется лишь в нескольких местах приложения, либо нужно сделать простое решение, а на разработку AxBC-классов никто не выделит бюджет, либо все уже слишком запущено, и на рефакторинг всего существующего кода никто не выделит бюджет) придется использовать лучшее из имеющегося либо создавать "простые" initFromXX-методы.
О!
А есть методика сопряжения старого (initFrom) и нового (axBC) подхода?
Или они принципиально несопряжимы?

Т.е. можно ли использовать initFrom из axBC-классов? и наоборот, можно ли использовать axBC из InitFrom?
какие ограничения? при каких условиях это допустимо, а при каких нет?
__________________
полезное на axForum, github, vk, coub.
Старый 28.03.2011, 12:13   #44  
Zepp is offline
Zepp
Участник
MCBMSS
 
37 / 31 (2) +++
Регистрация: 26.10.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
... Присоединюсь к Zabr и спрошу - а может где-нибудь есть документация для чего ax-классы сделаны и как с ним работать? ...
Есть здесь:
APIs in the Standard Application
http://msdn.microsoft.com/en-US/library/aa873132.aspx
Application Integration Framework Overview
http://msdn.microsoft.com/en-us/library/bb496535.aspx

Также в книгах:
"Inside Microsoft Dynamics AX 4.0" Part II Chapter 9,
"Inside Microsoft Dynamics AX 2009" Part III Chapter 17.
__________________
Мой профиль
За это сообщение автора поблагодарили: mazzy (2), Logger (6).
Старый 28.04.2011, 12:20   #45  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Эх, интересное обсуждение прошло мимо в угаре работы...
Вставлю свои 5 копеек и попробую ответить на этот вопрос:
Цитата:
Т.е. можно ли использовать initFrom из axBC-классов? и наоборот, можно ли использовать axBC из InitFrom?
какие ограничения? при каких условиях это допустимо, а при каких нет?
В качестве продолжения идей, описанных gloomie (я полностью согласен с ним), считаю, что старый подход initFromxxx стоит использовать в процессе рефакторинга и "разрыва" порочной практики их использования и только из самих axBC в качестве готовых "наборов" для инициализации каких-то полей. Другое дело, что делать этот рефакторинг и переработку достаточно эффективно, и не думая о проблемах последующей миграции на новую версию/обновление, может только сам вендор (aka Microsoft). Так что для разработчиков, работающих уже на конкретной версии системы, думаю, стоит ограничиться "нераспространением зла" и использованием только нового API, не трогая legacy.

Далее. Расписывая прелести axBC, gloomie не счел достойным упомянуть, что при реализации конкретной необходимой функциональности, стройное дерево зависимостей инициализации полей, одну ветку из которого нарисовал mazzy, зачастую начинает обретать петли. Так бывает, когда задача ставится таким образом, что для окончательного определения значений конкретного поля, приходится сделать один "оборот" по такой петле, порой, даже насильственно перезаписывая уже единожды заполненное поле. А раз так - то прозрачная схема метода setTableFields уже становится не такой уж и прозрачной, Так, забавна ситуация, когда в пришедшей по AIF записи какое-либо из полей заполнено неправильно (т.е. значение-то корректное, но в сочетании с другими полями - нет). Существующая реализация AIF такое поле уже перезаписать штатной обработкой не сможет, setField, вызываемый в процессе обработки записи, не будет записывать уже единожды записанное поле.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
За это сообщение автора поблагодарили: mazzy (5), Logger (3).
Старый 28.04.2011, 12:29   #46  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Maximin Посмотреть сообщение
Существующая реализация AIF такое поле уже перезаписать штатной обработкой не сможет, setField, вызываемый в процессе обработки записи, не будет записывать уже единожды записанное поле.
О_о!
Какие рекомендации по использованию?
я так понимаю, что стиль initFrom можно объявлять legacy и по возможности использовать axBC. так?

Можно ли попросить соображения в стиле: при таких то случаях лучше делать так?...
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2011, 13:09   #47  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Сообщение от mazzy
я так понимаю, что стиль initFrom можно объявлять legacy и по возможности использовать axBC. так?

Можно ли попросить соображения в стиле: при таких то случаях лучше делать так?...
1. Да. Это позволит получить правильное поведение системы при интеграции (использовании AIF), т.е. в деле пресловутый DRY; единый для многих таблиц и более доступный для обобщения API, хоть один раз и надо будет потрудиться для полного понимания механизма. Другое дело, что при этом довольно много стандартного функционала в системе УЖЕ использует старый способ. Надо как-то жить с этим. Переделывать, я повторюсь, вряд ли кто-то себе позволит, разве что есть много простаивающей рабочей силы. Опять же, в свете AX2012 это будет мартышкин труд - слишком велики изменения. Всё, что я писал в предыдущем посте, про рефакторинг и т.д. - это взгляд с точки зрения "как надо было бы сделать по фен-шую".
2. Что же касается реальной разработки, то тут варианта 2:
2.1 "Чистый новый проект" - делаем все на новых классах, за initFromxxx - бьем по рукам, параллельно допиливаем axBC (может быть, используя initFromXXX, правда, очень сомневаюсь, что оно там пригодится, заполнение полей делается несколько по-другому), т.к. из-за использования в стандарте старых подходов, чего-то будет неминуемо не хватать. На выходе - имеем допиленный API и сразу "искаропки" работающий AIF, заказчик, решивший внедрить ESB, или прикрутить свой Web-магазин счастлив.
2.2 Проект, в котором много собранного/собирающегося из кучи уже внедренных решений. Ну, что тут сказать - знающий, да содрогнется. В этой бочке меда уже есть изрядная толика дёгтя. Конечно, смотря что собиралось. Но если туда добавится еще ложка - вряд ли ей станет сильно хуже. Останавливать желающего поиметь experience это не должно. Но если есть хотя бы отдаленная перспектива взаимодействия через XML с внешними системами, переносимые доработки должны быть подвергнуты тщательному исследованию на предмет переделки на API axBC. У меня уже был опыт адаптации уже запущенного решения для нормальной работы с AIF, и я скажу, удовольствие это сильно ниже среднего, учитывая, "удобство" отладки при потреблении Web-сервисов AX внешними системами. Т.е. напилено было много чисто "по старому", и для внесения всего этого в новую схему, хотя бы в деле простого создания/редактирования записей, пришлось много потрудиться.

В целом,
Цитата:
Сообщение от gloomie
в долгосрочной перспективе предпочтительным видится подход с использованием AxBC-классов
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
За это сообщение автора поблагодарили: mazzy (5), fed (5).
Старый 28.04.2011, 21:30   #48  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maximin Посмотреть сообщение
при реализации конкретной необходимой функциональности, стройное дерево зависимостей инициализации полей, одну ветку из которого нарисовал mazzy, зачастую начинает обретать петли. Так бывает, когда задача ставится таким образом, что для окончательного определения значений конкретного поля, приходится сделать один "оборот" по такой петле, порой, даже насильственно перезаписывая уже единожды заполненное поле.
А можно пример такой ситуации с реальной таблицей и реальным полем, если только это не фин.аналитика? Изначально, как пишется везде в руководствах, задача AxBC-классов - подтягивание значений по умолчанию для одних полей в зависимости от тех или иных комбинаций значений других полей, заданных "извне". Если в заказе выбирается "счет на", то по нему можно автоматом подтянуть значение кода клиента, но если оно уже задано "извне", то нечего его перезатирать - это просто не входит в обязанности AxBC-классов. Если кто-то указал "неверное" значение поля, то это его право, но вылавливаться это должно на уровне validateField() или validateWrite(), а никак не на уровне класса, который должен подтягивать значения по умолчанию. Да, при импорте данных возникает сложность с тем, чтобы отличать, скажем, пустое значение и "отсутствие значения" (т.е. ситуацию, когда значение поля не надо задавать "извне", чтобы тот же AxBC-класс мог подтянуть корректное значение), но это уже немного другая тема. В том же .NET-е вполне себе справляются с такими ситуациями, успешно различая, когда задано пустое значение параметра и когда значение параметра "отсутствует".
Цитата:
Сообщение от Maximin Посмотреть сообщение
Так, забавна ситуация, когда в пришедшей по AIF записи какое-либо из полей заполнено неправильно (т.е. значение-то корректное, но в сочетании с другими полями - нет). Существующая реализация AIF такое поле уже перезаписать штатной обработкой не сможет, setField, вызываемый в процессе обработки записи, не будет записывать уже единожды записанное поле.
По-моему, это совершенно правильное поведение: если внешняя или внутренняя программная логика сочла нужным установить определенное значение поля, то нечего его перезаписывать, "решая" за эту программную логику, как правильно. Ошибка, если она и возникнет, должна, по-моему, решаться по факту на уровне этой программной логики.
Не везде такой подход применим, конечно, например, какая-нить настройка фиксированной аналитики в проверке аналитик для счетов ГК, из-за которой молча могут перезатираться аналитики в проводках по этим счетам, в эту идеологию явно не вписываются.
Старый 29.04.2011, 13:24   #49  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Сообщение от gl00mie
По-моему, это совершенно правильное поведение: если внешняя или внутренняя программная логика сочла нужным установить определенное значение поля, то нечего его перезаписывать, "решая" за эту программную логику, как правильно. Ошибка, если она и возникнет, должна, по-моему, решаться по факту на уровне этой программной логики.
По-моему, это не всегда верно и допустимо.
Внешняя система не может или не должна знать некоторые из параметров, требуемые для полностью корректного заполнения всех полей записи. В самом деле, например, если у вас b2b взаимодействие, то должен ли ваш клиент/поставщик знать, к примеру, его группу цен? Ему главное - чтобы его заказ пришел к вам, а если ваша система будет по любому чиху отвергать его заказ, нетерпимо относясь к несколько неверно заполненному запросу, вы потеряете клиента. Так что система пр работе с внешними запросами должна допускать некий "люфт" в данных - их некоторую неполноту, автоматически исключая/корректируя внешние данные. Не будете же вы отвергать создание нового заказа из Web-магазина, из-за того, что формат адреса или телефона не соответствует заданному?
Что касается "петель", то реальный пример как раз и был связан с тем, что извне пришло пустое значение, и требовалось его переопределить, причем, в зависимости от других значений по умолчанию. А после переопределения, оно само начинало влиять на эти другие значения. Что-то вроде той же ценовой группы и группы скидок, завязанной из-за специфической схемы ценообразования на те же ценовые группы (для некоторых ценовых групп скидки были неприменимы). Сами понимаете, что вытаскивать "наружу" ценоообразование Аксапты мало того что сложно технически, но еще, зачастую, и крайне нежелательно по маркетинговым соображениям.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 29.04.2011, 15:25   #50  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maximin Посмотреть сообщение
Внешняя система не может или не должна знать некоторые из параметров, требуемые для полностью корректного заполнения всех полей записи. В самом деле, например, если у вас b2b взаимодействие, то должен ли ваш клиент/поставщик знать, к примеру, его группу цен?
Разумеется! И какие фин.аналитики на него повешены, и какой код у его адреса доставки (если, допустим, адресам какой-то уникальный идентификатор присваивать), и с каким типом должен заказ создаться, и еще кучу всего контрагент знать не должен - и не должен указывать это в той информации по заказу, которую он присылает! Именно для этого и нужны во многом AxBC-классы - подтягивать значения по умолчанию для тех полей, которые не заполнены извне.
Цитата:
Сообщение от Maximin Посмотреть сообщение
Так что система пр работе с внешними запросами должна допускать некий "люфт" в данных - их некоторую неполноту, автоматически исключая/корректируя внешние данные.
Тут, по-моему, идет подмена понятий: указание "пустых" значений и не указание значений вовсе. Проводя аналогию с СУБД, надо отличать пустые строки и нулевые значения от NULL, и тогда все встанет на свои места. Если пришло пустое значение, а оно недопустимо, то данные ошибочны. Если пришел NULL, а мы знаем, чем можно заполнить поле, то все в порядке, такие "неполные" данных мы успешно обработаем (наверно ).
Цитата:
Сообщение от Maximin Посмотреть сообщение
Не будете же вы отвергать создание нового заказа из Web-магазина, из-за того, что формат адреса или телефона не соответствует заданному?
Ну как сказать... зависит от того, как организовать взаимодействие с контрагентом. Если через web-интерфейс сайта вы не можете отправить заказ, потому что указываете контактный телефон или email не в том формате, в каком просят, значит ли это, что интернет магазин по такой пустяковой причине отвергает ваш заказ? Причем магазин даже не знает, что вы пытаетесь кривые данные отослать - это Java-скрипты в браузере на вашем собственном компе отрабатывают. А если такой же результат вы получите в ответ на запрос к веб-сервису этого интернет-магазина, то что изменится? Или другой пример, который мне немного ближе: работаете вы с факторинговой компанией, которая вам оплачивает 80-90% от суммы ваших отгрузок клиентам не через 30-60 дней, как прописано у вас в договоре с клиентом, а на следующий же день - за определенные комиссионные, разумеется. Вы им каждый день выгружаете электронный или бумажный реестр документов, при необходимости сдаете стопки копий фактур, они их у себя в систему заводят, обрабатывают... И вот бывает, что одна факторинговая компания готова работать даже с документами, у которых специально для этой компании сформированный штрих-код не читается (на такой случай сидят девочки-операторы, которые вбивают информацию по документу вручную, а не простым сканированием ШК). Правда, за обработку каждого такого документа с вас берут на порядок больше, чем в случае, когда данные нормально считались по ШК, но это мелочи. А бывают и другие компании, которые мало того, что хотят получать реестры документов в своем формате, но еще и требуют, чтобы вы для них ООО "Пупкин и компания" именовали не иначе, нежели Пупкин и компания ООО (в другом порядке и без кавычек - фиг знает, может, у них какой-нить кривой импорт из csv-файлов используется), в противном случае никакие документы они не примут и финансировать ваши отгрузки не станут. Вот и получается, что обе компании сидят на мешках с деньгами, но одна проявляет гибкость, чтобы деньги эти в дело пустить, а другая - упирается рогом, потому что "формат не соответствует заданному". В общем, каждому свое...
Цитата:
Сообщение от Maximin Посмотреть сообщение
Что касается "петель", то реальный пример как раз и был связан с тем, что извне пришло пустое значение, и требовалось его переопределить, причем, в зависимости от других значений по умолчанию. А после переопределения, оно само начинало влиять на эти другие значения. Что-то вроде той же ценовой группы и группы скидок, завязанной из-за специфической схемы ценообразования на те же ценовые группы (для некоторых ценовых групп скидки были неприменимы). Сами понимаете, что вытаскивать "наружу" ценоообразование Аксапты мало того что сложно технически, но еще, зачастую, и крайне нежелательно по маркетинговым соображениям.
Поскольку специфика вашего ценообразования мне неизвестна, судить о реализации соотв. алгоритма не берусь, хотя, по-моему, его можно было бы все же сделать нерекурсивным...
Теги
ax-классы, axbc, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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