2012-05-29 2 views
1

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

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

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

setQuerySortOrder setQueryEnableDS

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

setQueryRange

Код для SetQuery диапазона следующим образом;

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; 
} 
} 
+0

Проблема я имею с закомментированными линиями. Диапазон не может быть Тип :: Дата, и это вызывает проблемы с диапазоном и значениями. Я попытался добавить еще один новый раздел диапазона, но нет никакого дела, как со Str. Также попробовал date2str, но не знаете, где разместить это в коде? – will

ответ

0

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

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

rangeExpStartDate = addrange(rangeExpStartdate, queryValue(logisticsTable.APMExpDateJobStart), qbdsLogisticsTable, fieldNum(LogisticsControlTable, APMExpDateJobStart), expStartDate); 
+0

Привет, Ян, я пробовал это, но я получаю ошибку; «Ошибка 11,« Аргумент «_range» несовместима с требуемым типом ». Поскольку это дата не строка. Не будет ли использование date2str? – will

+0

Вы заметили часть 'queryValue' моего изменения? Это форматирует дату как строку, подходящую для запроса. –

+0

Я добавил это вчера, и у меня все еще есть ошибка, я снова попробую сегодня, и она работает. Еще раз спасибо Ян, я бы потерялся в MorphX без вашего руководства :) – will