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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2020, 16:34   #1  
Vlad_ is offline
Vlad_
Участник
 
11 / 10 (1) +
Регистрация: 24.09.2019
Адрес: Санкт-Петербург
Цитата:
Сообщение от smailik Посмотреть сообщение
а лучше вот так
X++:
.value(strfmt('((%1.%2 like "%3") || (%1.%4 like "%5"))',
    qbdsMyTable.name(),
    fieldStr(MyTable, Node),
    'val1',
    fieldStr(MyTable, AutoParkId),
    'val2'));
Да, ровно так эта строка и генерится, только поля на разных таблицах и на разных ds расположены
Старый 31.01.2020, 16:50   #2  
Vlad_ is offline
Vlad_
Участник
 
11 / 10 (1) +
Регистрация: 24.09.2019
Адрес: Санкт-Петербург
Джойним датасорс:
X++:
childQBDS = qbds.addDataSource(tableNum(AS_ComVehicleLink), "AS_ComVehicleLink"); // здесь разные ошибки в зависимости от того, указываем или нет имя
childQBDS.addLink(fieldNum(RWPreliminaryRepair, VehicleId), fieldNum(AS_ComVehicleLink, VehicleId));
Генерим строку для фильтрации:
X++:
str makerFilterStr(Set _filterSet = filterSet)
{
    SetEnumerator se;
    str filterStr;
    ;

    fldStr = fieldStr(AS_ComVehicleLink, Node);
    se = _filterSet.getEnumerator();
    while (se.moveNext())
    {
        if (!se.current())
        {
            continue;
        }
        if (filterStr)
        {
            filterStr += "||";
        }
   
        filterStr += (strFmt(' (%1.%2 like ("%3")) ',  childQBDS.name(), fldStr, se.current())); // фильтр по ноде вешаем на подчинённый датасорс
    }

    fldStr = fieldStr(RWPreliminaryRepair, AutoParkId);
    se = autoParkFilterSet.getEnumerator();
    while (se.moveNext())
    {
        if (!se.current())
        {
            continue;
        }
        if (filterStr)
        {
            filterStr += "||";
        }
        filterStr += (strFmt(' (%1.%2 like ("%3")) ', qbds.name(), fldStr, se.current())); // фильтр по площадке на главный
    }
    this.parmQBDS(childQBDS);
    //return filterStr;
    return strFmt("(%1)",filterStr);
}
filterStr в этом месте равно
X++:
 "( (AS_ComVehicleLink.Node like ('val')) || (RWPreliminaryRepair.AutoParkId like ('val2')) )"
Накладываем фильтр:
X++:
qbr = childQBDS.addRange(fieldId);
qbr.value(filterStr)
Текст qbds в этом месте:
X++:
 "SELECT FIRSTFAST * FROM RWPreliminaryRepair JOIN FIRSTFAST * FROM AS_ComVehicleLink WHERE RWPreliminaryRepair.VehicleId = AS_ComVehicleLink.VehicleId AND ((( (AS_ComVehicleLink.Node like ('val1')) || (RWPreliminaryRepair.AutoParkId like ('val2')) )))"

Последний раз редактировалось Vlad_; 31.01.2020 в 16:57.
Старый 31.01.2020, 17:26   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Vlad_ Посмотреть сообщение
X++:
    this.parmQBDS(childQBDS);
Что у вас делает этот метод? Вы случайно не переопределяете основной источник данных на вложенный?
Старый 31.01.2020, 17:28   #4  
Vlad_ is offline
Vlad_
Участник
 
11 / 10 (1) +
Регистрация: 24.09.2019
Адрес: Санкт-Петербург
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Что у вас делает этот метод? Вы случайно не переопределяете основной источник данных на вложенный?
Нет, не на форме. Подставляю его в класс, чтобы фильтр накладывался именно на подчинённый ds. На форме остаётся родительский.
Теги
ax2009, qbds

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка расширенного диапазона запроса samolalex DAX: Программирование 2 18.04.2014 00:59
Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 0. uskutus DAX: Программирование 5 11.04.2012 13:48
Ошибка расширенного диапазона запроса: stTable2.ItemId не является корректной парой datasource.field рядом с 24. uchenik DAX: Программирование 14 05.05.2011 08:47
Ошибка расширенного диапазона Yugene DAX: Программирование 1 21.04.2006 10:36
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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