|
09.12.2019, 14:59 | #1 |
Участник
|
Добавил источник данных таблица
AssetLedgerAccounts(Asset Ledger Accounts):Таблица AssetLedgerAccounts у нее есть метод assetLedgerDimension():Int64 (String _assetId, String _assetBookId, AssetTransType _assetTransType, String _assetPostingProfile, AssetDocumentType_JP _assetDocumentType_JP, Int64 _assetDocumentEntryRecId) Каждый параметр определил отдельной внутренней переменной $CurAssetId(Current Asset Id):Вычисляемое поле = @.AssetId: Строка $CurBookId(Current BookId):Вычисляемое поле = @.BookId: Строка $CurPostingProfileId(Current PostingProfileId):Вычисляемое поле = model.'$BooksRecords'.General.PostingProfile.Id: Строка $CurTransTypeAcquisition(TransType Acquisition):Вычисляемое поле = model.AssetTransTypeJournal.Acquisition: Перечислимый тип и хочу получить значение, вычисляемое методом $LDIm03(Ledger dimension ref 03):Вычисляемое поле = model.AssetLedgerAccounts.'assetLedgerDimension()'("$CurAssetId", "$CurBookId", "$CurTransTypeAcquisition", "$CurPostingProfileId"): Int64 Синтаксическая проверка проходит, формула сохраняется. Но при выполнении выдается ошибка Ошибка при вычислении выражения для пути "$LDIm03". Пробовал параметры задать просто константами $LDIm03(Ledger dimension ref 03):Вычисляемое поле = model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", "1", "Головний"): Int64 результат такой же. Можете что-то подсказать? |
|
09.12.2019, 15:25 | #2 |
Участник
|
Такое предположение, что проблема в 3-м параметре. Он описан как AssetTransType (это enum) и непонятно если константой передавать 1 (int), "1", "Acquisition" или с учетом установленного языка "Ввод в эксплуатацию"?
Просто 1 (без кавычек) - не проходит валидация при сохранении формулы; все остальные варианты - ошибка при выполнении. |
|
09.12.2019, 15:28 | #3 |
Banned
|
AssetTransType надо определить как Dynamics/Enum, а потом его можно везде использовать. См. мой синтаксис выше.
|
|
09.12.2019, 15:48 | #4 |
Участник
|
Цитата:
AssetTransType:Перечисление Dynamics 365 for Operations AssetTransType Определил параметр $CurTransTypeAcquisition(TransType Acquisition):Вычисляемое поле = model.AssetTransType.Acquisition: Перечислимый тип Описал вызов $LDIm03(Ledger dimension ref 03):Вычисляемое поле = model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", "@.'$CurTransTypeAcquisition'", "Головний"): Int64 результат тот же. |
|
09.12.2019, 15:51 | #5 |
Banned
|
Попробуйте еще добавить нули для ..., assetDocumentType_JP _assetDocumentType_JP, Int64 _assetDocumentEntryRecId)
|
|
09.12.2019, 16:21 | #6 |
Участник
|
Если в формуле задаю
model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", 1, "Головний") то при сохранении выдается ошибка Ошибка проверки: Неверный тип значения. Ожидаемый: AssetTransType, фактический: Integer. AssetTransType:Перечисление Dynamics 365 for Operations AssetTransType $CurTransTypeAcquisition(TransType Acquisition):Вычисляемое поле = model.AssetTransType.Acquisition: Перечислимый тип При любых других вариантах задания параметра model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", "model.AssetTransType.Acquisition", "Головний") или model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", "$CurTransTypeAcquisition", "Головний") ошибка при выполнении. По этому поводу по ссылке https://fix.lcs.dynamics.com/Home/In...ssion=Download сказано: • Only elements with parameters that accept arguments specified as one of the supported primitive data type (integer, real, string, etc.) can be used as data source elements • Such arguments must be defined at design-time in ER expression as constants of the required data type Возможно enum это уже не primitive data type (хотя фактически это int) и никакими ухищрениями не удастся передать значение enum-а в качестве параметра. Думаю, что только belugin может квалифицировано что-то посоветовать. |
|
09.12.2019, 19:39 | #7 |
Banned
|
Почему бы не попробовать мой способ с FILTER, который гарантированно работает у другого клиента?
|
|
09.12.2019, 19:54 | #8 |
Участник
|
Цитата:
там достаточно сложная логика выбора записи. Эта таблица - настройка профиля разноски, который может задаваться для для конкретного ОС, для группы ОС или для "Всех". Поэтому в методе выполняется поиск записи по трем условиям: книга + профиль разноски + тип операции - сначала для конкретного AssetID; если не найдена - то для тех же условий - но для AssetGroupId; если и такой не найдено - то только по тем же трем условиям, но без учета ОС (т.е. для всех). Вряд ли получится описать всю эту логику просто в одном FILTER. Надо писать 3 выражения FILTER, а потом анализ (с учетом приоритетности) какой первым вернул непустое значение. |
|
09.12.2019, 16:28 | #9 |
Участник
|
Не поможет. В АХ объявление метода выглядит:
public server static LedgerDimensionDefaultAccount assetLedgerDimension( AssetId _assetId, AssetBookId _assetBookId, AssetTransType _assetTransType, AssetPostingProfile _assetPostingProfile = "" // <GJP> ,AssetDocumentType_JP _assetDocumentType_JP = AssetDocumentType_JP::None ,AssetDocumentRecId_JP _assetDocumentEntryRecId = 0 // </GJP> ) Т.е. обязательными являются первые три параметра. Если при написании формулы в ER я задаю меньше трех параметров - при сохранении не проходит валидация и выдается сообщение что не задан обязательный параметр. Практически уверен, что проблема именно в 3-м параметре, который обязательный и при этом типа enum. |
|
09.12.2019, 18:05 | #10 |
Участник
|
Цитата:
1. Добавить operations enum datasource в корень под именем myEnum 2. Употребить его так: myEnum.MyEnumValue1 |
|
09.12.2019, 19:41 | #11 |
Участник
|
Получилось таким образом:
добавил enum AssetTransType:Перечисление Dynamics 365 for Operations AssetTransType добавил таблицу с методом AssetLedgerAccounts(Asset Ledger Accounts):Таблица AssetLedgerAccounts assetLedgerDimension():Int64 (String _assetId, String _assetBookId, AssetTransType _assetTransType, String _assetPostingProfile, AssetDocumentType_JP _assetDocumentType_JP, Int64 _assetDocumentEntryRecId) добавил переменную с формулой $LDIm03(Ledger dimension ref 03):Вычисляемое поле = model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", model.AssetTransType.Acquisition, "Головний"): Int64 Формула сохранилась и формат выполнился. Метод вернул (как и должен) значение визуально похожее на RecId - теперь осталось проверить правильное ли и попробовать остальные параметры вызова задать не константами, а ссылками на элементы модели. |
|
|
За это сообщение автора поблагодарили: EVGL (5). |
09.12.2019, 23:53 | #12 |
Banned
|
Какая там функциональная логика - это известно
Только по факту настройка для конкретного ОС на проектах очень редко используется. На это есть масса причин, характера разделения прав доступа и ответственности между отделами IT, бухгалтерии, сторонних консультантов, логики внедрения и обучения бухгалтеров, а главным образом нормативов в конкретной стране. Если принять это предположение, то запрос сводится к одному FIRST(ORDER(FILTER(AND(OR(... |
|
10.12.2019, 15:00 | #13 |
Участник
|
Цитата:
Сообщение от EVGL
Какая там функциональная логика - это известно
Только по факту настройка для конкретного ОС на проектах очень редко используется. На это есть масса причин, характера разделения прав доступа и ответственности между отделами IT, бухгалтерии, сторонних консультантов, логики внедрения и обучения бухгалтеров, а главным образом нормативов в конкретной стране. Если принять это предположение, то запрос сводится к одному FIRST(ORDER(FILTER(AND(OR(... |
|
10.12.2019, 13:04 | #14 |
Участник
|
А почему нельзя перегрузить ту же самую версию модели?
Цитата:
Can not overwrite a version
|
|
10.12.2019, 13:46 | #15 |
Участник
|
|
|
11.12.2019, 22:22 | #16 |
Участник
|
номер версий одинаковый, но содержимое каким-то образом получилось разное.
|
|
11.12.2019, 22:42 | #17 |
Участник
|
|
|
10.12.2019, 14:51 | #18 |
Участник
|
Подскажите, плз, как в ER работать со структурой LedgerDimension.
Из поля LedgerDimension таблицы AssetLedgerAccounts вытащил методом значение – это RecId структуры. В АХ2012 это был RecId записи в таблице DimensiomAttributeValueCombination (AssetLedgerAccounts > Relation: AssetLedgerAccounts. LedgerDimension == DimensiomAttributeValueCombination.RecID) и можно было из этой записи получить значение счета ГК и финаналитик - либо методами либо просто распарсить поле DisplayValue. В АХ10 похоже механизм работы с LedgerDimension существенно переделали и таблицы DimensiomAttributeValueCombination уже нет; куда ведет эта ссылка из AssetLedgerAccounts посмотреть не могу, т.к. AOT мне недоступен. Но если я правильно понимаю, то в можно этого и не знать, если использовать ER объект Сведения о финаналитиках. Но как реально это сделать – не понимаю. Если добавляю этот объект – получаю список записей; методов у него нет. Получается, что надо написать какую-то формулу используя функции ER, чтобы выбрать набор значений (по имеющемуся RecId?), затем выбрать из списка конкретную запись для счета ГК или финаналитики (по имени?) и тогда из поля Definition.Name можно будет получить значение? Или все вообще не так? Подскажите хотя бы в общих чертах что пробовать делать? |
|
10.12.2019, 15:08 | #19 |
Banned
|
Цитата:
'$EGCAssetAcquLedgerAccount'.'>Relations'.LedgerDimension.MainAccountValue $EGCAssetAcquLedgerAccount - это была переменная типа record DimensiomAttributeValueCombination, конечно (найденная указанным выше методом). Одним RecId сыт не будешь. |
|
10.12.2019, 15:34 | #20 |
Участник
|
Цитата:
Сообщение от EVGL
По крайней мере при использовании в модели проблем не было никаких:
'$EGCAssetAcquLedgerAccount'.'>Relations'.LedgerDimension.MainAccountValue $EGCAssetAcquLedgerAccount - это была переменная типа record DimensiomAttributeValueCombination, конечно (найденная указанным выше методом). Одним RecId сыт не будешь. Если $EGCAssetLedgerAccountsR - это список записей, уже отфильтрованный по AssetId, BookId и AssetTransType, из которого нужно выбрать одну. Если бы у меня был именно AssetLedgerAccounts.RecId, то написал бы FILTER($EGCAssetLedgerAccountsR, $EGCAssetLedgerAccountsR.RecId = $EGCAssetLedgerAccountsT.RecId) А так не хватает соображения связать это до кучи. |
|
Теги |
generic electronic reporting, ger |
|
|