09.12.2019, 15:51 | #201 |
Banned
|
Попробуйте еще добавить нули для ..., assetDocumentType_JP _assetDocumentType_JP, Int64 _assetDocumentEntryRecId)
|
|
09.12.2019, 16:21 | #202 |
Участник
|
Если в формуле задаю
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, 16:28 | #203 |
Участник
|
Не поможет. В АХ объявление метода выглядит:
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 | #204 |
Участник
|
Цитата:
1. Добавить operations enum datasource в корень под именем myEnum 2. Употребить его так: myEnum.MyEnumValue1 |
|
09.12.2019, 19:39 | #205 |
Banned
|
Почему бы не попробовать мой способ с FILTER, который гарантированно работает у другого клиента?
|
|
09.12.2019, 19:41 | #206 |
Участник
|
Получилось таким образом:
добавил 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, 19:54 | #207 |
Участник
|
Цитата:
там достаточно сложная логика выбора записи. Эта таблица - настройка профиля разноски, который может задаваться для для конкретного ОС, для группы ОС или для "Всех". Поэтому в методе выполняется поиск записи по трем условиям: книга + профиль разноски + тип операции - сначала для конкретного AssetID; если не найдена - то для тех же условий - но для AssetGroupId; если и такой не найдено - то только по тем же трем условиям, но без учета ОС (т.е. для всех). Вряд ли получится описать всю эту логику просто в одном FILTER. Надо писать 3 выражения FILTER, а потом анализ (с учетом приоритетности) какой первым вернул непустое значение. |
|
09.12.2019, 23:53 | #208 |
Banned
|
Какая там функциональная логика - это известно
Только по факту настройка для конкретного ОС на проектах очень редко используется. На это есть масса причин, характера разделения прав доступа и ответственности между отделами IT, бухгалтерии, сторонних консультантов, логики внедрения и обучения бухгалтеров, а главным образом нормативов в конкретной стране. Если принять это предположение, то запрос сводится к одному FIRST(ORDER(FILTER(AND(OR(... |
|
10.12.2019, 13:04 | #209 |
Участник
|
А почему нельзя перегрузить ту же самую версию модели?
Цитата:
Can not overwrite a version
|
|
10.12.2019, 13:46 | #210 |
Участник
|
|
|
10.12.2019, 14:51 | #211 |
Участник
|
Подскажите, плз, как в 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:00 | #212 |
Участник
|
Цитата:
Сообщение от EVGL
Какая там функциональная логика - это известно
Только по факту настройка для конкретного ОС на проектах очень редко используется. На это есть масса причин, характера разделения прав доступа и ответственности между отделами IT, бухгалтерии, сторонних консультантов, логики внедрения и обучения бухгалтеров, а главным образом нормативов в конкретной стране. Если принять это предположение, то запрос сводится к одному FIRST(ORDER(FILTER(AND(OR(... |
|
10.12.2019, 15:08 | #213 |
Banned
|
Цитата:
'$EGCAssetAcquLedgerAccount'.'>Relations'.LedgerDimension.MainAccountValue $EGCAssetAcquLedgerAccount - это была переменная типа record DimensiomAttributeValueCombination, конечно (найденная указанным выше методом). Одним RecId сыт не будешь. |
|
10.12.2019, 15:34 | #214 |
Участник
|
Цитата:
Сообщение от EVGL
По крайней мере при использовании в модели проблем не было никаких:
'$EGCAssetAcquLedgerAccount'.'>Relations'.LedgerDimension.MainAccountValue $EGCAssetAcquLedgerAccount - это была переменная типа record DimensiomAttributeValueCombination, конечно (найденная указанным выше методом). Одним RecId сыт не будешь. Если $EGCAssetLedgerAccountsR - это список записей, уже отфильтрованный по AssetId, BookId и AssetTransType, из которого нужно выбрать одну. Если бы у меня был именно AssetLedgerAccounts.RecId, то написал бы FILTER($EGCAssetLedgerAccountsR, $EGCAssetLedgerAccountsR.RecId = $EGCAssetLedgerAccountsT.RecId) А так не хватает соображения связать это до кучи. |
|
10.12.2019, 16:00 | #215 |
Banned
|
|
|
10.12.2019, 16:16 | #216 |
Участник
|
Именно так. Только не могу сообразить как ее определить.
Или у меня есть такой список записей и я не могу в общем случае выбрать одну из них или у меня есть метод, который однозначно определяет нужную запись, но возвращает не саму запись и не RecId выбранной записи, а значение поля LedgerDimension. И как определить переменную типа (единичная) запись - не соображу. |
|
10.12.2019, 17:00 | #217 |
Участник
|
В общем - получилось. Методом из объекта типа Таблица получил значение
$LDRecId = AssetLedgerAccounts.LedgerDimension а затем на список записей наложил фильтр FILTER($EGCAssetLedgerAccountsR, $EGCAssetLedgerAccountsR.LedgerDimension = $LDRecId) С большой вероятностью выбрана какая-то другая запись, но с таким же значением LedgerDimension, т.е. таким же MainAccountValue. Формально - это абсолютно неправильно, т.к. позиционируемся не на ту запись, которую нашли методом. Но цель гарантировано достигается - даже если запись другая, то счет ГК в отчет выведется правильный. Уфф. |
|
11.12.2019, 22:22 | #218 |
Участник
|
номер версий одинаковый, но содержимое каким-то образом получилось разное.
|
|
11.12.2019, 22:42 | #219 |
Участник
|
|
|
12.12.2019, 13:58 | #220 |
Участник
|
Подскажите, плз, что за функция НЕИЗВЕСТНО в формуле
$BalanceAllYears:Вычисляемое поле = НЕИЗВЕСТНО(AssetTable.AssetId, @.BookId, AssetYear.All, ReportingDate): Запись |
|
Теги |
generic electronic reporting, ger |
|
|