29.02.2008, 21:22 | #1 |
Участник
|
Как указать в запросе даты, которые не входят в период?
У меня не получается сделать выводы из темы (причем раньше я боролась с или на разные поля и получилось, должно было бы быть легче, но снова грабли только другого цвета)
Задача. Есть таблица проводок по кассе. Дата задается дважды: 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 |
Участник
|
1) диапазон можно задать в виде (date >= beginDate) && (date <= endDate)
2) При записи сложного условия фильтрации для дат нужно использовать функцию date2strXpp(). |
|
01.03.2008, 09:18 | #3 |
Участник
|
1) иными словами разобрать запрос в плане периода дат я не могу и придется все же делать период дат отдельно в виде реквизитов диалога?
|
|
01.03.2008, 12:53 | #4 |
Участник
|
Цитата:
Считываем значение range в строку, вытаскиваем из неё даты и формируем новое условие, которое подставляем в range вместо исходного. |
|
01.03.2008, 13:07 | #5 |
Участник
|
Arahnid, архиОгромнейшая просьба: создавайте отдельные ветки для новых вопросов.
Если нужно сослаться на какую-то другую ветку, то просто сделайте ссылку. Ну, сколько можно? Цитата:
Просто допишите: +",!20.01.08,!15.01.08" И все. Кроме того, обратите внимание, что когда вы пишете обычный range то должны писать дату в формате локали клиента 20.01.08. Если же вы пишете дату в условии через скобки ((filed = 'date')) то скорее всего вам придется писать дату в виде литерала 20\01\2008 Цитата:
Прежде чем программировать, подумайте как бы эту задачу решил пользователь своими руками. |
|
01.03.2008, 17:13 | #6 |
Участник
|
Цитата:
Цитата:
Поскольку первоначальная тема было по "расширенной" фильтрации ("через скобки"), то я предложил решение в виде ((%date% >= date1) && (%date% <= date2) && (%date% != date3)), т.к. при таком виде записи диапазон дат через ".." не задается. Но в данном случае все решается намного проще |
|
01.03.2008, 17:32 | #7 |
Участник
|
и я про это - следить придется
Цитата:
Вопрос Arahnid был выделен отсюда Очередной вопрос про Query |
|
01.03.2008, 17:42 | #8 |
Участник
|
Цитата:
Сообщение от mazzy
А первоначальная это какая?
Вопрос Arahnid был выделен отсюда Очередной вопрос про Query |
|
01.03.2008, 18:41 | #9 |
Участник
|
Цитата:
Но теперь мы уже здесь уходим в оффтопик. |
|