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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2019, 20:18   #181  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от belugin Посмотреть сообщение
AssetTable.'<Relations'.'AssetBook.AssetTable_AssetId'.

Означает: из записи AssetTable взять поле <Relations потом оттуда взять поле AssetBook.AssetTable_AssetId:
Большое спасибо за такой подробный ответ. Кое-что вроде становится понятней, но буду еще по вашему тексту пробовать на живых примерах.

Но по выделенной фразе есть вопросы:
у таблицы AssetTable нет Relations на AssetBook; и, как мне кажется об этом "говорит" знак "<". Если в выражении используется Relations таблицы AssetTable то будет знак ">".

Я пока не разбираюсь в синтаксисе выражения, но понимаю физический смысл, т.к. смотрел эти таблицы в AOT-е.
У таблицы AssetBook есть поле AssetId и есть Relations с именем AssetTable_AssetId и выражением
AssetBook.AssertId == AssetTable.AssertId
а приведенное выше выражение возвращает все записи таблицы AssetBook, которые по Relations AssetBook.AssetTable_AssertId ссылаются на текущую запись AssetTable.

Как раз с синтаксисом направления ссылок мне пока непонятно. Т.е. физический смысл понимаю, а как написать корректное выражение - пока нет.
Старый 05.12.2019, 22:16   #182  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Libovs Посмотреть сообщение
Как раз с синтаксисом направления ссылок мне пока непонятно. Т.е. физический смысл понимаю, а как написать корректное выражение - пока нет.
Если есть таблицы t1 и t2 и relation r1 определенный на t1 то

Ds1.>relations.r1 даст записи t2 которые соответствуют текущей записи из источника данных ds1 при условии что это table records по таблице t1

Ds2.<relations. 'T1.r1' это то же самое но с другого конца - записи t1 которые соответствуют текущей записи t2 от условии что ds2 это table records по таблице t2.

Если вы идете от какой-то таблицы то >relations это отношения определенные на ней, а <relation это отношения определенные на других таблицах на нее

Одинарные кавычки это идентификатор (имя поля, например) а двойные кавычки - это строковый литерал.

Например, если определить user input parameter с именем "hello, world" то 'hello, world' вернёт эго значение (то что пользователь ввел) а "hello, world"
саму строчку "hello, world"
Старый 06.12.2019, 13:30   #183  
mnt_dx is offline
mnt_dx
Участник
Axapta Retail User
Лучший по профессии 2014
 
1,747 / 188 (10) ++++++
Регистрация: 17.02.2011
Адрес: К Северу через Северо-Запад
Подскажите, пожалуйста

Хотел, чтобы в импорте выписки в формате 1С поле плательщика бралось из второго возможного тэга, если первый пуст.

В Model mapping designer в дизайнере вот такая формула для счета плательщика:
Цитата:
@.SectionTypes.Documents.Data.Document.'$PayerAccountNum'.DocumentAttrTypes.PayerAccountNumSeq.Data.PayerAccountNum
хотел попробовать Если Х пусто, то "123" вот так

Цитата:
If(@.SectionTypes.Documents.Data.Document.'$PayerAccountNum'.DocumentAttrTypes.PayerAccountNumSeq.Data.PayerAccountNum="","123",@.SectionTypes.Documents.Data.Document.'$PayerAccountNum'.DocumentAttrTypes.PayerAccountNumSeq.Data.PayerAccountNum)
при нажатии ТЕСТ ругается
Цитата:
Incorrect reference 'format/IncomingFile/File/$Documents/SectionTypes/Documents/Data/Document/$PayerAccountNum/DocumentAttrTypes/PayerAccountNumSeq/Data/PayerAccountNum'
No overload for function = matches the input parameters
Function arguments are of incorrect types in 'If'
Я, наверное, все не так делаю?
Старый 06.12.2019, 13:53   #184  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я не знаю, что тут неправильно. Ошибка означает, что он не может найти операцию сравнения для данных аргументов. Для строк операция сравнения есть. Значит что-то не то с типами данных. Либо какая-то ошибка в пути, что он не определил тип либо еще что-то.
Старый 06.12.2019, 14:09   #185  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от belugin Посмотреть сообщение
ER оперирует виртуальными записями.
Правильно ли я понимаю, что при добавлении источника данных типа Записи таблицы для него создается виртуальная запись ER, в которой столько (виртуальных) полей, сколько:
полей в исходной таблице +
relations в исходной таблице +
методов в исходной таблице +
"дочерних" таблиц, у которых есть relations на исходную таблицу?

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

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

Как-то так, если не вдаваться в детали реализации?
Старый 06.12.2019, 15:05   #186  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Libovs Посмотреть сообщение
Как-то так, если не вдаваться в детали реализации?
Да. Еще все источники данных в целом представляют собой одну большую лениво вычисляемую виртуальную запись.
Старый 06.12.2019, 16:39   #187  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от belugin Посмотреть сообщение
Да. Еще все источники данных в целом представляют собой одну большую лениво вычисляемую виртуальную запись.
Ну если не пытаться этим инструментом реализовывать сложные аналитические отчеты, а только печатные и/или xml-файлы документов и простенькие отчеты типа плоских таблиц, максимум с промежуточными итогами, то "ленивость" не должна стать существенной проблемой.
Я по-крайней мере, вижу применение именно для реализации локализованных форм при переходе с АХ2012, где они реализованы на SSRS, на DFO 365. А их таки немало.
Старый 06.12.2019, 17:03   #188  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Очень не хватает в конструкторе форматов кнопки Свернуть/Развернуть на правой части формы (модели). На левой (шаблона) она есть.
Т.к. Поиск выполняется только по развернутым узлам, то раскрывать все дерево модели ручками как-то не по феншую.
Может есть какой hotkey или недокументированная возможность?
Старый 06.12.2019, 17:24   #189  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Libovs Посмотреть сообщение
Может есть какой hotkey или недокументированная возможность?
Нету - там может быть источник данных с очень глубокой или бесконечно глубокой структурой.
Старый 09.12.2019, 11:43   #190  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Подскажите, как написать выражение с вызовом метода таблицы с параметрами?
Добавил источник данных таблица
AssetLedgerAccounts(Asset Ledger Accounts):Таблица AssetLedgerAccounts
у нее есть метод
assetLedgerDimension():Int64 (String _assetId, String _assetBookId, AssetTransType _assetTransType, String _assetPostingProfile, AssetDocumentType_JP _assetDocumentType_JP, Int64 _assetDocumentEntryRecId)
Ячейку отчета связал с этим методом
Ячейка<Col05_LedgerAccount> = model.AssetLedgerAccounts.'assetLedgerDimension()'
В качестве параметров надо передать элементы
model.'$BooksRecords'.'$LedgerJournalRecords'.AssetId
model.'$BooksRecords'.'$LedgerJournalRecords'.BookId
model.AssetTransTypeJournal.Acquisition
model.'$BooksRecords'.General.PostingProfile.Id

Попытка вставить между скобками пару кавычек и в них пути к параметрам успехом не увенчалась
Ячейка<Col05_LedgerAccount> = model.AssetLedgerAccounts.'assetLedgerDimension('model.'$BooksRecords'.'$LedgerJournalRecords'.AssetId, model.'$BooksRecords'.'$LedgerJournalRecords'.BookId, model.AssetTransTypeJournal.Acquisition, model.'$BooksRecords'.General.PostingProfile.Id')'

Как это правильно сделать?
Старый 09.12.2019, 11:54   #191  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Это невозможно. Методы с параметрами приходится эмулировать прямым SQL в выражениях FILTER или WHERE:

FILTER(EGCAssetLedgerAccounts, AND(EGCAssetLedgerAccounts.BookId=AssetRollForwardTmp.AssetBookId,OR(EGCAssetLedgerAccounts.AccountRelation=AssetRollForwardTmp.AssetGroup, EGCAssetLedgerAccounts.AccountRelation=""), EGCAssetLedgerAccounts.TransType=EGCAssetTransType.Acquisition, EGCAssetLedgerAccounts.PostingProfile=EGCAssetParameters.PostingProfile))

Последний раз редактировалось EVGL; 09.12.2019 в 12:01.
Старый 09.12.2019, 12:29   #192  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Тогда, по крайней мере мне, непонятна разница между типами Источника данных "Записи таблицы" и "Таблица". Я считал что второй как раз и дает возможность получить доступ к методам, в отличии от первого.
Старый 09.12.2019, 12:38   #193  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от EVGL Посмотреть сообщение
Это невозможно. Методы с параметрами приходится эмулировать прямым SQL в выражениях FILTER или WHERE:
Мне кажется вы ошибаетесь.В другой ветка форума я нашел

Цитата:
Сообщение от belugin Посмотреть сообщение
1) Корректный синтаксис для таблиц x.'method()'("Параметр")
Буду пробовать.
За это сообщение автора поблагодарили: EVGL (5).
Старый 09.12.2019, 13:00   #194  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Libovs Посмотреть сообщение
Мне кажется вы ошибаетесь.В другой ветка форума я нашел
Буду пробовать.
Очень интересно! Напишите. В документации об это синтаксисе нет ни слова
Может быть проблема с динамическими параметрами. Попробуйте сначала константы.
Старый 09.12.2019, 14:40   #195  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Libovs Посмотреть сообщение
Тогда, по крайней мере мне, непонятна разница между типами Источника данных "Записи таблицы" и "Таблица". Я считал что второй как раз и дает возможность получить доступ к методам, в отличии от первого.
Он дает возможность получить доступ к статическим методам таблицы
Старый 09.12.2019, 14:59   #196  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Добавил источник данных таблица
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   #197  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Такое предположение, что проблема в 3-м параметре. Он описан как AssetTransType (это enum) и непонятно если константой передавать 1 (int), "1", "Acquisition" или с учетом установленного языка "Ввод в эксплуатацию"?
Просто 1 (без кавычек) - не проходит валидация при сохранении формулы; все остальные варианты - ошибка при выполнении.
Старый 09.12.2019, 15:28   #198  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
AssetTransType надо определить как Dynamics/Enum, а потом его можно везде использовать. См. мой синтаксис выше.
Старый 09.12.2019, 15:28   #199  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от belugin Посмотреть сообщение
Он дает возможность получить доступ к статическим методам таблицы
Вот я и пытаюсь использовать
public server static LedgerDimensionDefaultAccount assetLedgerDimension( ... )
но никак не получается разобраться с форматом задания параметров в вызове.
Старый 09.12.2019, 15:48   #200  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Цитата:
Сообщение от EVGL Посмотреть сообщение
AssetTransType надо определить как Dynamics/Enum, а потом его можно везде использовать. См. мой синтаксис выше.
Определил enum
AssetTransType:Перечисление Dynamics 365 for Operations AssetTransType

Определил параметр
$CurTransTypeAcquisition(TransType Acquisition):Вычисляемое поле = model.AssetTransType.Acquisition: Перечислимый тип

Описал вызов
$LDIm03(Ledger dimension ref 03):Вычисляемое поле = model.AssetLedgerAccounts.'assetLedgerDimension()'("000006", "БО", "@.'$CurTransTypeAcquisition'", "Головний"): Int64
результат тот же.
Теги
generic electronic reporting, ger

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ievgensaxblog: MSDyn365FO. How to Import CSV file using Electronic Reporting. Part 2 – Format. Blog bot DAX Blogs 0 06.02.2019 07:12
ievgensaxblog: MSDyn365FO. How to Import CSV file using Electronic Reporting. Part 1 – Data Model. Blog bot DAX Blogs 0 06.02.2019 07:12
erconsult: Electronic Reporting (ER) Cookbook 2: new tips from the kitchen Blog bot DAX Blogs 0 06.08.2018 17:11
powerobjects: Electronic Reporting in Dynamics 365 for Finance and Operations Blog bot DAX Blogs 0 14.02.2018 03:28
erconsult: Electronic Reporting (ER) Cookbook Blog bot DAX Blogs 24 09.10.2017 08:47

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

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

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