Dynamics AX 2009 X ++ Выбор диапазона дат

Я создаю отчет X ++, и требование состоит в том, чтобы пользователь мог выбрать несколько вариантов в форме, и когда они нажимают кнопку меню отчета, значения извлекаются в зависимости от выбора.

Пока это достаточно просто, и я могу использовать диапазоны Str, то есть номера заказов, идентификаторы элементов и т. Д., Но я хочу иметь возможность выбирать диапазон дат на основе выбора.

Я использовал метод, который используется в нескольких отчетах MorphX, с использованием 3 ключевых методов в отчетах X ++;

setQuerySortOrder setQueryEnableDS

и главный ключевой, который есть;

setQueryRange

Код для setQuery Range выглядит следующим образом:

private void setQueryRange(Common _common)
{
    FormDataSource              fds;

    LogisticsControlTable       logisticsTable;
    QueryBuildDataSource        qbdsLogisticsTable;

    QueryBuildRange             qbrVanRun;
    str                         rangeVanRun;

    QueryBuildRange             qbrLogId;
    str                         rangeLogId;

    QueryBuildRange             qbrExpStartDate;
    str                         rangeExpStartDate;

    set                         vanRunSet       = new Set(Types::String);
    set                         logIdSet        = new Set(Types::String);
    set                         expStartDate    = new Set(Types::Date);

    str addRange(str _range, str _value, QueryBuildDataSource _qbds, int _fieldNum, Set _set = null)
    {
    str             ret = _range;
    QueryBuildRange qbr;
    ;

    if(_set && _set.in(_Value))
    {
        return ret;
    }

    if(strLen(ret) + strLen(_value) + 1 > 255)
    {
        qbr = _qbds.addRange(_fieldNum);
        qbr.value(ret);
        ret = '';
    }

    if(ret)
    {
        ret += ',';
    }

    if(_set)
    {
        _set.add(_value);
    }

    ret += _value;
    return ret;
}

switch(_common.TableId)
{
    case tableNum(LogisticsControlTable):

    qbdsLogisticsTable  = element.query().dataSourceTable(tableNum(LogisticsControlTable));
    qbrVanRun           = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, APMServiceCenterID));

    qbdsLogisticsTable  = element.query().dataSourceTable(tableNum(LogisticsControlTable));
    qbrLogId            = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, LogisticsId));

//       qbdsLogisticsTable  = element.query().dataSourceTable(tableNum(LogisticsControlTable));
//        qbrExpStartDate     = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, APMExpDateJobStart));

    fds = _common.dataSource();

    for(logisticsTable = fds.getFirst(true) ? fds.getFirst(true) : _common;
        logisticsTable;
        logisticsTable = fds.getNext())
    {
        rangeVanRun         = addrange(rangeVanRun, logisticsTable.APMServiceCenterID, qbdsLogisticsTable, fieldNum(LogisticsControlTable, APMServiceCenterID), vanRunSet);
        rangeLogID          = addrange(rangeLogID, logisticsTable.LogisticsId, qbdsLogisticsTable, fieldNum(LogisticsControlTable, LogisticsId), logIdSet);
//           rangeExpStartDate   = addrange(rangeExpStartdate,       logisticsTable.APMExpDateJobStart, qbdsLogisticsTable, fieldNum(LogisticsControlTable, APMExpDateJobStart), expStartDate);
    }



qbrLogId.value(rangeLogID);
    qbrVanRun.value(rangeVanRun);
    break;
}
}

person will    schedule 29.05.2012    source источник
comment
У меня проблема с закомментированными строками. Диапазон не может быть Type :: Date, и это вызывает проблемы с диапазоном и значениями. Я пробовал добавить еще один новый раздел диапазона, но нет случая, как с Str. Также пробовал date2str, но не знаете, где разместить это в коде?   -  person will    schedule 29.05.2012


Ответы (1)


Используйте queryValue, чтобы правильно отформатировать даты для запроса:

set expStartDate = new Set(Types::String);

rangeExpStartDate = addrange(rangeExpStartdate, queryValue(logisticsTable.APMExpDateJobStart), qbdsLogisticsTable, fieldNum(LogisticsControlTable, APMExpDateJobStart), expStartDate);
person Jan B. Kjeldsen    schedule 29.05.2012
comment
Привет, Ян, я пробовал это, но получаю сообщение об ошибке; Ошибка 11, аргумент _range несовместим с требуемым типом. Поскольку это дата, а не строка. Не будет ли использования date2str? - person will; 29.05.2012
comment
Вы заметили queryValue часть моего изменения? Это форматирует дату как строку, подходящую для запроса. - person Jan B. Kjeldsen; 29.05.2012
comment
Я добавил это вчера, и у меня все еще возникает ошибка, я пытаюсь снова сегодня, и это работает. Еще раз большое спасибо, Ян, я бы потерялся в MorphX без твоего руководства :) - person will; 30.05.2012