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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2016, 18:56   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Alucardkds Посмотреть сообщение
Я только начинаю тесно работать с MS DynamicsAX
И еще. Здесь народ знает другие языки. И очень многие знают SQL.

Напишите что вы хотите реализовать на том языке, который вам удобен.
Или напишите SQL-запрос, который вы хотите реализовать в Аксапте.

Так будет проще.
За это сообщение автора поблагодарили: Alucardkds (1).
Старый 31.03.2016, 09:33   #2  
Alucardkds is offline
Alucardkds
Участник
 
8 / 10 (1) +
Регистрация: 04.10.2014
Доброе утро.
Вариант с queryRun.prompt() помог решить проблему. Корректно отдельно заполняются оба query.

Цитата:
Напишите что вы хотите реализовать на том языке, который вам удобен.
Или напишите SQL-запрос, который вы хотите реализовать в Аксапте.
Первоначально была ситуация следующая:
Есть отчёт, где входящими значениями являются:
1. Начальная дата.
2. Конечная дата.
3. Подразделение работников. (Данные из Table1, что представляет из себя справочник подразделений специализированных рабочих).
4. Рабочее подразделение. (Данные из Table2, что представляет из себя справочник всех подразделений, используемых в системе, в том числе данные из Table1 есть в Table2).
И это были обыкновенные диалоговые поля с однозначным выбором, то есть 1 поле = 1 значение.

Пришёл запрос, что необходимо строить отчёт не по 1 значению, а по нескольким подразделениям, например,
1) 3 значения из Table1 и 1 значение из Table2 или
2) 2 значение из Table1 и 2 значения из Table2 (притом должны быть выведены значения по 4-м пар значений: 1-1, 1-2, 2-1, 2-2, где первое число в паре - введённое значение из Table1, а второе - из Table2).
И на эту задачу я придумал то решение, что описал в 1-м сообщении.
Но столкнувшись с проблемой решил здесь спросить совета, а вдруг я по незнанию упустил какой-то более простой и правильный вариант решения данной задачки.
Старый 31.03.2016, 12:03   #3  
Alucardkds is offline
Alucardkds
Участник
 
8 / 10 (1) +
Регистрация: 04.10.2014
Цитата:
У Вас эти две таблицы никак не связаны между собой? Тот код, что Вы привели - именно так и работает. Т.е. на каждую запись Table1 в отчет выводятся ВСЕ записи Table2? Или все-таки между таблицами есть связь?
Да, эти таблицы связаны. В обеих таблицах есть поле DepartmentId и при создании записи в Table1 могут быть созданы только те, по которым есть записи в Table2.

И моя идея реализации работает по 1-ому варианту, да.
Но если есть что-то более оптимальное - с радостью выслушаю совет..

Последний раз редактировалось Alucardkds; 31.03.2016 в 12:15.
Старый 31.03.2016, 13:09   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Alucardkds Посмотреть сообщение
Да, эти таблицы связаны. В обеих таблицах есть поле DepartmentId и при создании записи в Table1 могут быть созданы только те, по которым есть записи в Table2.

И моя идея реализации работает по 1-ому варианту, да.
Но если есть что-то более оптимальное - с радостью выслушаю совет..
X++:
void initQuery()
{
    query query1 = new query();
   QueryBuildDataSource    qbds1, qbds2;
    ;

    qbds1= query1.addDataSource(tableNum(Table1));
    qbds2= qbds1.addDataSource(tablenum(Table2));

    // Если есть явно прописанные Relation на таблицах или в EDT
    //qbds2.relation(true);
    // Если нет, то указать объединение явно
    qbds2.addLink(fieldnum(Table1, DepartmentId), fieldnum(Table2, DepartmentId))

    // Явное указание полей, которые будут отображены в форме диалога
    qbds1.addRange(fieldnum(Table1, Field1));
    qbds2.addRange(fieldnum(Table2, Field1));

    queryrun1 = new queryRun(query1);
}
X++:
void printSheet1()
{
...
    EDT    edt1, edt2;
    Table1    table1;
    Table2    table2;
...
    ;
    while (queryrun1.next())
    {
        table1 = queryrun1.get(tablenum(Table1));
        table2 = queryrun1.get(tableNum(Table2));

        edt1 = Table1.Field1;
        edt2 = Table2.Field2;
        (...)
  }
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: mazzy (2), Alucardkds (1).
Старый 31.03.2016, 14:29   #5  
Alucardkds is offline
Alucardkds
Участник
 
8 / 10 (1) +
Регистрация: 04.10.2014
Странно, но с предложенным вариантом ничего не хочет выводить.
Все whil'ы успешно пропускает как будто не сформировал query.
Хотя в initQuery заходит и даже успешно запросы делает в датасурс.
Теги
query, queryrun

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxhints: Query datasource FirstOnly property Blog bot DAX Blogs 0 22.03.2016 09:11
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
AIF: OData Query Service Blog bot DAX Blogs 0 24.08.2011 09:11
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05

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

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

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