AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 26.07.2011, 17:31   #1  
axalex ist offline
axalex
Участник
 
91 / 14 (1) ++
Registriert seit: 14.03.2011
Cool Сложный Range в Query.
Приветствую!
Есть запрос, внутри Range. Следущего типа:
X++:
range = strfmt('(\"%1\" > %2)',
                        DateTimeUtil::addMinutes(Global_UN::serverDateTime_ASU(), str2int(fieldid2name(tableNum(DocCircTypeTable_UN), fieldNum(DocCircTypeTable_UN, TimeChange)))),
                        fieldid2name(tableNum(DocCircTable_UN), fieldNum(DocCircTable_UN, modifiedDateTime)) );
Хочется получить фильтр типо (Сегодня + минуты (поля1) > поле2).
Идея - автосогласования документов в документообороте.

Сам вопрос: на какую функцию заменить str2int(), или ещё как нибудь сделать чтобы подтянуть в рэндж запроса значение поле TimeChange. Возможно ли это? Или какие нибудь дедовские методы... (Данная конструкция работает без ошибок, но не правильно).

Понимаю что остается вариант переделать в while select..
__________________
С уважением, Алексей.
Alt 26.07.2011, 18:23   #2  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von axalex Beitrag anzeigen
Хочется получить фильтр типо (Сегодня + минуты (поля1) > поле2).
а какого типа поле1 и поле2?
насколько я понимаю, оба DateTime?
могут ли минуты(поля1) быть больше суток?

можно ли свести условие к следующему?
Сегодня >= дата(поле2) И минуты(поля1) > минуты(поля2)

=======================
к while select'у точно сводить не надо - замучаетесь.
в крайнем случае делать условие силами самой аксапты внутри цикла.
X++:
while( qr.next() )
{
    if( ...... )
    {
        ....
    }
}
причем, учтите, что из-за всевозможных кэширований вариант с условием внутри цикла может быть быстрее сложного запроса.
__________________
полезное на axForum, github, vk, coub.
This post has been rated by: axalex (1).
Alt 26.07.2011, 18:28   #3  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von axalex Beitrag anzeigen
...Сегодня...
Да, и еще одно.

"Сегодня" в аксапте бывает двух видов:
1. рабочая дата - редактируется в меню сервис, получить можно функцией systemdateget()
2. системная дата - в аксапте не редактируется. отредактировать можно только в самом компьютере. получить можно функцией today()
__________________
полезное на axForum, github, vk, coub.
Alt 26.07.2011, 19:10   #4  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2494 (89) +++++++++
Registriert seit: 20.08.2005
Судя по использованию DateTimeUtil и полю modifiedDateTime речь идет о DAX2009 и, соответствено, о типе UTCDateTime

А так как используется метод addMinutes(), второй параметр которого int, то и поле TimeChange имеет тип, скорее всего, int и содержит смещение в в целых минутах


Если бы это поле так же имело тип UTCDateTime, то можно было бы попробовать такое условие
X++:
(modifiedDateTime-TimeChange < 2011-07-26T19:06:00)
но, к сожалению, при наличии арифметических операций с полями, Аксапта преобразует подствляемую дату/время в какое-то непотребство (целочисленное значение).
Так у меня на RU7, по крайней мере
__________________
Axapta v.3.0 sp5 kr2
This post has been rated by: mazzy (2), axalex (1).
Alt 26.07.2011, 20:17   #5  
axalex ist offline
axalex
Участник
 
91 / 14 (1) ++
Registriert seit: 14.03.2011
:)
Zitat:
Zitat von mazzy Beitrag anzeigen
а какого типа поле1 и поле2?
насколько я понимаю, оба DateTime?
могут ли минуты(поля1) быть больше суток?

можно ли свести условие к следующему?
Сегодня >= дата(поле2) И минуты(поля1) > минуты(поля2)
}[/xpp]
Тип поля один - Time
Тип поля два - DateTime
В комплексе: DateTime(Date+Time)>DateTime
Да, минуты могут быть больше суток, и не одних.

Свести к Сегодня >= дата(поле2) И минуты(поля1) > минуты(поля2) можно, но учитывая сдвиг в минутах больше суток возникают задачи другого характера.

В качестве Сегодня брал:
X++:
DateTimeUtil::newDateTime(systemdateget(),timenow());
DateTimeUtil::getUserPreferredTimeZone() решил не трогать, хотя присутствует вопрос в разности часовых поясов(решу позже).

Zitat:
Zitat von AndyD Beitrag anzeigen
Судя по использованию DateTimeUtil и полю modifiedDateTime речь идет о DAX2009 и, соответствено, о типе UTCDateTime

А так как используется метод addMinutes(), второй параметр которого int, то и поле TimeChange имеет тип, скорее всего, int и содержит смещение в в целых минутах
Всё верно DAX2009, смещение в минутах.

Решил сделать так:
X++:
while (qR.next())
    {
        ...........

        if (DateTimeUtil::addMinutes(Global_UN::serverDateTime_V(), -typeTable.TimeChange) > docTable.modifiedDateTime
            && DateTimeUtil::addMinutes(Global_UN::serverDateTime_V() , -2880) < docTable.modifiedDateTime)
        {
        ...........
        }
    }
X++:
static server UtcDateTime serverDateTime_V()
{
    return DateTimeUtil::newDateTime(systemdateget(),timenow());//DateTimeUtil::getUserPreferredTimeZone());
}
Работает быстро.. Спасибо.
__________________
С уважением, Алексей.

Geändert von axalex (26.07.2011 um 20:20 Uhr)
Alt 26.07.2011, 20:50   #6  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von axalex Beitrag anzeigen
Свести к Сегодня >= дата(поле2) И минуты(поля1) > минуты(поля2) можно, но учитывая сдвиг в минутах больше суток возникают задачи другого характера.

...
Работает быстро..
Чтобы было не так страшно и чтобы сделать быстрее, уменьшив выборку
В запрос можно ввести условие Сегодня >= дата(поле2)

range = SysQuery::range(systemdateget(),"");

а более точное условие проверить внутри цикла.
__________________
полезное на axForum, github, vk, coub.
Alt 26.07.2011, 22:38   #7  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2494 (89) +++++++++
Registriert seit: 20.08.2005
Если таблица большая и эта операция выполняется часто, то я бы сделал еще одно поле типа UTCDateTime, в которое записывал при добавлении и обновлении modifiedDateTime + TimeChange. И сделал индекс по полю

Выборка будет простым сравнением на больше-меньше
__________________
Axapta v.3.0 sp5 kr2
Alt 28.07.2011, 13:29   #8  
axalex ist offline
axalex
Участник
 
91 / 14 (1) ++
Registriert seit: 14.03.2011
Zitat:
Zitat von mazzy Beitrag anzeigen
Чтобы было не так страшно и чтобы сделать быстрее, уменьшив выборку
В запрос можно ввести условие Сегодня >= дата(поле2)

X++:
range = SysQuery::range(systemdateget(),"");
а более точное условие проверить внутри цикла.
Так и сделал. Получилось довольно комфортно.
+ переделал внутренности чутка, для правильности работы.
X++:
  if (DateTimeUtil::addMinutes(Global_UN::serverDateTime(), -typeTable.TimeChange) > docTable.modifiedDateTime
            && DateTimeUtil::addMinutes(Global_UN::serverDateTime() , -2880) < docTable.modifiedDateTime)
AndyD - интересно, попробую.
Всем спасибо.
__________________
С уважением, Алексей.
Stichworte
query, range

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
sumitax: AX Queries – Passing query range as parameter Blog bot DAX Blogs 0 29.06.2011 13:11
sumitsaxfactor: Using Methods Inside Query Range Blog bot DAX Blogs 0 05.05.2011 20:12
msdax: How to Specify Range Values on a Query in a AX SSRS Report - AX Support - Site Home - MSDN Blogs Blog bot DAX Blogs 0 31.03.2011 11:11
axaptafreak: Label for Query Range cannot be modified (still) Blog bot DAX Blogs 2 25.07.2007 10:09
Как вытащить информацию о Range из Query raz DAX: База знаний и проекты 1 26.03.2004 11:10

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:08 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.