01.07.2004, 12:12 | #1 |
Участник
|
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like
У меня проблема с контейнерными полями:
В классе который вызывает отчет я задаю Range'и на таблицу ledgerJournalTrans. На поле Dimension[3] мне необходимо установить условие, которое в обычном Аксаптовском SQL-e работало бы так : select ledgerJournalTrans where ledgerJournalTrans.Dimension[3] like "ОТВ*" && ledgerJournalTrans.Dimension[3] != "ОТВ-00" т.е. мне нужны строки где в поле Dimension[3] встречается фрагмент "ОТВ" но без "ОТВ-00". На этом форуме нашел обсуждения по этой теме и по аналогии получилось: 1-ый вариант : query.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value(strfmt('((%3 like "%1") && (%3 !="%2"))', "ОТВ","ОТВ-00","Dimension")); 2-й вариант : query.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ*"); query.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("!ОТВ-00"); Но ни 1-ый ни 2-ой вариант не работает. Help me plz, если это возможно. |
|
01.07.2004, 12:29 | #2 |
Участник
|
А если попробовать так ...
PHP код:
|
|
01.07.2004, 13:17 | #3 |
Участник
|
Advanced query range value expressions
Кстати, а можно ли как-нибудь в "advanced query range" вставить условие на Dimension[3]?
Вроде '(Dimension[3]="a" || Dimension[3]="b")... |
|
01.07.2004, 13:42 | #4 |
Участник
|
rinugun
PHP код:
|
|
01.07.2004, 14:02 | #5 |
Участник
|
Дело в том что я использую стандартный класс унаследованный от RunBaseReport.
И в методе InitQuery я ставлю Range'и выглядит это так : X++: public Query initQuery() { Query query; QueryBuildDataSource qbds,qbds1; ; query = super(); query.dataSourceTable(TableNum(LedgerJournalTrans)).findRange(fieldNum(LedgerJournalTrans,AccountType)).value(QueryValue(2)); qbds = query.adddataSource (tablenum(LedgerJournalTrans)); qbds.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ*"); qbds1 = qbds.addDataSource(tablenum(LedgerJournalTrans)); qbds1.relations(true); qbds1.joinMode(JoinMode::NoExistsJoin); qbds1.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ-00"); }qbds.addDataSource -- добавляет мне лишние Датасоурсы. У меня ДатаСоурс определен в отчете. Сработал такой вариант : X++: public Query initQuery() { Query query; QueryBuildDataSource qbds,qbds1; ; query = super(); query.dataSourceTable(TableNum(LedgerJournalTrans)).findRange(fieldNum(LedgerJournalTrans,AccountType)).value(QueryValue(2)); qbds = query.dataSourceTable(tablenum(LedgerJournalTrans)); qbds.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ*"); qbds1 = qbds; qbds1.relations(true); qbds1.joinMode(JoinMode::NoExistsJoin); qbds1.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ-00"); } |
|
01.07.2004, 14:04 | #6 |
Участник
|
Т.е. я хотел сказать что все равно не получилось исключить "ОТВ-00" ((((
|
|
01.07.2004, 14:17 | #7 |
Участник
|
Цитата:
Изначально опубликовано Berty Wooster
rinugun PHP код:
Dimension[1]='a' || Dimension[2]='b'? Возникает проблема впихивания Dimension[i] в advanced range. Я так и не нашел решения, пришлось вводить дополнительное поле Dimension2Copy, которое всегда равно Dimension[2]. |
|
01.07.2004, 14:26 | #8 |
Участник
|
PHP код:
Должно быть именно: PHP код:
PHP код:
PHP код:
|
|
01.07.2004, 14:27 | #9 |
Участник
|
Rinugun читай на этом форуме тему : "Как добавить в addRange условие по "или" на контейнерные поля? "
|
|
01.07.2004, 14:58 | #10 |
Участник
|
Цитата:
Изначально опубликовано Pustik
Rinugun читай на этом форуме тему : "Как добавить в addRange условие по "или" на контейнерные поля? " |
|
01.07.2004, 15:06 | #11 |
Участник
|
я наверное достал, но все-таки, вот что я у меня получилось в итоге в методе InitQuery :
X++: public Query initQuery() { Query query; QueryBuildDataSource qbds,qbds1; ; query = super(); qbds = query.dataSourceTable(TableNum(LedgerJournalTrans)); qbds.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ*"); qbds1 = qbds.addDataSource(tablenum(LedgerJournalTrans)); qbds1.relations(true); qbds1.joinMode(JoinMode::NoExistsJoin); qbds1.addrange (fieldId2Ext(fieldNum(LedgerJournalTrans,Dimension),3)).value("ОТВ-00"); } выдает огромное количество строк т.е. по видимому мы добавили еще один DataSource - LedgerJournalTrans но не связали его с тем dataSourse который уже был жестко указан в отчете !!! .т.е. получились две не связанные таблицы.(у меня такое впечатление). Может не хватает связи между qbds и qbds1? . Или может быть это лучше делать в методах отчета? (я все равно туда передаю все свои параметры). |
|
01.07.2004, 15:11 | #12 |
Участник
|
Так и правильно, у LedgerJournalTrans нет relation'а на самого себя.
Надо просто вместо qbds1.relations(true); писать что-то вроде qbds1.addLink(fieldNum(LedgerJournalTrans,RecID),fieldNum(LedgerJournalTrans,RecID)) Ещё, кстати, в последнем value должно стоять не ОТВ-00, а !ОТВ-00. |
|
01.07.2004, 15:22 | #13 |
Участник
|
rinugun , ты прав получилось -- кол-во строк то что нужно, но исключить значение "ОТВ-00" не удалось. Неужели это невозможно ? Неужели возможности range'ей в Axapte так скудны?. Делать это через SQL запрос - значит создавать временную таблицу -- не супер.
|
|
01.07.2004, 15:39 | #14 |
Модератор
|
Вариант с range OTB-01..OTB-99 (не знаю, к сожалению, как на самом деле у вас нумерация идет) не рассматривали?
|
|
01.07.2004, 16:09 | #15 |
Участник
|
Цитата:
Изначально опубликовано Pustik
rinugun , ты прав получилось -- кол-во строк то что нужно, но исключить значение "ОТВ-00" не удалось. Неужели это невозможно ? Неужели возможности range'ей в Axapte так скудны?. Делать это через SQL запрос - значит создавать временную таблицу -- не супер. У меня работает вот такой код (с поправкой на другие значения третьей аналитики) в форме: PHP код:
|
|
03.07.2004, 11:54 | #16 |
Участник
|
Огромное Спасибо всем, все получилось.Приятно было пообщаться.
|
|
Теги |
container, like, query, xor, запрос (query), фильтр |
|
|