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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2012, 21:22   #7  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Похоже я продолжаю упорно рекламировать одну и ту же фичу
Выборка произвольных записей одним запросом
Набираем RecId в Set любым способом (пример пробега по выделенным записям во втором сообщении) ну или вот готовый код:
X++:
public static Set dsGetMarked(FormDataSource _ds)
{
    Set     markedRecords = new Set(Types::Int64);
    Common  markedRecord;

    if (! _ds.anyMarked() && _ds.cursor())
    {
        markedRecords.add(_ds.cursor().RecId);
    }
    else
    {
        markedRecord = _ds.getFirst(true);
        while (markedRecord)
        {
            markedRecords.add(markedRecord.RecId);
            markedRecord = _ds.getNext();
        }
    }
    return markedRecords;
}
Смотрим пример использования класса RecordReferenceList_RU по ссылке выше. У данного класса есть возможность явно установить набор обрабатываемых записей setRecords().
Чуть измененный пример из исходной темы:
X++:
static void refList_TutorialSet(Args _args)
{
    RecordReferenceList_RU  refList = RecordReferenceList_RU::construct();
    RecordReference_RU      ref;
    InventTable             inventTable;
    int                     i;
    Set                     markedRecords = new Set(Types::Int64);
    Query                   query;
    QueryBuildDataSource    qbds;
    QueryRun                queryRun;
    ;

    setprefix("RecordReferenceList_RU");

    while select inventTable
    {
        markedRecords.add(inventTable.RecId);
        i++;
        if (i > 10)
        {
            break;
        }
    }
    refList.setRecords(markedRecords);
    refList.flush();

    info("Query");

    query = new Query();
    qbds  = query.addDataSource(tablenum(InventTable));
    refList.join(qbds);
    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        info(queryRun.get(tablenum(InventTable)).caption());
    }

    info("Select");

    while select inventTable
        join ref
            where ref.RefRecId == inventTable.RecId
               && ref.ParmId   == refList.getParmId()
    {
        info(inventTable.caption());
    }

    refList.cleanup();
}
плюсы/минусы/замечания описаны в исходной теме
За это сообщение автора поблагодарили: Eldar9x (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как вывести номер строки в гриде? funnut DAX: Программирование 21 01.10.2012 16:33
Выбраные строки в гриде. bagyr DAX: Программирование 28 25.03.2005 10:01
Заказ. Форма "Разноска накладной"->Строки-> Поле "закрытие" ATimTim DAX: Функционал 2 30.11.2004 16:14
Журнал переноса->Строки->Поле "Количество" . Нужен "0" по умолчанию вместо ATimTim DAX: Функционал 5 26.06.2004 12:17
Заказов -> Строки заказов -> Запросы -> Пункт "Производство" Андре DAX: Программирование 1 20.09.2002 10:43

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

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

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