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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.02.2008, 21:22   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Post Как указать в запросе даты, которые не входят в период?
У меня не получается сделать выводы из темы (причем раньше я боролась с или на разные поля и получилось, должно было бы быть легче, но снова грабли только другого цвета)

Задача. Есть таблица проводок по кассе.
Дата задается дважды:
1. запрос , в котором пользователь выбирает периода типа 010108..31.01.08
2. в процессе обработке мне надо уточнить, что есть даты, которые не входят в период. Я их занесла в контейнер

X++:
          strRangeDate = element.query().dataSourceTable(tablenum(RCashTrans)).findRange(fieldnum(RCashTrans,TransDate)).value();      
            qbrDate = qbdsTO.addRange(fieldnum(RCashTrans,TransDate));
            strRangeDate1 = "(%1 == "+strRangeDate+')';
            for (numRec=1; numRec <= conlen(line); numRec++)
            {
                    strRangeDate1 +=  '&&(%1 != '+conpeek(line,numRec)+')';
            }

            qbrDate.value(strFmt(strRangeDate1, fieldStr(RCashTrans, TransDate)));
На сию фигню программа реагирует так
Info Сообщение (21:16:10) Начало формирования графиков кассы - 09.16.04 pm
Error Сообщение (21:16:10) Невозможно выбрать запись в 'Проводки по касcе' ('RCashTrans') Касса: , .
База данных SQL обнаружила ошибку.
Info Сообщение (21:16:10) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting datetime from character string.
Info Сообщение (21:16:10) Оператор SQL:
Код:
SELECT A.VOUCHER,A.TRANSDATE,A.CURRENCYCODE,A.AMOUNTCUR,A.AMOUNTMST,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.DIMENSION5_,A.DIMENSION6_,A.DIMENSION7_,A.DIMENSION8_,A.TXT,A.ACCOUNTNUM,A.OFFSETACCOUNTTYPE,A.DOCID,A.DOCTYPE,A.OFFSETACCOUNTNUM,A.OFFSESSIONID,A.LEDGERACCOUNT,A.ATTACHMENTNUM,A.RPAYTRANSTYPE,A.TRANSSTATUS,A.DOCTAXVALUE,A.POSTED,A.OFFSETLEDGERACCOUNT,A.DOCREPRESPERSONID,A.ATTACHEMENTDATE,A.DOCSALESTAXVALUE,A.MANUALDOCID,A.CONTRACTCODE,A.CONTRACTACCOUNT,A.REFRECID,A.DOCREPRESTYPE,A.RECID,B.DIMCF,B.DIMCF2_,B.DIMCF3_,B.DIMCF4_,B.DIMCF5_,B.DIMCF6_,B.DIMCF7_,B.DIMCF8_,B.VENDNUM,B.CONRACTNUM,B.CONTRACTCODE,B.RECID,A.PAYMENTNOTES FROM RCASHTRANS A,TREASURYCASHFORBUDGET_CAT B WHERE ((A.DATAAREAID='01r') AND (A.TRANSDATE={ts '2124-40-01 00:00:00.000'})) AND ((B.DATAAREAID='v01') AND (A.DIMENSION5_=B.DIMCF5_)) ORDER BY A.DATAAREAID,A.TRANSDATE,A.DIMENSION5_,A.DIMENSION3_,A.DIMENSION2_ OPTION(FAST 22)
Причем мне не ясно как работать с тем фактом, что пользователь задает период. Ведь он не пишет конкретную дату.
Старый 29.02.2008, 22:12   #2  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
1) диапазон можно задать в виде (date >= beginDate) && (date <= endDate)
2) При записи сложного условия фильтрации для дат нужно использовать функцию date2strXpp().
Старый 01.03.2008, 09:18   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
1) иными словами разобрать запрос в плане периода дат я не могу и придется все же делать период дат отдельно в виде реквизитов диалога?
Старый 01.03.2008, 12:53   #4  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от Arahnid Посмотреть сообщение
1) иными словами разобрать запрос в плане периода дат я не могу и придется все же делать период дат отдельно в виде реквизитов диалога?
А кто мешает сделать такое преобразование програмно?
Считываем значение range в строку, вытаскиваем из неё даты и формируем новое условие, которое подставляем в range вместо исходного.
Старый 01.03.2008, 13:07   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Arahnid, архиОгромнейшая просьба: создавайте отдельные ветки для новых вопросов.
Если нужно сослаться на какую-то другую ветку, то просто сделайте ссылку.
Ну, сколько можно?

Цитата:
Сообщение от Arahnid Посмотреть сообщение
Задача. Есть таблица проводок по кассе.
Дата задается дважды:
1. запрос , в котором пользователь выбирает периода типа 010108..31.01.08
2. в процессе обработке мне надо уточнить, что есть даты, которые не входят в период. ...
Не разбирайте запрос пользователя.
Просто допишите: +",!20.01.08,!15.01.08"
И все.

Кроме того, обратите внимание, что когда вы пишете обычный range то должны писать дату в формате локали клиента 20.01.08. Если же вы пишете дату в условии через скобки ((filed = 'date')) то скорее всего вам придется писать дату в виде литерала 20\01\2008

Цитата:
Сообщение от Arahnid Посмотреть сообщение
1) иными словами разобрать запрос в плане периода дат я не могу и придется все же делать период дат отдельно в виде реквизитов диалога?
Я так и не понял зачем вы собираетесь "разбирать запрос".
Прежде чем программировать, подумайте как бы эту задачу решил пользователь своими руками.
__________________
полезное на axForum, github, vk, coub.
Старый 01.03.2008, 17:13   #6  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Не разбирайте запрос пользователя.
Просто допишите: +",!20.01.08,!15.01.08"
И все.
Точно В обычном range ",!" интерпретируется как AND NOT, в то время как просто "," как OR
Цитата:
Сообщение от mazzy Посмотреть сообщение
Если же вы пишете дату в условии через скобки ((filed = 'date')) то скорее всего вам придется писать дату в виде литерала 20\01\2008
Для этого случая как раз и нужна функция date2strXpp().
Цитата:
Сообщение от mazzy Посмотреть сообщение
Я так и не понял зачем вы собираетесь "разбирать запрос".
Поскольку первоначальная тема было по "расширенной" фильтрации ("через скобки"), то я предложил решение в виде ((%date% >= date1) && (%date% <= date2) && (%date% != date3)), т.к. при таком виде записи диапазон дат через ".." не задается. Но в данном случае все решается намного проще
Старый 01.03.2008, 17:32   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от dn Посмотреть сообщение
Для этого случая как раз и нужна функция date2strXpp().
и я про это - следить придется

Цитата:
Сообщение от dn Посмотреть сообщение
Поскольку первоначальная тема было по "расширенной" фильтрации ("через скобки"), то я предложил решение в виде ((%date% >= date1) && (%date% <= date2) && (%date% != date3)), т.к. при таком виде записи диапазон дат через ".." не задается. Но в данном случае все решается намного проще
А первоначальная это какая?
Вопрос Arahnid был выделен отсюда Очередной вопрос про Query
__________________
полезное на axForum, github, vk, coub.
Старый 01.03.2008, 17:42   #8  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
А первоначальная это какая?
Вопрос Arahnid был выделен отсюда Очередной вопрос про Query
Как раз эта ветка и была вроде посвящена "расширенной" фильтрации. Разве нет?
Старый 01.03.2008, 18:41   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от dn Посмотреть сообщение
Как раз эта ветка и была вроде посвящена "расширенной" фильтрации. Разве нет?
По-моему, нет. Человек спрашивал как сделать query. Там расширенная фильтрация вовсе ни к чему.

Но теперь мы уже здесь уходим в оффтопик.
__________________
полезное на axForum, github, vk, coub.
Теги
фильтр, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
MDX запрос, выборка за период. Вата DAX: Программирование 2 17.10.2008 14:34
Lookup даты для выбора месяца Antidot DAX: Программирование 0 21.01.2005 21:24
Сортировка в запросе "В Наличии" linney DAX: Программирование 16 20.01.2005 20:01
Очень не хочеться вручную устанавливать даты для всех строк журнала .... ATimTim DAX: Функционал 1 14.09.2004 19:33
Проверка даты Wamr DAX: Программирование 9 15.12.2002 17:28

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:38.