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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2017, 11:09   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Ты сам выбрал этот пример.
да. disclimer написан для тех, у кого уже есть подобные технологии. я извиняюсь за безумную реализацию. я просто расширил то, что есть в МС-коде. извините за этот бред.

да, примером можно продолжать пользоваться.

да, это типовой пример. просто МС изначально забыл валюту в автосопоставлении. в результате стандартный код автоспосотавляет все вперемешку. обычно людям нужно автоматом сопоставлять только проводки в одной валюте. разные валюты обычно сопоставляются в специальном режиме.

Цитата:
Сообщение от belugin Посмотреть сообщение
Можно и datasource - какая разница какого типа ключ - можно сделать и имя таблицы и ID.
именно!
ключевое слово "сделать".
если нужно "сделать", то зачем нужен какой-то левый ключ?
давайте будем "сделать" сразу имя класса? и атрибутов писать не нужно.

Цитата:
Сообщение от belugin Посмотреть сообщение
Класс запускач и так у тебя был
Снова приношу свои извинения за безумную реализацию от МС.
Нет, у меня не нужен класс запускач. Достаточно menuItem, который подцепляется к главному меню или к формам.

класс запускач нужен только для запуска класса из Visual Studio.
MenuItem можно сделать стартовым объектом в VS. Но в этом месте бага - параметры menuItem при старте из VS не учитываются. Сотрудники МС не используют этот сценарий ))))

Цитата:
Сообщение от belugin Посмотреть сообщение
мы перерабатываем только создание.
Да.

Цитата:
Сообщение от belugin Посмотреть сообщение
Stragegy не обязательно.
Нет )))
На реальных проектах простейший случай без стратегии - скорее исключение.
На реальных проектах именно "стратегия" и зашита-размазана в конструкторах. Каждый конструктор отвечает за свою часть.

В фреймворке один стратегия должна знать обо всех классах иерархии.

Цитата:
Сообщение от belugin Посмотреть сообщение
У тебя нет параметров в конструкторе (не путать с методом construct). Если параметры есть, достаточно добавить метод init(параметры).
ты снова прав для случая без параметров.
но как часто используется именно этот сценарий?

Цитата:
Сообщение от belugin Посмотреть сообщение
Да, сложнее. Как и сложнее при наследовании вообще и при любой косвенности. Но если знать про такой паттерн достаточно смотреть перекрестные ссылки по атрибуту или иерархию классов.
Макс, му-ха-ха (2 раза)
Сейчас в аск7 82 класса-потомка от SysExtensionIAttribute
выбери любой из них, который реализует несколько уровней иерархии.
Покажи как это просто.

Ты говоришь "просто добавить атрибуты".
Ты говоришь "просто смотреть"
Сделай проектик. Покажи как это просто.

вот на конструкторах по старому я сделал минут за 15 со скриншотами и написанием поста. Раз это так просто, наверняка займет меньше времени.


Цитата:
Сообщение от belugin Посмотреть сообщение
Зачем она там?
И в самом деле! Чего это я? Видать Котлинов всяких наелся...

Цитата:
Сообщение от belugin Посмотреть сообщение
Имя класса, это строка вообще ты про SysPlugin а я про SysExtension. В последнем ключ это фактически что угодно что можно запихать в контейнер.
Я смотрю актуальную аксапту. 7.2.1785.0
Да-да. Я вижу это "что угодно". Строка с ; Это пипец и детский сад какой-то.

Цитата:
Сообщение от belugin Посмотреть сообщение
Для других паттернов - тругие решения, которые тут приводили - например экстеншены для конструкторов.
Угу-угу. Именно! Другие.

Цитата:
Сообщение от belugin Посмотреть сообщение
Это не параметры это ключ.
Да. Согласен. Составной ключ. Содержит некие абстрактные параметры.

Цитата:
Сообщение от belugin Посмотреть сообщение
Нет конструктор находится в каждом классе (не путать с методом construct). Что такое пересечения кода, я не знаю.
Именно.

Цитата:
Сообщение от belugin Посмотреть сообщение
Это решается так же как и любое пересечение имен в Ax - префиксами.
Кем и как? Бгггг!!

Цитата:
Сообщение от belugin Посмотреть сообщение
Я ж тебе пример привел.
Макс, другие доказывающие - можно проектик?


Цитата:
Сообщение от belugin Посмотреть сообщение
4. Подумайте какие из перечисленных проблем новые для норвого механизма, а какие были и с кейзом.
Да-да. И какова трудоемкость решения перечисленных проблем в новом механизме и в фреймворке. А также кто будет ответственным за решение ))))


Цитата:
Сообщение от belugin Посмотреть сообщение
Перекрестные ссылки не отвалились, надо просто смотреть другие ссылики
Именно.


Ребяты, такое ощущение, что вы продолжаете доказывать что фреймворк работает в принципе. Да все читающие эту ветку верят что работает. Если вспомнить, исходный вопрос ветки был: "Какая цель создания экземпляров классов через расширенные атрибуты? Чем не устраивает старый дедовский способ construct?"

Ребяты, прошу вас, не надо примеров "я создал пример из трех классов, я добавил атрибуты". такие примеры ничего не показывают.

Давайте рассматривать нормальный промышленный случай:
= есть семейство классов с несколькими уровнями иерархии
= есть несколько программистов
= которые добавляют/изменяют функционал этого семейства (одновременно или последовательно). в пределе это программисты разных партнеров, которые делают разные типовые решения. а некий программист заказчика ставит эти пересекающиеся типовые решения [из разных моделей]. (в целях упрощения, для данной ветки можно предположить, что модель одна, чтобы рассмотреть только механизм инстанцирования класса)
= как облегчить работу этих людей?

вы говорите ключи-атрибуты.
Ок, пусть.

Как должны выглядеть эти ключи, чтобы разные люди могли добавлять классы-потомки и не мешать друг-другу?
Как должны выглядеть эти ключи, чтобы в принципе была возможность рефакторинга? (да, я знаю что МС не рефакторит, но у партнеров и у заказчика то могут работать нормальные люди)
Зачем вообще нужны специальные ключи вместо имен классов?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 01.06.2017 в 11:14.
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 01.06.2017, 12:15   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
...
Зачем вообще нужны специальные ключи вместо имен классов?
Каждый берет по вопросу. Чур это мой И я только мессенджер.

1. Ключ как внешнее имя
2. Можно менять в рантайме
3. Можно по условиям

By decoupling the base class from derived classes using instances of such attributes, a developer does not modify computer program code defining the base class when adding customized extensions to that base class.

The attributes can be specified at run time to specify or to alter the run time behavior of the application.
This framework also allows the application to conditionally instantiate an element based on its attributes.

Object extensions using attributes to decouple base classes from derived classes
http://patents.justia.com/patent/9026989
Старый 01.06.2017, 12:20   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
2. Можно менять в рантайме
именно!
и статическая компиляция со статическим анализом превращается...

вот именно!
__________________
полезное на axForum, github, vk, coub.
Старый 01.06.2017, 20:02   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
именно!
ключевое слово "сделать".
если нужно "сделать", то зачем нужен какой-то левый ключ?
давайте будем "сделать" сразу имя класса? и атрибутов писать не нужно.
Проанализируй ключ в твоем примере - он составной - модуль и Node - можно их заменить именами классов?

Цитата:
Снова приношу свои извинения за безумную реализацию от МС.
Нет, у меня не нужен класс запускач. Достаточно menuItem, который подцепляется к главному меню или к формам.
У тебя есть класс с методом main, который все это знает. Я думал ты его имеешь ввиду. Я не создавал новых классов кроме атрибута. Есть класс-создаватель (фабрика) он готовый и я его не менял.

Цитата:
Нет )))
На реальных проектах простейший случай без стратегии - скорее исключение.
На реальных проектах именно "стратегия" и зашита-размазана в конструкторах. Каждый конструктор отвечает за свою часть.
Тогда выбери любой другой пример. В принципе, ты прав, можно обойтись только классами, только надо добавить какой-то унифицированный способ связывать классы с существубщей инфраструктурой и тогда цепочка класов будет создавать нужный.

Цитата:
В фреймворке один стратегия должна знать обо всех классах иерархии.
Не понял.

Цитата:
ты снова прав для случая без параметров.
но как часто используется именно этот сценарий?
Я уже отвечал. Если нужны параметры конструктора, то используется следующий прием:

1. Во базовый класс добавляется метод init с нжными параметрами
2. Сразу после создания он вызывается.

Цитата:
выбери любой из них, который реализует несколько уровней иерархии.
Тебе нужна иерархия классов или иерархия ключей?
Если первое, то атрибуты никак не должны эту иерархию отражать, если второе, то то есть отдельная обертка для иерархических атрибутов, которая, правдя использована неколько раз там где надо делать классы ключами.

Цитата:
Покажи как это просто.

Ты говоришь "просто добавить атрибуты".
Ты говоришь "просто смотреть"
Сделай проектик. Покажи как это просто.
Ok чуть попозже. Только учти что у тебя добавление элемента к существующему механизму создания объектов. А у меня будет еще и немного кода на перевод на новый механизм (как если бы ты перевел все на if вместо case )

Цитата:
И в самом деле! Чего это я? Видать Котлинов всяких наелся...
Асинхронность это другой ортогональный аспект - нафига она тебе в создании экземпляра класса.

Цитата:
Я смотрю актуальную аксапту. 7.2.1785.0
Да-да. Я вижу это "что угодно". Строка с ; Это пипец и детский сад какой-то.
Это я не понял.

Цитата:
Кем и как? Бгггг!!
Так же как и сейчас - кто и как распределяет префиксы в именах классов, чтобы партнерские классы не конфликтовали с микрософтовскими при обновлении.

Цитата:
вспомнить, исходный вопрос ветки был: "Какая цель создания экземпляров классов через расширенные атрибуты? Чем не устраивает старый дедовский способ construct?"
- дает возможность разбить систему на независимые модули
- путем сведения общего пттерна "case" к частному "содание по ключу" позволяет автоматически сливать изменения в коде.

Цитата:
Ребяты, прошу вас, не надо примеров "я создал пример из трех классов, я добавил атрибуты". такие примеры ничего не показывают.
Зачем ты его просишь тогда?

Цитата:
Давайте рассматривать нормальный промышленный случай:
= которые добавляют/изменяют функционал этого семейства (одновременно или последовательно). в пределе это программисты разных партнеров, которые делают разные типовые решения. а некий программист заказчика ставит эти пересекающиеся типовые решения [из разных моделей]. (в целях упрощения, для данной ветки можно предположить, что модель одна, чтобы рассмотреть только механизм инстанцирования класса)
= как облегчить работу этих людей?
(Заметь что ты используешь разметку типа маркдауна внутри сообщения, но свою )

Как раз паттерн позволяет вынести реализации каких-то веще в модели. Например в настройках можно добавить baseenum с форматомданных, а вам класс который реализует вывод в него вынести в расширение в другой модели.

Цитата:
Как должны выглядеть эти ключи, чтобы разные люди могли добавлять классы-потомки и не мешать друг-другу?
Я видел два способа. 1) GUID 2) Сесть на какой-то уже готовый способ распределения имен, например в java привязываются к домену комании (com.microsoft.dynsmics.forOperations) который распределяется в интернете.

Я предпочитаю привязываться к именам классов и таблиц.

Цитата:
Как должны выглядеть эти ключи, чтобы в принципе была возможность рефакторинга? (да, я знаю что МС не рефакторит, но у партнеров и у заказчика то могут работать нормальные люди)
MS рефакторит. Несмотря на то, что при создании класса используется reflection это никак не мешает рефакторить, так как сами классы вполне себе поддерживают статические интерфейсы.

Цитата:
Зачем вообще нужны специальные ключи вместо имен классов?
Чтобы создавать классы на основе бейзэнамов, например. В принципе, можно было бы обойтись одними классами, но MorphX не поддерживает автоматизацию создания UI для классов. Именно поэтому твой case не по классам а по base enum и строчке - в menuItem нельзя записать три параметра все из которых были бы классами.

Еще можно использовать сами классы в качестве ключей - посмотри SysClassNameAttribute
За это сообщение автора поблагодарили: macklakov (10).
Старый 01.06.2017, 21:45   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Проанализируй ключ в твоем примере - он составной - модуль и Node - можно их заменить именами классов?
можно.
только в этом случае связь с инфраструктурой аксапты тоже вручную писать нужно будет.
поэтому я использовал menuItem.

Цитата:
Сообщение от belugin Посмотреть сообщение
У тебя есть класс с методом main, который все это знает. Я думал ты его имеешь ввиду. Я не создавал новых классов кроме атрибута. Есть класс-создаватель (фабрика) он готовый и я его не менял.
в проекте на конструкторах не было main, который ВСЕ ЗНАЕТ. было main, которые знали о себе (как обычно)
в проекте на конструкторах не было contruct, который ВСЕ ЗНАЕТ. было два конструктора. каждый знает только о своем уровне и принимает решение своего уровня.

в новом проекте на атрибутах действительно есть main, который должен знать обо всей иерархии. в проектике этого нет, потому что нет валидации входных данных. но в реальной жизни такая валидация обязательна.

Цитата:
Сообщение от belugin Посмотреть сообщение
Тогда выбери любой другой пример.
не, давай пока останемся на том же самом - расширить функционал автосопоставления.
по идее, в этом примере не хватает параметров. ну и фиг с ними.

Цитата:
Сообщение от belugin Посмотреть сообщение
Я уже отвечал. Если нужны параметры конструктора, то используется следующий прием:
Макс, ты снова рассказываешь "как это работает".
Я верю. Теперь я даже это видел своими глазами. "Прием" есть конечно.

Давай лучше поговорим о трудоемкости и об ответстенности за правильность результата.
Как бы ты оценил трудоемкость и удобность по сравнению со старым методом?
Мое мнение: Через жопу по сравнению со старым конструкторским методом.

Цитата:
Сообщение от belugin Посмотреть сообщение
Тебе нужна иерархия классов или иерархия ключей?
...атрибуты никак не должны эту иерархию отражать
Вооот!!!
И мы подошли к трудоемкости и удобствам.

Раньше программист должен был знать только иерархию классов.
Теперь иерархия классов может (и должна) не совпадать с иерархией атрибутов.
Теперь программисту надо знать три вещи - иерархию классов, иерархию атрибутов и маппинг между ними. Во всех трех вещах могут быть ошибки. А поскольку в новом методе никакого контроля на этапе компиляции, то в новом методе ошибки будут неизбежно. Следовательно, потребуется большее время на изучение, написание, отладку и тестирования.


Цитата:
Сообщение от belugin Посмотреть сообщение
Если первое, ... если второе, то ... правдя использована неколько раз там где надо делать классы ключами.
Именно!
Я посмотрел в существующий функционал насколько хватило терпения.
Пипец!!!

Цитата:
Сообщение от belugin Посмотреть сообщение
Ok чуть попозже. Только учти что у тебя добавление элемента к существующему механизму создания объектов. А у меня будет еще и немного кода на перевод на новый механизм (как если бы ты перевел все на if вместо case )
Если обратишь внимание, то во втором проекте у меня классы переведены на новый механизм. Во втором проекте нет конструкторов вообще.

Про добавление - я помню документацию и помню твои слова, где было только "добавление классов".
А вообще говоря, фреймворк должен успешно решать еще и задачи рефакторинга, изменения существующего функционала.
Я писал об этом выше.

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

Цитата:
Сообщение от belugin Посмотреть сообщение
Асинхронность это другой ортогональный аспект - нафига она тебе в создании экземпляра класса.
Да, ортогональный
Да, никакой асинхронности.
Да, я совершенно зря загорелся надеждой...

Цитата:
Сообщение от belugin Посмотреть сообщение
Так же как и сейчас - кто и как распределяет префиксы в именах классов, чтобы партнерские классы не конфликтовали с микрософтовскими при обновлении.
"Также как и сейчас" - это ты очень хорошо сказал.
Если "также как и сейчас", то нафига огород городить?
А да, вспомнил, МС закрывает код базовых классов...

Цитата:
Сообщение от belugin Посмотреть сообщение
- дает возможность разбить систему на независимые модули
- путем сведения общего пттерна "case" к частному "содание по ключу" позволяет автоматически сливать изменения в коде.
да-да. это понятно.
но я уже говорил, что это не единственный способ. и далеко не оптимальный.

Цитата:
Сообщение от belugin Посмотреть сообщение
Зачем ты его просишь тогда?
и в самом деле!

Цитата:
Сообщение от belugin Посмотреть сообщение
(Заметь что ты используешь разметку типа маркдауна внутри сообщения, но свою )
Заметь, что в эту разметку никто не будет встраивать свои сообщения. На форуме при цитировании делается копия, старый текст и добавляется текст. И здесь нет компиляции )))

Цитата:
Сообщение от belugin Посмотреть сообщение
Как раз паттерн позволяет вынести реализации каких-то веще в модели. Например в настройках можно добавить baseenum с форматомданных, а вам класс который реализует вывод в него вынести в расширение в другой модели.
Макс... Я понимаю что ты хочешь сказать. Но просто сделай проектик (чуть более сложный чем одноувроенвое семейство из трех классов) И покажи в нем что хочешь сказать.

Цитата:
Сообщение от belugin Посмотреть сообщение
MS рефакторит. Несмотря на то, что при создании класса используется reflection это никак не мешает рефакторить
...майкрософту. пока билд не выпущен ))))
остальные не могут.
а тут еще и доступ к изменению исходного кода закроют.

Цитата:
Сообщение от belugin Посмотреть сообщение
Чтобы создавать классы на основе бейзэнамов, например.
я понимаю, что ты хочешь сказать. но так делают только внутри МС.

Цитата:
Сообщение от belugin Посмотреть сообщение
Именно поэтому твой case не по классам а по base enum и строчке - в menuItem нельзя записать три параметра все из которых были бы классами.
Вот ведь блин, выбрал я пример...
еще раз извиняюсь за дебильную реализацию семейства классов от МС - наши люди в булошную на такси не ездют нормальные люди так не делают.
но фреймворк должен работать и с такими примерами тоже.

Цитата:
Сообщение от belugin Посмотреть сообщение
Еще можно использовать сами классы в качестве ключей - посмотри SysClassNameAttribute
Да-да. У меня это был второй или третий вариант. В этом случае связь с классами автоматом, но зато связь с menuItem нужно делать руками.

Я старался сделать минимальный код при помощи штатных средств.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 01.06.2017 в 21:52.
Старый 01.06.2017, 22:21   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
можно.
только в этом случае связь с инфраструктурой аксапты тоже вручную писать нужно будет.
поэтому я использовал menuItem.
Заметь, что в исходном проекте использующем case делается специальное текстовое значение, которое повторяется в нескольких местах.

Цитата:
в проекте на конструкторах не было main, который ВСЕ ЗНАЕТ. было main, которые знали о себе (как обычно)
в проекте на конструкторах не было contruct, который ВСЕ ЗНАЕТ. было два конструктора. каждый знает только о своем уровне и принимает решение своего уровня.
Это ограничение, да, для каких-то сложных свопобов создания это не очень подходит. Но приведенный пример к ним не относится: родительский construct знает о существовании ключей, которые передает дальше.

Цитата:
в новом проекте на атрибутах действительно есть main, который должен знать обо всей иерархии. в проектике этого нет, потому что нет валидации входных данных. но в реальной жизни такая валидация обязательна.
В чем проблема с валидацией? Если ее надо делать до определения потомка, то вставить в вызывающий класс, если после, то в базовый.

Цитата:
Давай лучше поговорим о трудоемкости и об ответстенности за правильность результата.
Как бы ты оценил трудоемкость и удобность по сравнению со старым методом?
Мое мнение: Через жопу по сравнению со старым конструкторским методом.
Трудоемкость какого сценария? Добавление нового элемента - чуть меньше. Создание самой точки расширения - чуть больше или такая же.
Апгрейда при условии отсутствия breaking changes меньше.
Поиска зависимостей - примерно такая же.

Цитата:
Раньше программист должен был знать только иерархию классов.
Теперь иерархия классов может (и должна) не совпадать с иерархией атрибутов.
Тут никакой иерархии атрибутов нет, атрибут ровно один.

Цитата:
Теперь программисту надо знать три вещи - иерархию классов, иерархию атрибутов и маппинг между ними.
Никакой иерархии атрибутов нет, меппинг не надо знать он как читается в коде как и раньше, только другим способом.

Цитата:
Во всех трех вещах могут быть ошибки. А поскольку в новом методе никакого контроля на этапе компиляции, то в новом методе ошибки будут неизбежно.
В новом - меньше.

Цитата:
Да, ортогональный
Да, никакой асинхронности.
Да, я совершенно зря загорелся надеждой...
При чем тут вообще асинхронность и создание экземпляров классов.

Цитата:
"Также как и сейчас" - это ты очень хорошо сказал.
Если "также как и сейчас", то нафига огород городить?
Чтобы в других аспектах было не так же как и сейчас. Не все сразу.

Цитата:
Макс... Я понимаю что ты хочешь сказать. Но просто сделай проектик (чуть более сложный чем одноувроенвое семейство из трех классов) И покажи в нем что хочешь сказать.
Сконвертировал пример c case на жкстеншены. Не тестировал - мне кажется ты разобрался в концепции.
Вложения
Тип файла: axpp max.axpp (13.5 Кб, 70 просмотров)
За это сообщение автора поблагодарили: mazzy (5).
Теги
sysextension framework, sysoperation framework, как правильно, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
dynamicsax-fico: Invoice search AX2012 vs. AX7 (Part 2) Blog bot DAX Blogs 0 01.04.2016 10:11
DAX2009 аналог friend классов. Как сделать? Raven Melancholic DAX: Программирование 9 07.11.2015 23:50
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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