02.07.2012, 13:43 | #1 |
Участник
|
Upgrade from Ax4 to Ax2012 : Financial Dimensions
Работая над апгрейдом с 4 на 2012 возникла такая проблема: в четверке есть скрипты типа
this.Dimension[2] = salesLine.Dimension[2] т.е. присвоение конкретной аналитики. А как то же самое осуществить в 2012? То что одна и та же по смыслу аналитика в 2012 не может получена каким-либо указанием индекса (как в примере) я понимаю |
|
02.07.2012, 13:54 | #2 |
Участник
|
Они же там "именованные" вроде как. Т.е. в виде ассоциативного списка хранятся. Наверное, должны быть какие-то классы для доступа к аналитике по её имени, я так думаю. Сам ещё не смотрел.
По опыту перехода с прошлых версий: лучший способ узнать как что-то работает в новой версии - это вспомнить/найти где в стандарте это используется системным кодом старой версии и посмотреть как этот код уже перенесён на новую версию. Например (на вскидку): копирование финансовой аналитики номенклатуры из основной таблицы в строку складского журнала... |
|
02.07.2012, 14:01 | #3 |
Участник
|
Вот с этим как раз и проблемы. т.е. нигде в стандарте такого кода(копирование именно аналитики 2) в принципе быть не может, ибо это завязка на конкретного клиента.
По поводу "копирование аналитики номенклатуры из основной таблицы в строку журнала" - там идет так называемый merge аналитик, вопрос больше в том, как вообще сейчас ссылаться на конкретную аналитику(т.е. 2 в указанном примере) |
|
02.07.2012, 14:13 | #4 |
Участник
|
Цитата:
Извините, но я наверное не понимаю сути проблемы ... |
|
02.07.2012, 14:38 | #5 |
Участник
|
давайте забудем про апгрейд и сформулируем задачу так: в Ax2012 при создании salesLine из purchLine копировать не все аналитики а только CostCentr
|
|
02.07.2012, 14:47 | #6 |
Участник
|
Извиняюсь, а типа такого тоже не прокатит?
X++: this.(fieldId2Ext(fieldnum(MyTable, Dimension),2)) = SalesLine.(fieldid2ext(fieldnum(SalesLine, Dimension),2));
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 02.07.2012 в 14:50. |
|
02.07.2012, 15:12 | #7 |
Участник
|
to Pustik: Нет теперь поля Dimension, забудьте
http://stackoverflow.com/questions/8...lue-in-ax-2012 http://learnax.blogspot.com/2011/08/...imensions.html Последний раз редактировалось S.Kuskov; 02.07.2012 в 15:16. |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
02.07.2012, 15:29 | #8 |
Участник
|
Ну вот вроде что-то наподобии того что нужно.
http://sumitsaxfactor.wordpress.com/...ion-2-ax-2012/ Остается вопрос - что вообще должно добавляться в параметры в качестве ссылки на значение CostCentr(и должно ли добавляться вообще). в примере выше используется ID таблицы ( типа - tableNum(DimAttributeHcmWorker)). |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
02.07.2012, 15:49 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Pustik (2). |
02.07.2012, 15:57 | #10 |
Участник
|
Уже как-то здесь раньше говорили, что Dimension сделают по аналогии InventDim, т.е. складской аналитики. Может быть оно с каких-то высот и правильно, может оно и имеет какие-то разумные объяснения. Но как взглянешь на код:
X++: DimensionStorage dimensionStorage; DimensionAttribute deparmentDimensionAttribute; DimensionAttributeValue newDepartmentValue; // Find the deparment dimension attribute deparmentDimensionAttribute = DimensionAttribute::findByName("Department"); // Find the new department value we want to put in the new combination. newDepartmentValue = DimensionAttributeValue::findByDimensionAttributeAndValue(deparmentDimensionAttribute, "abc"); // Load a DimensionStorage instance with the old combination and update the first segment with new value dimensionStorage = DimensionStorage::findById(ledgerTable.LedgerDimension); dimensionStorage.setSegment(1,DimensionStorageSegment::constructFromValue("abc", newDepartmentValue)); ledgerJournalTrans.LedgerDimension = dimensionStorage.save();
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.07.2012, 16:01 | #11 |
Участник
|
ну в этом документе до таких мелочей как универсальная замена конкретной аналитики не опускаются к сожалению, вот народ и мучается.
вообще код из http://stackoverflow.com реальная жесть Т.е. делается несколько предположений - что аналитика называется Department(в русской версии я так понимаю это будет Подразделение) и что она стоит в сегменте на первом месте - setSegment(1, - что вообще является настройкой X++: // Find the deparment dimension attribute deparmentDimensionAttribute = DimensionAttribute::findByName("Department"); // Find the new department value we want to put in the new combination. newDepartmentValue = DimensionAttributeValue::findByDimensionAttributeAndValue(deparmentDimensionAttribute, "abc"); // Load a DimensionStorage instance with the old combination and update the first segment with new value dimensionStorage = DimensionStorage::findById(ledgerTable.LedgerDimension); dimensionStorage.setSegment(1,DimensionStorageSegment::constructFromValue("abc", newDepartmentValue)); ledgerJournalTrans.LedgerDimension = dimensionStorage.save(); Последний раз редактировалось trud; 02.07.2012 в 16:03. |
|
02.07.2012, 16:19 | #12 |
Участник
|
люди из MS что писали 2012 будто задались целью камня на камне от 2009 не оставить - а на проектах заказчиков вообще похоже никогда не работали. Я не могу вспомнить ни одного проекта где бы не присаивалавась конкретная аналитика - то есть задача то наиактуальнейшая
|
|
02.07.2012, 16:40 | #13 |
Участник
|
Сдаётся мне что при нужной доле смекалки, систему фин.аналитик в AX2012 можно настроить под структуру AX2009. Т.е на всех счетах настроить одну и туже комбинацию, с одной и той же последовательностью. Написать дисплейных и едит - методов для доступа по старой схеме, и т.д и т.п. ... Вот только стоит ли хвататься за старое или лучше начать адаптироваться к новому. Уверен кроме недостатков, видных невооружённым взглядом, у новой схемы найдутся и достоинства. По крайней мере на это надеюсь
|
|
02.07.2012, 16:56 | #14 |
Участник
|
Поставьте еще Upgrade(или Update) модель, в ней есть классы - хелперы, которые помогают конвертнуть старый код для фин. аналитик. Если не ошибаюсь DimensionConversionHelper.
|
|
02.07.2012, 16:59 | #15 |
Участник
|
Кстати, код приведенный выше с
X++: DimensionAttribute::findByName([COLOR=red]"Department"[/COLOR]); |
|
02.07.2012, 17:02 | #16 |
Участник
|
сталкивался с подбным. добавлял в параметры привязку.
никто не мешает в глобальных параметрах ГК добавить закладку с аналитиками. сделать lookup по имени к DimensionAttribute к финансовым аналитикам (customlist, existinglist). И соответственно присвоить индекс. по сути сделать жесткий mapping в параметрах индекса к Name дименшена. dimMap.NameByIndex(1) будет выдавать имя дименшена.. а его уже использовать DimensionAttribute::findByName(dimMap.NameByIndex(1)).. или дописать обертку. Но это только для общих аналитик. то есть глобально везде.. может конфликтовать - например с комбинациями для отдельных счетов (mainAccount) если там задана другая иерархия, с допустимимой комбинацией аналитик .. да и еще могут применяьться правила.. Последний раз редактировалось Evgeniy2020; 02.07.2012 в 17:05. |
|
02.07.2012, 17:04 | #17 |
Участник
|
Цитата:
Сообщение от Evgeniy2020
сталкивался с подбным. добавлял в параметры привязку.
никто не мешает в глобальных параметрах ГК добавить закладку с аналитиками. сделать lookup по имени к DimensionAttribute к финансовым аналитикам (customlist, existinglist). И соответственно присвоить индекс. по сути сделать жесткий mapping в параметрах индекса к Name дименшена. . |
|
02.07.2012, 20:00 | #18 |
Administrator
|
Цитата:
Т.е. я всегда бы писал this.Dimension[SysDimension::CostCenter]. Да, стандартные значения енумов не переименуешь. Но новые-то уже точно можно создавать как захочется. Конечно, если приложение используется на нескольких проектах и на разных проектах у этой аналитики свое предназначение - то 2 - тут возможно оправдано. Возможно. В АХ 2012 попытались эту проблему решить "программистким" путем, т.е. сделав универсальный механизм. Забыв, что структура аналитик для каждой компании по большому счету есть нечто незыблемое, на что можно и нужно заложиться. Ибо отчеты могут строиться только исходя из конкретной структуры аналитик (я говорю сейчас про отчеты, понятные пользователю, а не конструкторы отчетов). В результате - получаем - что там, где надо достать конкретно Подразделение - приходится хардкодить "Department" или выносить это в настройки, но это по сути - тот же хардкод, только глаза не режет, ибо никто никогда не проверяет работоспособность системы, если в настройке, где ожидается увидеть "Department" стоит "Cost Center" к примеру. Главный плюс старого механизма - его простота и понятность. Как с т.з. программирования, так с т.з. заполнения и с т.з. выборок (отчетов). Однако, при этом - я не уверен, что найдется хотя бы одно приложение, на котором бы использовались фин. аналитики, но при этом не была бы предпринята попытка какую-то из аналитик интегрировать с каким-нибудь справочником. Но раз уж нам пришлось столкнуться с универсальностью - давайте уж из нее выжмем все положительные моменты. Например, то, что любой код аналитики можно связать со справочником. Например, поставщиков. И это в уже имеющейся системе. А если нужна связь с таким справочником, которого нет в системе - то достаточно несложное создание вьюшки с правильным названием, ссылающейся на наш справочник добавит и другой справочник в список возможных. Правда тут тоже есть оговорка в плане сложности выборки. Не всегда удобный ввод способствует удобному выводу А еще можно вспомнить любимую программу бухгалтера. Всем прижился термин субконто. Со всеми его плюсами и минусами. А тут мож сказать любимый вендор сделал большой шаг вперед по объединению идеологий Это все шутки конечно. Однако, я думаю со временем - устоится вариант с финаналитиками, как со складскими аналитиками, которые тоже сначала были все равны, а потом уже появились "индивидуальные галочки" типа "контроль серийных номеров" или целые документы типа "заказ на перемещение", в которых есть "особые" аналитики. Как говорится - не все сразу.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Pustik (3), S.Kuskov (1). |
02.07.2012, 21:07 | #19 |
Участник
|
Интересна главная идея этой универсальности. Если речь идет о том, что любую аналитику (я имею ввиду состав)можно будет привязать к конкретному справочнику, то это сильный аргумент. Получается, что справочник фин. аналитик не будет просто существовать своей жизнью, а может при желании быть привязан к определенным сущестующим справочникам, тем самым упрощая анализ? Я правильно понимаю?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.07.2012, 21:44 | #20 |
Administrator
|
Цитата:
Сообщение от Pustik
Интересна главная идея этой универсальности. Если речь идет о том, что любую аналитику (я имею ввиду состав)можно будет привязать к конкретному справочнику, то это сильный аргумент. Получается, что справочник фин. аналитик не будет просто существовать своей жизнью, а может при желании быть привязан к определенным сущестующим справочникам?
В АХ 2012, чтобы создать новую аналитику (в терминах АХ 2009 - новый код аналитики) - нужно создать запись в таблице DimensionAttribute (\General ledger\Setup\Financial dimensions\Financial dimensions), выбрав из списка тот справочник, с которым будет связана новая аналитика Либо выбрать <Custom dimension>, если мы хотим иметь аналитику, как свой собственный справочник, не связанный с каким-либо другим. А список справочников на картинке выше состоит из вьюшек, имеющих префикс DimAttribute и ссылающихся на эти справочники. Соответственно, добавление в АОТ нужной и правильно названной вьюшки (плюс еще выполнение некоторых требований) может добавить в список свой справочник. А вот тут уже надо бы поизучать структуру (см. выше ссылку на файл) таблиц, чтобы понять, насколько легко будет в такой структуре сделать выборку в разрезе по финансовой аналитике.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: AvrDen (1). |
Теги |
ax2012, ledgerdimensions |
|
|