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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2022, 13:02   #1  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Electronic Reporting (ER), model mapping, структура заголовок/строки, импорт файла
Добрый день,

Ситуация:
Попытка через ER (Bank statement model, bank statement mapping to destination, camt.053 format) импотировать стандартный банковский файл в новые таблицы (header/lines).
Различие со стандартными таблицами банковских выписок в том что в новой таблице (header) указан не период (даты с - по) а одна дата.
И загвоздка в том что надо statement (header) узлы из XML надо разбивать по уникальным датам транзакций (lines).

вопросы следующие:
1. Как (можно ли) сделать следующее - добыть уникальные даты из линий в каждом statement, и потом запустить каждый statement в цикле из дат и создать столько headerov сколько уникальных дат и соотвественно линий под header только с этими датами.

Например:
-Header (01.12.2022 - 10.12.2022)
--Line1: 02.12.2022
--Line2: 02.12.2022
--Line3: 03.12.2022
--Line4: 09.12.2022
--Line5: 09.12.2022

При импорте в стандартные таблицы так и будет 1 header/5 lines.

Желаемый результат:
-Header1: 02.12.2022
--Line1: 02.12.2022
--Line2: 02.12.2022

-Header2: 03.12.2022
--Line3: 03.12.202

-Header3: 09.12.2022
--Line4: 09.12.2022
--Line5: 09.12.2022

2. Вопрос. Можно ли в ER при импорте, как Destinations указать две таблицыю Где в первую импортируются данные из модели а во вторую фильтрованные данные из первой.

Например:
model.RecordList > Table1 binding
$Filter(Table1,....): RecordList > Table 2 binding
тоесть при одном иморте создать записи в одной таблице и сразу же на основе их записи в другой, как указать последовательность действий (если возможно)?
Старый 19.12.2022, 13:08   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
1. Это называется group by: https://learn.microsoft.com/en-us/dy...y-data-sources
При этом
Header := $YourName_GroupByLinesByDate
Header.Date := $YourName_GroupByLinesByDate.grouped.YourDate
Line := $YourName_GroupByLinesByDate.lines

2. нет. Destinations не могут зависеть друг от друга, но только от источника (источников данных). А вот последние могут зависеть друг от друга.
Старый 19.12.2022, 13:11   #3  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Спасибо за быстрый ответ, буду пробовать
Старый 19.12.2022, 13:42   #4  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Цитата:
Сообщение от EVGL Посмотреть сообщение
2. нет. Destinations не могут зависеть друг от друга, но только от источника (источников данных). А вот последние могут зависеть друг от друга.
По поводу второго вопроса.

Я создаю два Destination: Table1 и Table 2
и
Два Datasource: 1. оригинальная модель/list. model.RecorList; и
2. Table1 records и из него делаю Calculated field с фильтром по Table1 records чтобы найти только записи созданные для первого Destination.

Тоесть первый биндинг:
model.Recordlist > Table1:RecordList, при импорте записи создаются в Table1

Table records и calculated field:
Table1: Table 'Table1' records - datasource
$FilteredTable1records = Filter(Table1 datasource, ....) находятся записи созданные в первом биндинге

Второй биндинг:
$FilteredTable1records> Table2:Records list, записи создаются в Table 2 на основе Table1 записей.

Destination Table1 и Table2 связаны только через datasource. Возможно ли это?
Старый 19.12.2022, 13:59   #5  
MorpheusX is offline
MorpheusX
Участник
 
191 / 58 (2) ++++
Регистрация: 04.02.2022
Цитата:
Сообщение от rDenis2 Посмотреть сообщение
Различие со стандартными таблицами банковских выписок в том что в новой таблице (header) указан не период (даты с - по) а одна дата.
И загвоздка в том что надо statement (header) узлы из XML надо разбивать по уникальным датам транзакций (lines).

вопросы следующие:
1. Как (можно ли) сделать следующее - добыть уникальные даты из линий в каждом statement, и потом запустить каждый statement в цикле из дат и создать столько headerov сколько уникальных дат и соотвественно линий под header только с этими датами.
Я бы не создавал кастомные таблицы, а импортировал в стандартные с одинаковым значением полей "С даты" и "По дату".

Если модификация ER логики окажется слишком сложной, то можно реализовать периодическую операцию, которая разбивает исходный файл на новые отдельные файлы, каждый на определенную дату из периода дат исходного файла.
Старый 19.12.2022, 14:50   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
записи создаются в Table 2 на основе Table1 записей
Это невозможно.
Старый 27.12.2022, 13:03   #7  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Цитата:
Сообщение от MorpheusX Посмотреть сообщение
Я бы не создавал кастомные таблицы, а импортировал в стандартные с одинаковым значением полей "С даты" и "По дату".

Если модификация ER логики окажется слишком сложной, то можно реализовать периодическую операцию, которая разбивает исходный файл на новые отдельные файлы, каждый на определенную дату из периода дат исходного файла.
Таблицы уже используются для другого банковского решения, поэтому импортировать надо в них.
Старый 27.12.2022, 13:23   #8  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Цитата:
Сообщение от EVGL Посмотреть сообщение
1. Это называется group by: https://learn.microsoft.com/en-us/dy...y-data-sources
При этом
Header := $YourName_GroupByLinesByDate
Header.Date := $YourName_GroupByLinesByDate.grouped.YourDate
Line := $YourName_GroupByLinesByDate.lines
(источников данных). А вот последние могут зависеть друг от друга.
Получилось сгрупировать если в XML 1 header если больше одного берется только первый.

XML:
Header1 (id1)
--line1: date1
--line2: date2
Header2 (id2)
--line1: date3
Header3 (id3)
--line1: date1

mapping:
Datasource структура:

model
-$GroupedByDate=GroupBy(model.header.lines; model.header.lines.date, model.header.lines.headerId) - сгруппировал линии по дате/header id
--$SelectedStatement=where(model.header, model.header.id=$GroupedByDate.grouped.headerId) - это я бинжу к таблице header (destination)
--grouped
---date
---headerId
-header
--lines
---date
---headerId

В дебуггере в узле header показывает 3 записи (header1, header2, header3). А в узле $GroupedByDate - 2 записи из header 1(id1, date1; id1, date2). остальные header игнорируются
Старый 27.12.2022, 19:43   #9  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Вообще-то переменной where(model.header, model.header.id=$GroupedByDate.grouped.headerId) быть не должно. Если уже есть присвоение чего-то к $GroupedByDate (чего я в вашем представлении не вижу, и меня это настораживает: группировка должна ведь какому-то итератору, какой-то последовательности записей на выходе соответствовать?), то из текущего $GroupedByDate[i] всегда можно добраться до header (типа $GroupedByDate.lines.header).

Если же есть WHERE, то ему, наверное, придется скармливать ALLITEMS($GroupedByDate), поскольку как объяснял один ныне уволенный коллега из Майкрософт, внутри Electronic Reporting идет "ленивый поиск": если источник данных ничему не присвоен, то этот источник данных и не читается. Стало быть, если что-то итерируемое никакой последовательности не присвоен, то он и не итерируется. Аналогия: курсор FETCH в T-SQL.

Противодествует такому поведению функция ALLITEMS, которая формирует список, состоящий заведомо из всех возможных записей. Аналогия: копия таблицы в памяти, где все записи извлечены и представлены по значению.
Старый 02.01.2023, 14:14   #10  
MorpheusX is offline
MorpheusX
Участник
 
191 / 58 (2) ++++
Регистрация: 04.02.2022
Цитата:
Сообщение от rDenis2 Посмотреть сообщение
Таблицы уже используются для другого банковского решения, поэтому импортировать надо в них.
Я бы реализовал копирование импортируемых строк из стандартных таблиц в кастомные в методах insert() стандартных таблицы. Такое решение проще чем глубокая модификация ER сущностей и последующее их тестирование и поддержка на протяжении всего их жизненного цикла.
Теги
electronic reporting, er, er file import, er импорт файла, ger

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
erconsult: Electronic Reporting (ER) Cookbook 4: References in a model Blog bot DAX Blogs 0 04.12.2020 06:14
atinkerersnotebook: Debugging Electronic Reporting Models in Dynamics 365 Finance & Supply Chain Management Blog bot DAX Blogs 0 05.09.2020 19:20
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, время: 17:56.