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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2015, 12:45   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Если в таблице, которую планируется фильтровать таким способом - не будет индекса по recid - фильтр будет тормозить.

Не лучше ли пойти другим путем - просто перечислить через запятую те значения полей, по которым построен индекс в фильтруемой таблице таблице (AccountNum например в вашем случае)
и запихнуть это в Range dataSource данной таблицы ?
например qbr.value("10001,10003,10005,15155,13555,15555 и так далее")


Только нужно помнить что у Range есть ограничение на длинну этого самого Range - 250 символов как я понял.
Но это обходится добавлением нового Range в dataSource формы.

Вот пример реализации добаления Range в форме SalesTable



X++:
        // Удалить все Range по SalesId
        while (SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).findRange(fieldnum(SalesTable, SalesId)))
        {
           SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).clearRange(fieldnum(SalesTable, SalesId));
        }

	// Получить список Range, разбитых по длинне не более 250 символов
        rangeCon = salesStatusFilter.criteriaCon();

        if (rangeCon == conNull())
        {
            SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).addRange(fieldnum(SalesTable, SalesId)).value("null");
        }
        else
        {
            // Может быть добавлено несколько Range
            for (i = 1; i <= conLen(rangeCon); i++)
            {
                rangeTmp = conPeek(rangeCon, i);

                qbr = SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).addRange(fieldnum(SalesTable, SalesId));

                qbr.value(rangeTmp);
            }
        }
       SalesTable_ds.research();
Вот пример как эти Range подготовить (разбитые по 250 символов)

X++:
    range = "";

    while (    )
    {
        salesTable =   ;

        pr.setText("Обработка заказа: " + salesTable.SalesId);
        pr.incCount();


        if (     )
        {
            if (strLen(range + "," + salesTable.SalesId) > #maxQueryRangeLen)
            {
                statusFilterCon += range;

                range = "";
            }

            if (range)
                range += ",";

            range += salesTable.SalesId;

            i++;
        }
    }

    if (range)
    {
        statusFilterCon += range;
    }
Таким способом можно фильтровать сотни (может и тысячи) произвольных записей.
При этом будет работать индекс в фильтруемой таблице
Теги
recordrefrencelist_ru, ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Query на Datasource в LookUp-форме. dynamax DAX: Программирование 26 09.10.2009 15:58
Отображение AOT_Query на форме часть 2 radya DAX: Программирование 7 05.06.2008 17:33
отображение значений query на форме fialka DAX: Программирование 13 31.07.2007 14:31
Динамическое изменение Query() на форме makos DAX: Программирование 22 05.07.2006 16:28

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

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

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