Диапазон дат в запросе Dynamics AX - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы построить диапазон запросов, где

enter image description here

ActiveTo <сегодня || ActiveFrom> сегодня.

Возможно, я пробовал что-то подобное, но это не работает.

qbdsDimAttrValue = ds.addDataSource(tableNum(DimensionAttributeValue));
qbrMainAccountActiveFrom = qbdsDimAttrValue.addRange(fieldnum(DimensionAttributeValue,ActiveFrom));
qbrMainAccountActiveFrom.value(strFmt('(((%1.%2 != 0) || (%1.%3 != 0)) && ((%1.%2 > %4) || (%1.%3 < %4)))',   
            qbdsDimAttrValue.name(),
            fieldStr(DimensionAttributeValue,ActiveFrom),
            fieldStr(DimensionAttributeValue,ActiveTo),
            today(),
            ));

Я пишу 0, потому что в таблице DimensionAttributeValue, если поле ActiveFrom, ActiveTo равно нулю, оно имеет значение 0, а не dateNull (), dateMax ()

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Значения даты, используемые в таких запросах, должны быть в формате dd\MM\yyyy - для этой цели вы можете использовать функцию date2StrXpp().

Попробуйте использовать следующий диапазон:

qbrMainAccountActiveFrom.value(
    strFmt('((%1.%2 > %4) || ((%1.%3 < %4) && (%1.%3 != %5)))',
            qbdsDimAttrValue.name(),
            fieldStr(DimensionAttributeValue, ActiveFrom),
            fieldStr(DimensionAttributeValue, ActiveTo),
            date2StrXpp(systemDateGet()),
            date2StrXpp(dateNull())
            ));
0 голосов
/ 07 сентября 2018

Если вы отметите Global::dateNull(), вы увидите, что он возвращает '01 \ 01 \ 1900 ', также вы можете видеть, что база данных не хранит 0 в этих полях: enter image description here

Вы можете найти более подробную информацию здесь

Таким образом, вы можете упростить свой расширенный диапазон следующим образом

qbrMainAccountActiveFrom.value(strFmt('((%1.%2 > %4) || (%1.%3 < %4))',   
                               qbds.name(),
                               fieldStr(DimensionAttributeValue, ActiveFrom),
                               fieldStr(DimensionAttributeValue, ActiveTo),
                               today()
                               ));
...