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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2020, 13:26   #1  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Как в addRange написать условие что дата равна пустому значению
Как в addRange написать условие что дата равна пустому значению?

Вот мой код он не работает. Пробовал по всякому.

formQuery.dataSourceNo(2).addRange(fieldNum(DocsInner_ICL, PeriodEnd)).
value(strFmt("( (%1 > %2) || (%1 = dateNull()) )", //
fieldStr(DocsInner_ICL, PeriodEnd),
transDate,
dateNull()));

должно быть условие что PeriodEnd либо больше указанной даты или не заданно.
Почти весь день с этим копаюсь
Старый 08.12.2020, 13:36   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 543 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Посмотрите global\date2StrXpp по перекрёстным ссылкам, например вот так это выглядит в методе SalesLine\buildDateRangeStr ax2013 r3

X++:
/// <summary>
///  build date range string with confirmed date. If confirmed is not filled, build with requested date.
/// </summary>
/// <param name="_dataSourceName">
///   The data source name which need the range.
/// </param>
/// <param name="_fieldNameConfirmed">
///   The field name of confirmed date.
/// </param>
/// <param name="_fieldNameRequested">
///   The field name of requested date.
/// </param>
/// <param name="_dateFrom">
///   The from date for the range.
/// </param>
/// <param name="_dateTo">
///  The to date for the range.
/// </param>
/// <returns>
///  The query range string.
/// </returns>
public static str buildDateRangeStr(str _dataSourceName, str _fieldNameConfirmed, str _fieldNameRequested, date _dateFrom, date _dateTo)
{
    if (_dateTo == dateNull())
    {
        _dateTo = dateMax();
    }

    //we select based on confirmed and if confirmed is not filled we add criteria on requested.
    return strFmt("(((%5.%1 != %6) && (%5.%1 >= %3) && (%5.%1 <= %4)) || ((%5.%1 == %6) && (%5.%2 >= %3) && (%5.%2 <= %4)))",
                  _fieldNameConfirmed,
                  _fieldNameRequested,
                  date2StrXpp(_dateFrom),
                  date2StrXpp(_dateTo),
                  _dataSourceName,
                  date2StrXpp(dateNull()));
}
__________________
Sergey Nefedov
Старый 08.12.2020, 13:41   #3  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 543 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Ещё я посмотрел, по идее у вас достаточно простые условия для одного поля, поэтому чтобы было по || можно два раза подряд вызвать addRange.

Т.е. код будет примерно такой :

X++:
formQuery.dataSourceNo(2).addRange(fieldNum(DocsInner_ICL, PeriodEnd)).value(SysQuery::dateRange(transdate, datemax()));
formQuery.dataSourceNo(2).addRange(fieldNum(DocsInner_ICL, PeriodEnd)).value(SysQuery::valueNot(dateNull()));
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: DaniilT (1).
Старый 08.12.2020, 14:50   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Немного синтаксис подправлю

X++:
formQuery.dataSourceNo(2).addRange(fieldNum(DocsInner_ICL, PeriodEnd)).value(SysQuery::range(transdate+1, datenull()));
formQuery.dataSourceNo(2).addRange(fieldNum(DocsInner_ICL, PeriodEnd)).value(SysQuery::value(dateNull()));

Здесь используются 2 правила формирования запросов в Axapta

1. Если использовать несколько addRange() по одному и тому же полю, то в итоговом запросе эти условия будут объединены по ИЛИ

2. SysQuery::range(_from, _to) - это метод, который формирует условия для диапазонов. Т.е. условие "от" и "до" включительно.

Однако если один из параметров не указан (в отношении даты - это dateNul()), то вместо диапазона будет сформировано условие вида "больше или равно" или "меньше или равно" в зависимости от того, какой параметр нулевой

Ну и поскольку Вам надо строго больше, то просто увеличиваем дату на 1 день = transdate+1
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 09.12.2020, 08:34   #5  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Спасибо. всем
Спасибо всем кто ответил. + не все получилось поставить.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Query одно условие по разным полям Andy-k DAX: Программирование 10 29.01.2014 14:59
Условие запуска документооборота по контейнерному полю Maximin DAX: Функционал 1 11.04.2013 12:15
Расширенный AddRange и OuterJoin Russland DAX: Программирование 0 04.07.2006 16:36
Как добавить в addRange условие по "или" на контейнерные поля? Lora DAX: Программирование 9 29.11.2004 13:52
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like Pustik DAX: Программирование 15 03.07.2004 11:54

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:16.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.